MDX Player高音質化の研究(まとめ)

MDX Player for iOSというアプリが無料しかもソース公開となっていたので、遊びがてら機能を追加したりしてみました。Ver 2.0では一部私も貢献できたので嬉しく思います。このアプリは内部ではGAMDXというFM+ADPCMをエミュレートするプログラムを使用しています。

Ver 2.0から出力周波数を変更する機能がついています。62.5Khzの出力も選べるのですが、これはアプリの内部では62.5KHzでエミュレートしていざ再生の段階ではiOS内部で周波数変換して出力するようになっています。この再生したものをこいつで取り込んで解析してみます。img_6390

192KHz24Bit対応で入出力ができます。

解析ソフトはAudacityを使います(フリーですが解析結果の保存に難があり何度も解析を繰り返して大変でした)。

解析すると、Ver 2.0の再生品質は元のものよりも良いみたいです。いろいろ調べた結果、まずはもとのGAMDXの周波数変換ルーチンの性能があまり良くないからのようでした(MDX Player for iOS音質向上研究)。

iOSで再生する分にはこれでも構いませんが、他では困ります。周波数変換ルーチンについて調べてみたところ、音声通話を圧縮データでおこなうライブラリのSpeexというものに、周波数変換ルーチン(リサンプラー)がありフリーで公開されていることがわかりました。これを移植して色々やってみます。ほかにも、内部処理を62500Hzではなく44100Hzにすることでダウンサンプラーを通さないようにしてみるなども試してみました。
MDX音質向上研究:GAMDX改造

GAMDX改造の効果は?(続き)

GAMDXのリサンプラーをいれかえてみる

GAMDX改造:ADPCM変更の効果は?

GAMDX改造:リサンプラーのCPU使用率

GAMDX改造:ADPCMアップサンプリングをSpeexで

結論として、iOSを使っている場合はSpeexリサンプラーを入れるメリットはあまり多くなく(Appleのリサンプラーが悪くないので)、計算量の増加からバッテリー使用は少し増える可能性があります。一方で、私が改造した部分のうち、内部周波数を変更した分については48KHz, 44.1KHz, 22KHzの設定ではバッテリー使用は減るようです(FM音源の音質は悪くなりますが)。また内部周波数を62500Hz以外にしたときには、ADPCMのアップサンプリングにSpeexのリサンプラーを使ったほうが良さそうです。

一方でiOS以外の環境で使う場合には、Speexリサンプラーを使うことでCPU・バッテリーの負荷がかかりますが音質は良くなると思います。プログラム上は62500Hz以上の96000Hzや192Khzでも通ると思いますのでデスクトップPCで貴族のFM音源を楽しむことも出来るかもしれません。

改造版GAMDXを含むMDX Player for iOSはこちらでダウンロードなどできます。

かんたんに使い方を。gamdx/jni/speex/speex_MDX.hというファイルの中で#defineをいじることでSpeexライブラリを使うかなどの設定ができます。細かいところはソースを読んでください。一人でプログラムを組んでいることが多かった関係でコメントを書くのが苦手です;

あと、x68pcm8.cppでPCMデータ処理のためのバッファをC++のクラスのメンバ変数にしたところデータが壊れまくるバグに呪われました。なぜかがよくわからないままstaticつきのグローバル変数にしたところ一応動きます。一部ですごくかっこ悪いことになっていますがC++を15年ほど触っていないのでよくわかりません。いまさらC++再入門しますかねぇ・・

広告