A professional-grade real-time audio monitoring and analysis application built with React Native and Expo. LiveVoxNative provides low-latency audio input/output with advanced audio analysis capabilities including RMS metering, waveform visualization, and pitch detection.
Same problem as LiveVox -- feed the mic into the headphone mix so you can hear yourself without sounding like a jackass. This is the native iOS implementation using Swift AVAudioEngine, built to get real latency numbers on physical hardware rather than browser estimates.
- Quick Start Guide - Get up and running in 5 minutes
- API Reference - Complete audio engine API documentation
- Code Examples - Practical usage examples
- Contributing Guide - How to contribute to the project
- Changelog - Version history and release notes
- Documentation Overview - Navigate all documentation
- Real-time Audio Monitoring: Low-latency audio input and output using AVAudioEngine
- Audio Analysis:
- RMS (Root Mean Square) level metering
- Waveform visualization
- Pitch detection with note and cents display
- Latency Measurement:
- Theoretical latency reporting (input, output, buffer)
- Round-trip latency testing with click detection
- Flexible Audio Routing:
- Select from available audio inputs (microphone, external devices)
- Select from available audio outputs (speaker, headphones, external devices)
- Background Audio Control: Toggle between ducking mode (karaoke) and mixing with other apps
- Modern UI: Sleek dark-themed interface with smooth animations
- macOS: Required for iOS development
- Xcode: Latest version recommended
- Node.js: v18 or higher
- npm or yarn: Package manager
- Expo CLI: Installed globally or via npx
- iOS Device or Simulator: iOS 13.0 or higher
-
Clone the repository:
git clone https://github.com/JustLikeFrank3/LiveVoxNative.git cd LiveVoxNative -
Install dependencies:
npm install
-
Install iOS dependencies:
cd ios pod install cd ..
Start the Expo development server:
npm startRun on iOS Simulator:
npm run iosRun on iOS Device:
- Connect your iOS device via USB
- Ensure your device is registered in your Apple Developer account
- Run:
npm run ios
To create a production build, use Expo's build service or EAS Build:
npx eas build --platform ios- Launch the app
- Grant microphone permissions when prompted
- Tap the Start button to begin monitoring
- The app will display:
- Real-time RMS levels
- Waveform visualization
- Pitch detection (note name, octave, and cents deviation)
- Latency information
- Audio Input: Tap on any available input device to switch (e.g., built-in microphone, external mic)
- Audio Output: Tap on any available output device to switch (e.g., speaker, headphones)
- Make sure the audio engine is running
- Tap Measure Real Latency in the Round-Trip Latency Test section
- The app will play a click through the speaker and measure when it returns through the microphone
- Results include measured latency, theoretical latency, and the difference
Toggle between two modes:
- Duck Other Apps (Karaoke Mode): Reduces other apps' volume by ~50%
- Mix With Other Apps: Allows other apps to play at full volume
LiveVoxNative/
βββ App.tsx # Main application component
βββ index.ts # Entry point
βββ app.json # Expo configuration
βββ package.json # Project dependencies
βββ modules/
β βββ audio-engine/ # Native audio engine module
β βββ ios/ # iOS native implementation
β βββ src/ # TypeScript/JavaScript interface
β βββ package.json # Module metadata
βββ assets/ # App icons and images
βββ ios/ # iOS project files
The expo-audio-engine is a custom Expo module that provides native audio processing capabilities using Apple's AVAudioEngine framework.
- Start/stop audio monitoring
- Get available audio inputs and outputs
- Switch between audio devices
- Real-time audio analysis (RMS, pitch, waveform)
- Latency measurement and reporting
- Background audio ducking control
See modules/audio-engine/README.md for detailed API documentation.
npm start- Start the Expo development servernpm run ios- Run the app on iOS simulator or devicenpm run android- Run the app on Android (not currently supported)npm run web- Run the app in a web browser (limited functionality)
- Engine: AVAudioEngine (iOS)
- Sample Rate: Device-dependent (typically 48 kHz)
- Buffer Size: Optimized for low latency
- Analysis: Real-time FFT for pitch detection, time-domain analysis for RMS and waveform
The app requires microphone access:
- iOS:
NSMicrophoneUsageDescriptionis configured inapp.json - Users will be prompted to grant permission on first use
This app is configured to use React Native's New Architecture:
- Turbo Modules for native module communication
- Fabric renderer for improved performance
- Set via
newArchEnabled: trueinapp.json
If the app cannot access the microphone:
- Go to iOS Settings β Privacy β Microphone
- Ensure LiveVoxNative has permission enabled
- Check that audio monitoring is started (tap Start button)
- Verify that the device is not muted
- Check the selected input/output devices
- Try restarting the app
If you encounter build errors:
- Clean the iOS build:
cd ios rm -rf Pods Podfile.lock pod install cd ..
- Clear Metro bundler cache:
npx expo start --clear
MIT
Contributions are welcome! Please feel free to submit a Pull Request.
LiveVox
For issues and questions, please open an issue on GitHub.