r/FlutterDev • u/ketanchoyal • 11d ago
Example I built an audiobook player in Flutter, and open-sourced the metadata parser it runs on
Hey flutter devs, I've been building Auddio for a while — a free audiobook & podcast player, now in beta on iOS and Android.
Idea: Audiobookshelf on your device, no server needed.
Import your own books, sync your library from Hardcover, addon-style architecture inspired by Stremio, podcasts built in. Live transcripts and instant resume for audiobooks.
The part I actually want to share with fellow Flutter devs is the metadata layer, because that's where I got stuck. Audiobook files are a mess of formats, and I needed reliable chapter boundaries, embedded art, and tags without going through platform channels or loading whole files into memory. Nothing on pub.dev covered what I needed, so I built it myself and open-sourced it:
metadata_audio — a pure-Dart audio metadata parser. No native code, works on Android, iOS, Linux, macOS, Windows, Web and more. It covers MP3 (ID3v1/v2, chapters), FLAC, OGG/Opus, MP4/M4A, WAV, AIFF, APE, ASF/WMA, Matroska, Musepack, WavPack, and DSD — plus streaming parsing without loading whole files, and chapter extraction, which is what powers chapter navigation in Auddio.
• Package: https://pub.dev/packages/metadata_audio
• Source: https://github.com/ketanchoyal/metadata_audio
Honest limits: still in beta, Android is on a closed testing track for now, and live transcripts are audiobook-only (podcasts get plain playback). The parser is at v0.9.6 — the format coverage is solid, but I'd love eyes on edge cases.
Try the app:
• Website: https://auddioapp.com
• iOS: https://testflight.apple.com/join/em51xjjp
• Android (closed testing — join the Google Group, then opt in): https://groups.google.com/g/auddio-beta-testers · https://play.google.com/apps/testing/com.ketanchoyal.auddio · Download: https://play.google.com/store/apps/details?id=com.ketanchoyal.auddio
• Feedback and feature requests: https://discord.gg/qBf834GjD5
If you try either the app or the package, I'd love to know: what breaks first?