-
Notifications
You must be signed in to change notification settings - Fork 301
Description
Symphonia is already a supported backend for MP3 decoding in rodio, but it is not the default. I believe Symphonia MP3 decoder has matured, and it's time to switch to using it by default.
Currently rodio defaults to minimp3 for decoding, which is written in C and causes a number of issues:
- Complicated cross-compilation
- Potential security issues due to C code being entirely unsafe
- iOS app store rejection (see minimp3 causes iOS app store rejection due to slice_deque use #400)
Symphonia has an MP3 decoder written in 100% safe Rust. The decoding performance is exactly on par with ffmpeg in my tests.
I have tested the correctness of Symphonia's MP3 decoder on over 50,000 real-world files created by a variety of encoders to ensure correct decoding and compatibility with the files found in the wild, which resulted in multiple fixes (see pdeljanov/Symphonia#72, pdeljanov/Symphonia#78, pdeljanov/Symphonia#99). These fixes are going to ship in the upcoming v0.5 along with support for gapless playback for MP3 files.
With safety, performance and compatibility all being in great shape for Symphonia's MP3 decoder, I believe it is time to switch to using it by default instead of minimp3.