- Robust Audio Recording: Production-ready recording system using AVAudioEngine
- Intelligent Segmentation: Automatic splitting into configurable time segments (default: 30 seconds)
- Backend Transcription: Integration with OpenAI Whisper API for accurate transcription
- Local Fallback: Automatic fallback to Apple's Speech Framework when backend fails
- Background Recording: Continues recording when app enters background
- Real-time Monitoring: Live audio level visualization and waveform display
- Audio Route Change Handling: Graceful handling of headphone/Bluetooth connections
- Interruption Recovery: Automatic resumption after calls, notifications, and Siri
- Offline Queuing: Queue segments for transcription when network is unavailable
- Retry Logic: Exponential backoff for failed transcription requests
- Data Persistence: Efficient storage using SwiftData with optimized relationships
- Search & Filter: Text search across sessions/transcriptions with date filtering
- iOS 17.0+ (SwiftData requirement)
- Xcode 15.0+
- Swift 5.9+
- iPhone/iPad with microphone access
- Minimum 1GB available storage (for audio files)
- Network connectivity for transcription services
- OpenAI API key for Whisper transcription service
- Backend transcription endpoint (configurable)
git clone https://github.com/your-username/Huddle.git
cd HuddleFor secure API key storage, the app uses Keychain Services. Keys are automatically stored securely on first run. Add your OpenAI API key from the settings to use Whisper
The app requires microphone access. Ensure the following is in Info.plist:
<key>NSMicrophoneUsageDescription</key>
<string>This app needs access to the microphone to record audio notes.</string>For background recording, enable Background App Refresh:
- Go to iOS Settings > General > Background App Refresh
- Enable for Huddle
- Open
Huddle.xcodeprojin Xcode - Select your target device/simulator
- Press
Cmd + Rto build and run
Huddle/
โโโ Core/ # Core business logic
โ โโโ Audio/ # Audio recording and processing
โ โโโ Transcription/ # Local and remote transcription
โ โโโ Network/ # API communication
โ โโโ Storage/ # File and data management
โ โโโ Error/ # Error handling
โโโ Models/ # SwiftData models
โโโ UI/ # User interface components
โ โโโ Components/ # Reusable UI components
โ โโโ Recording/ # Recording interface
โ โโโ Sessions/ # Session management UI
โ โโโ Settings/ # App settings
โโโ Utils/ # Utilities and constants
- Handles audio recording using AVAudioEngine
- Manages audio session configuration
- Processes audio interruptions and route changes
- Supports background recording
- Integrates with OpenAI Whisper API
- Implements retry logic with exponential backoff
- Handles network failures and offline queuing
- Falls back to local Speech Framework when needed
SessionModel: Recording sessions with metadataSegmentModel: Audio segments with transcription dataTranscriptionModel: Transcription results and status
- Tap the record button to start recording
- Audio is automatically segmented every 30 seconds
- Segments are sent for transcription in real-time
- Tap pause to stop recording
- Browse recorded sessions in the main list
- Tap a session to view detailed segments
- Use search to find specific transcriptions
- Filter by date range or transcription status
- Configure recording quality (sample rate, bit depth)
- Set segmentation interval (default: 30 seconds)
- Manage API credentials
- View app statistics and storage usage
Modify AudioManager.swift to adjust:
- Sample rate (default: 44.1 kHz)
- Bit depth (default: 16-bit)
- Audio format (default: PCM)
- Segmentation interval (default: 30 seconds)
Configure in TranscriptionService.swift:
- API endpoint URL
- Request timeout (default: 30 seconds)
- Retry attempts (default: 3)
- Fallback threshold (default: 5 consecutive failures)
Adjust in AudioFileManager.swift:
- Maximum storage usage
- Cleanup policies
- File compression settings
- Background Recording: Limited to 30 seconds without background app refresh
- Storage Management: Manual cleanup required for large datasets
- Transcription Languages: Currently optimized for English
- Network Handling: Limited offline transcription capabilities
- Enhanced background recording duration
- Automatic storage cleanup policies
- Multi-language transcription support
- Advanced audio processing (noise reduction)
- Export functionality for sessions
- iOS Widget support
This project is licensed under the MIT License - see the LICENSE file for details.
For questions, issues, or contributions, please:
- Check existing issues on GitHub
- Create a new issue with detailed description
- Include device information and iOS version
- Provide steps to reproduce any bugs
- AVAudioEngine Documentation
- SwiftData Documentation
- OpenAI Whisper API
- iOS Audio Session Programming Guide