PIAiF by Dm9 Records を Fs=96kHz で使う
Dm9 Records さんが設計・公開している Raspberry Pi 用 Audio I/F PIAiF で色々実験をしています。PIAiF は、Raspberry Pi 内蔵の CODEC よりも断然音がよく、また、Raspberry Pi の子基板として載せてもサイズがぴったりで邪魔になりません。さらに、延長ピンヘッダが実装されているので、ピンヘッダが占有されず、LCD など他のデバイスを併用することができます。この PIAiF に搭載されている CODEC チップの WM8731 は、最大 24bit/96kHz で動作する CODEC なのですが、当初はうまく動作しませんでした。Fs=96kHz に設定した自作シンセでは、音が鳴るのですが再生音がおかしくなってしまいました(ピッチが高くなる)。96kHz の WAV ファイルを aplay コマンドで再生した場合も、同様にピッチがおかしくなりました。この時、私の Raspberry Pi の環境は、
- Raspberry Pi 3
- Raspbian GNU/Linux 8 (jessie)
- Kernel version 4.4.50-v7+
色々調べてみると、どうやら、CODEC ドライバのカーネルモジュールの rpi-proto に問題があるようで、Fs=48kHz 以外の、32kHz や 96kHz に設定する際に、BCLK ratio の設定値が適切に設定されていないようです。こちらの記事に、この問題に関しての言及があります。そこで、記事にある通り、こんな感じのパッチを当て、Fs を変更した時に、適切に BCLK ratio が設定されるように修正した上でカーネルモジュールをリビルドし、標準のカーネルモジュールと差し替えたところ、96kHz 出力でも正しいピッチで音が鳴るようになりました。
ただし、Fs 変更直後に音が出ない(または再生ピッチがおかしくなる)という問題がまだ起きています。この場合は、再度(Fs 変更せずに)再生を開始すると正常に音が鳴るようになります。この原因がどこにあるのかはまだ掴めていません。しかし私の用途では、Fs=96kHz でシンセを動作させられれば大満足なので、これ以上の調査は進めていません。
この PIAiF、Line out & Headphone out だけでなく、Line in も用意されていますので、エフェクタを作りたい向きにもちょうどいいのではないでしょうか。なお、Fs=48kHz で使うのであれば、上記のような細工をする必要はなく、PIAiF を Raspberry Pi にマウントし、/boot/config.txt へ "dtoverlay=rpi-proto" の一行を追記するだけで使えます。このような、便利な DAC/ADC が Raspberry Pi で使えるのは、シンセビルダ/エフェクタビルダにとってはとてもありがたいことですね。