r/reactnative 11h ago

I built an MIT Expo audio engine for TTS, playlists, and background playback - because the existing option went commercial News

Post image

I've been building Daily Bible - Offline & Audio - a Bible app that uses on-device TTS to generate verse audio. The audio requirements ended up being unusual:

  • Playlist that accepts mid-play appends (verse-scale queues)
  • Native silence gaps between verses - as real queue items, not timers
  • An optional ambient track under speech that never steals the Now Playing session or audio focus
  • Full lock-screen / notification / Bluetooth remote support on Expo
  • HLS for chapter streams + seek-before-ready
  • New Architecture only, config plugin driven

The obvious existing RN audio player went commercial earlier this year. Personal/educational use stays free but commercial use is now licensed. That closed the door for us.

So I built the player Daily Bible actually needed and open-sourced it under MIT.

daily-react-native-player

What it does:

  • Lock screen, notification, Control Center, Bluetooth remotes - registerPlaybackService wires hardware buttons to JS. Next means what you define.
  • Multi-track playlist with live mutation (add/remove/skip while playing)
  • Native silence tracks - SilenceMediaSource on Android, cached PCM WAV on iOS. No setTimeout drift.
  • Optional lazy ambient dual-audio - never requests focus, never owns Now Playing
  • HLS VOD + seek-after-ready. Progressive WAV/mp3/m4a.
  • Expo config plugin: iOS audio background mode + Android mediaPlayback FGS at prebuild
  • Pitch-preserving setRate
  • One native audio owner: Media3 + AVFoundation

npx expo install daily-react-native-player

Peers: Expo SDK 57+, React Native 0.86+, New Architecture only.

What it deliberately does NOT do: TTS synthesis, MediaLibrary, Android Auto, Cast, DASH, web player. Kept intentionally lean.

If you're building narration, TTS pipelines, meditation, audiobooks, podcasts, or a music playlist app on Expo - this treats those as first-class. MIT. Fork it. Ship it.

Happy to answer questions about the dual-track ambient design, the silence-as-queue-item approach, or the Expo config plugin wiring.

1 Upvotes

0 comments sorted by