What it is
PedalTalk is an Android intercom for people riding together. Everyone wears their own Bluetooth earphones, keeps listening to their own music app, and talks without pressing anything. Start speaking and the others hear you; the music dips only while someone is talking and comes right back. Two riders or a whole group, one room, no cap on how many join.
The problem it solves
Talking to the rider next to you means stopping or shouting. Helmet intercom hardware has to be bought and mounted for every person, and ordinary call apps either need a button or cut the music you were listening to. PedalTalk adds conversation on top of the earphones and the music app you already use.
Who it is for
- Group rides where the line stretches out and voices no longer carry
- Pairs riding one behind the other who want to keep talking
- Long-distance riders passing through tunnels and hills where signal drops
Core flow
- Create a room: one rider gets a 6-digit code and a QR code. No sign-up
- Join: everyone else types the code or scans the QR
- Ride: put the phone in a pocket or on a mount, screen off. Mute or end from the notification
- Drop and recover: connections re-establish on their own, and short spoken alerts say when the link is lost and back
Key features
- Open mic, no buttons: noise suppression and voice detection filter out wind, and nothing is sent while you are quiet
- Music dips only for speech: keep the music app you already use; the volume drops while someone talks and returns
- Two paths held open at once: the internet normally, a direct link to nearby phones in tunnels and weak signal. Both stay open and the better one takes over on its own
- Works with the screen off: it runs as a foreground service, and with the screen on there is a mute button large enough to hit with gloves
- Three microphone modes: Simple, Music priority and LE Audio. It checks your connected devices and says which modes are unavailable and why
- Mesh conversation with no size limit: every rider connects directly to every other rider
Design decisions
- Hold both paths open: each path is scored on round-trip time and loss to pick the primary one, and during a switch the same packets go out on both so the audio never gaps
- Voice never touches a server: audio goes device to device. The server holds only the room code and the connection signals, and rooms expire after 24 hours, signals after one hour
- No sign-up: rooms are created and joined on anonymous auth. Nobody is getting through a registration screen wearing gloves
- The Bluetooth limit is stated, not hidden: using an earphone mic makes Android switch the earphones to call mode, so music drops to call quality too. Apps cannot change that, so PedalTalk lets you pick a mode and explains why on screen
Stack
- App: native Android (Kotlin, Jetpack Compose)
- Audio: Opus and RNNoise bound directly through JNI, per-sender adaptive jitter buffers, audio focus ducking
- Transport: WebRTC DataChannel (internet) and Nearby Connections (Bluetooth) running together, with path probes driving automatic switching
- Backend: Firebase anonymous auth + Firestore (rooms, signals) + Remote Config (ICE servers) + Crashlytics
- Distribution: Google Play (
net.mrlatte.pedaltalk), free, no ads - CI: GitHub Actions (unit tests, emulator instrumentation tests, signed AAB builds, Play upload)
Contact and data deletion
- Contact: reach us via ChannelTalk on the contact page.
- Data deletion: there is no sign-in, so there is no account to delete. Room documents expire after 24 hours and connection signals after one hour, and voice is never stored on a server. To have data removed sooner, open a deletion request email. See the privacy policy for what is collected and how long it is kept.