STM32F7 DiscoveryでのMP3再生について調べてみました。
非力なCPUならVS1053のようなハードウェアデコーダを使うのが良さそうですが、STM32F7はクロックも200MHzあるので、十分ソフトデコード可能な計算パワーがあります。
ちょっと調べてみたところ、F7 Discoveryで動く下記のソフトウェアが見つかりました。
pwegrzyn/STM32F7-MP3-Player: MP3 Player project for uni course.
学生さんが授業の課題か何かで作ったものでしょうか。コンパイル済みで、バイナリが
build/f7project.hex
に入っていますので、これをST-Link UtilityでF7 Discoveryへ書き込むだけで動作します。
MP3ファイルをUSBメモリに入れて、CN13コネクタへ接続すれば勝手に再生されます。SDカードは読んでくれないようです。
このソフトウェアは、MP3デコーダとして「Helix decoder」を使っていました。
これは、かつてRealPlayerというソフトで一世を風靡したRealNetworksが公開しているデコーダです。
調べてみると、他にもSTM32とこのデコーダを組み合わせて使っているソフトがいくつか見つかりました。
vanbwodonk/STM32F4_USB_MP3: STM32F4-Discovery as MP3 player
jiangrunwu/Helix_STM32: Port the Helix MP3
このHelix decoderのライセンスは、「RealNetworks Public Source License (the “RPSL”)」というRealNetworks独自のライセンス形態になっています。
RealNetworks Public Source License Version 1.0 (RPSL-1.0) | Open Source Initiative
内容までは読んでいませんが、MicroChipはこのデコーダをPIC32向けに提供するにあたり、ライブラリを利用する開発者の開発物とHelixが混ざらないように動的ローディングのような仕組みをわざわざ提供しています。
このことから、MITライセンスやBSDライセンスほど緩いライセンスではないように思われます。
Helix MP3 Decoder Library for PIC32
オープンソースのMP3デコーダと言えば、20年くらい前からmpg123というソフトウェアがあります。
後には、mpg321というものもありました。
私の記憶では、mpg123は固定小数点演算ではなく浮動小数点演算を使っており、従ってマイコン向けとしてはちょっとハードルが高かったように思います。
代替になるものがないか、ちょっとネットを探してみたところ、KeyJという人が作ったminimp3というデコーダが見つかりました。
KeyJ's Blog : Blog Archive » Honey, I shrunk the MP3 decoder
これはWindows用で、ライセンスはLGPLとなっています。
また、minimp3よりも音質が良いというMinimalistic MP3 decoderというデコーダも見つかりました。
lieff/minimp3: Minimalistic MP3 decoder single header library
このデコーダのライセンスはCreative Commons Zero v1.0 Universalとなっています。これは権利を最大限放棄した、いわゆるパブリックドメインなソフトウェアです。
中を見てみると、minimp3.hという一見ヘッダファイルのような1800行余りのファイルがデコーダの本体になっています。
x86、x64のほか、ARM(arm9e、cortex-a15、armv8-a)、powerpc、powerpc64でも動作確認できているようです。
検証用のデータが大量に付いているところも特徴的です。
他には、上記のGitHubリポジトリからリンクされているPDMP3というものもあります。2600行足らずのシングルファイルのデコーダで、「修士論文用に開発した」と書かれています。
technosaurus/PDMP3: Public domain mp3 decoder
組み込み向けで使うならMinimalistic MP3 decoderをベースにしてみるのが良さそうだと思いました。
コメント
tried it with stm32f769i-discovery but black screen.
useful info though, will add mp2 player functionality to my project here eventually.
https://hackaday.io/project/7041-multichannel-audio-dsp-field-mixer-recorder
yeah it is for F746G-discovery and probably doesn’t work on F769i-discovery.
So, your project looks great! seems good also for DAW-less setups.