MDX Player for iOS音質向上研究

MDX Player ver 2.0 から再生周波数の切り替え機能(22,44,48,62Khz)がつきました。

22, 44, 48KHzはわかりますが(CD,DATなどの周波数で一般的によく使われる)、62KHzというのは何かというと、X68000のOPMチップに与えられる4MHzの周波数を64分周したADPCMが15.6KHzなので内部処理を楽にするために?44,48,62KHzのときは15.6×4=62.5KHzがOPMチップの出力周波数となります。ということでGAMDX(MDXドライバ)内部では62.5KHzで処理しており、そのデータをそのままiPhoneのCoreAudioに渡すモードということになります。実際に62KHzで出力されるのではなく、CoreAudio内部で44KHzに変換されて出力されているようです(iPhoneのイヤホン出力をUSB-DAC/ADCに繋いで解析しました)。44, 48KhzのときはGAMDX内部で62KHzから周波数変換されて返されます。なお、22KHzのときだけなぜかGAMDX内部でも22Khzで処理されています(謎)

(追記:上記消去した部分はGAMDXドライバというかMXDRVgを作られたGORRYさんから直接Twitterで指摘されました)

iPhoneは48KHzの出力にも対応しているはずですが、48KHzモードでも44KHzで出力されているようです?と思ってMDX Player for iOSのソースを見てみたらAVAudioSessionのsetPreferredSampleRateが設定されていませんでした。直しておきましょう。

さて本題です。

MDXファイルを再生していると高音域がやけに耳に響くものがあります。もともとFM音源の音はそんなものだという考え方もありますが、とくにADPCMの音が響くと思います。そこで再生周波数の変化でデータがどのように違うか見てみましょう。iPhoneのイヤホン出力をAudacityというソフトで取り込んで(96KHz)、スペクトル表示にしてみました。

62KHz(実際の出力時には44KHzに変換されています)

62KHz

44KHz

44KHz

22KHz

22KHz

特に44KHzは本来の音の周波数以外のところにノイズが乗って全体的に水色がかった感じになっていると思います。62KHzで水色が多いのはADPCMが鳴っているところのようですドラムが鳴っているところで、ノイズを出力しているからこうなるようです。22KHzは44KHzよりもややノイズが少ないといえるでしょうか。ということで、ver 2.0では62.5KHzで聴くのが一番いいと思います。

 

このようなノイズの原因はおそらくGAMDX内蔵の周波数変換ルーチンの性能が良くないからと思われます(62KHzのときはAppleの周波数変換ルーチンが使われるのでノイズが乗らないのでしょう)。また、ADPCMはどうしてもGAMDXの内部で周波数変換されるので、高音域ノイズが乗ってしまうようです。

ということで、しばらくGAMDXを改造してAppleの周波数変換ルーチンを使うようにして(フリーの周波数変換ライブラリはいくつかあるのですが、使うのが面倒なのと巨大です(そして著作権の問題も。GPLみたいですが))、音質向上を図ってみます。まずはADPCMからのアップコンバートでノイズが乗らないことを目標にしてみます。

広告

MDX Player 2.0 XCode8 / Swift3へ移植

iOSのMDX Playerに私が追加したMMDSP風の画面をとりこむかたちで、Ver2.0がダウンロード可能となりました。僅かな貢献ですが楽しんでもらえれば幸いです。

MDX Player 2.0.0 – NagisaWorks Blog

ほかに私の追加した変更もGitHubで公開してあったのですが、Ver2.0は他にも大幅な変更(Swiftへの移植)などあり、うまく変更を取り込むことができない・・・ということで私のバージョンは一旦GitHubからは消して(手元にはありますよ)、あらたにForkしてしまいました。

そしてさてダウンロードしてみると・・XCode7用になっているようです。SSDをケチって128GBにした私のメインマシンではXCode8との両立もきついし、これからはSwift3.0が主流になっていくとも思いましたので変更してみました。

一番大変なのはCocoapodsで、SwiftyDropboxというライブラリを使っているのですが初めはインストールされるのがどうしてもSwift2対応のver3.2.0になってしまいました。

sudo gem install cocoapods –pre

としてプレリリース版にしてみたのと、Podfileの初めの行を

platform :ios, ‘9.0’

としてみたところ(他にも色々やったかもしれないが)、ver4.0がインストールされました。メインのソースは自動変更の上でエラー部分だけちょいと直してとりあえず対応終了。ちゃんと動くようです。

追記:他のマシンにGitHubから持ってきた場合、pod installしてできたファイルは不完全で、設定ファイルのpods>(AlamoFire,SwiftyDropbox)>Build setting のUse Legacy Swift Language Version という項目をNoにしないといけないようです。Podfileの変更でなんとかできそうですが。

これからバグフィックス・機能追加考えてみます。