Feature Requests

With Expo, you can write iOS and Android experiences in JavaScript using React Native.
expo-audio: Add real-time PCM buffer streaming support for microphone recording
Summary expo-audio currently lacks the ability to stream raw PCM buffers from the microphone in real-time. This is a critical missing feature for use cases like live speech recognition, audio analysis, waveform visualization, and WebSocket audio streaming. Current Behavior expo-audio supports basic recording and playback, and provides PCM samples for playback visualization — but there is no way to receive a continuous stream of raw PCB buffers from the microphone during recording. Expected Behavior Developers should be able to receive a real-time callback with raw PCM Float32Array buffers as audio is being captured from the microphone. Proposed API const { startRecording, stopRecording } = useAudioRecorder({ sampleRate: 16000, channels: 1, onPCMData: (buffer: Float32Array, sampleRate: number) => { // send to WebSocket, run through ML model, visualize waveform, etc. } }); Proof of Demand I built and published expo-audio-stream-pcm ( https://www.npmjs.com/package/expo-audio-stream-pcm ) specifically to fill this gap. The library already has a working native implementation in Kotlin (Android) that delivers real-time PCM buffers via a callback. Other community packages solving the same problem: @siteed/expo-audio-studio expo-audio-stream (mykin-ai) @speechmatics/expo-two-way-audio The existence of multiple community packages solving the same problem is strong evidence this belongs in the official SDK. Use Cases Live speech-to-text (OpenAI Whisper, Google Speech, etc.) Real-time audio waveform visualization WebSocket audio streaming to a backend On-device ML audio analysis Willingness to Contribute I am willing to submit a PR implementing this feature, porting my existing Kotlin implementation into expo-audio and adding the corresponding iOS (Swift) implementation to match.
0
[expo-audio] iOS: Expose MPNowPlayingInfoPropertyIsLiveStream for live/radio streams
## Summary expo-audio does not expose MPNowPlayingInfoPropertyIsLiveStream , which means live radio and streaming apps cannot show the native iOS LIVE indicator on the lock screen and Control Center. Instead, iOS renders a broken scrubber with no duration, which is incorrect UX for live streams. ## Environment Expo SDK: 55 expo-audio : ~55.0.8 Platform: iOS Use case: Live radio stream (no duration / infinite stream) ## Expected behavior When playing a live stream, the lock screen and Control Center should show: A LIVE badge instead of a progress scrubber No elapsed time or duration display This is the standard iOS behavior for any app streaming live audio (Apple Podcasts, Spotify, RadioApp, etc.) ## Actual behavior Lock screen shows a scrubber with no duration (stuck at 0 or broken) No LIVE indicator is shown There is no API in expo-audio to signal to iOS that the stream is live ## Requested API Add an isLiveStream boolean field to updateLockScreenMetadata (or equivalent): ```ts AudioPlayer.updateLockScreenMetadata({ title: "Station Name", artist: "Live Radio", isLiveStream: true, // new field }); On the native iOS side this should map to: ```swift nowPlayingInfo[MPNowPlayingInfoPropertyIsLiveStream] = true // Also clear duration and elapsed time for correctness: nowPlayingInfo.removeValue(forKey: MPMediaItemPropertyPlaybackDuration) nowPlayingInfo.removeValue(forKey: MPNowPlayingInfoPropertyElapsedPlaybackTime) MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo ## Workaround There is currently no workaround within expo-audio . Achieving this requires either a native module or dropping down to react-native-track-player which supports isLiveStream out of the box. ## References Apple docs: https://developer.apple.com/documentation/mediaplayer/mpnowplayinginfopropertyislivestream react-native-track-player implementation: https://rntp.dev/docs/api/objects/track#islivestream Similar request in expo-av : expo/expo#12606
0
Load More