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

前回に引き続きGAMDXの改造を継続。

まずADPCMをいじっているときに、内部で使用しているSample型が16bitに設定されていたのでPCMデータがオーバーフローする状況に遭遇。ローパスフィルターを整理するとともに極力データのロスがないように、原則データロスにつながる操作をしないようにしてみた結果なのですが。ということでSample 型は32bitにしてあります。

そしてもともとのダウンサンプラーの性能が良くないと指摘してAppleの(iOS組み込みの)ダウンサンプラーを使っていたのですが、他のOSに移植することもあるかもしれませんし、ダウンサンプラーを差し替えてみようと考えました。

ダウンサンプラーとアップサンプラーをあわせてリサンプラーというのですがそのものを総合的に解説したHPがあります:Digital Audio Resampling Home Page

色々解説が書いてありますがこれを勉強して一から書くのは相当大変というか無理です。ということでこのHPのFree Resampling Softwaresというところでフリーの実装を物色してみます。SoXというのが有名らしいがかなりボリュームが多いしGPLだ・・と思っていたら一番下の方でSpeexライブラリがBSDライセンス(商用利用も可能)となっています。Speex自体はVoIPで音声を圧縮して通話することが主目的のライブラリですが、リサンプラーも半ば独立したものがあるみたい(Speex自体は開発終了していてOpusという新しいプロジェクトに移っているようですが、リサンプラーはあまり変わらないようです)。通話目的のプロジェクトなので、速度も重視されているようです。

ということで秋の夜長、Speexのresampler.cを移植してみました。1.2rc3をダウンロードして、そのものズバリresampler.cというのを入れてみて、コンパイルエラーが起こらないまでにヘッダーを持ち込みます。.cファイルは一つだけというのが好感が持てます。リサンプルの精度は0-10で選べます。ARMのNEON命令セットに対応しているようですが、今はうまく動かないようです。

GAMDXの内部にはMXDRVG_MakeResampler,  MXDRVG_ClearResamplerという2つの関数を追加しただけで、他はほぼ透過的にリサンプルする・しないが選べます。もとのGAMDXではMXDRVG_Startという関数で出力周波数を指定しますが、ここでは内部処理の周波数を指定して、出力周波数を決めるのはResamplerでという風にしたのでフレキシブルになっていると思います。

手元にUSB-DAC/ADCがないのでリサンプラーごとの性能比較が今はできないので後日。

先述の通りSpeexのリサンプラーは精度が0-10で選べます。デフォルトは4になっていて,0では線形補間のレベルと書いてあります(が、ソースの中をちゃんと読んでいないので後の課題にしておきましょう)。5以上のレベルはCPUにかかる負荷が重くなりそうなので、レベル4,2,0について調べてみました。62.5KHzの内部周波数で、48KHzにダウンサンプリングして出力したものです。

レベル4

level4

レベル2

level2

レベル0

%e3%82%b9%e3%82%af%e3%83%aa%e3%83%bc%e3%83%b3%e3%82%b7%e3%83%a7%e3%83%83%e3%83%88-2016-10-11-16-26-00

もとのGAMDXリサンプラーと直接比べられるように同じ曲を調べてみました。ノイズは明らかに減っていて、Appleのリサンプラーとあまり違いないレベルでしょうか。レベルごとの違いについて、実際に耳で聞いたところでもあまり変わらないようですが、CPU使用率は結構違います。iPhone5sではレベル4でCPUの使用率30%程度、レベル0で20%程度となります。レベル2くらいでいいのかもしれません。

なお、前回の48KHzの出力で1)GAMDX内部は62500Hz、Appleのリサンプラーで48KHzに変換 3)GAMDX内部から48KHzで処理、を比較してみる話ですが、手元にあったVeyrlen氏のSonic Boom Stage 1 (高校生の時に松山銀天街のセガでやったのを思い出す・・・)はあきらかに1)のほうが良いみたいです。ほかの曲では大きな違いがない様に聞こえるのですが。

ということで現時点での結論としてiOS についてはベストの音質は62.5KHzにApple resamplerをかましたもの、となりver2.0からはあまり大きな改善は見込めなさそうです。他のOSについてはSpeex resamplerがうまくいけば音質向上になると思います。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中