ラズベリーパイB(モデル1)です。すいません。
もはや中国のalliexpressなどでしか入手できないかもしれません。
<追記:ラズベリーパイ0へ応用できるかもしれません。>
以前の記事の通り、ラズベリーパイBでi2s信号を取り出すことをやっている。
外部のクロックから入力するので、外部クロックの周波数、オシレータを変更しなければならない。
サンプリング周波数ごとのgpio出力を試みた。
「三日坊主な私がいつまでブログやれるか...( ̄~ ̄;) 」さんの「Raspberry pi I2S PCM1716でハイレゾ再生」を参考にします。64倍FS固定なので、
44.1kなら、22.5792M/(44.1k*64)が分周比となり、74VHC161などの分周されたQ出力を選択するようにします。
192kなら、24.576M/(192k×64)が分周比となる。
88.2k、176.4kがあるので、2×4入力切替の74VHC153などで信号を切り替えます。その際、3種類の信号を切り替えるので、2ビットを要します。
以下の17、14,15はGPIO番号で、空いているGPIOの番号を指すものとします。
おそらくこのようにすれば動くのではないかと。
ここの17はオン・オフでオシレーターを切り替える。オンの時、一方はコンプリメタリーMOSFETをつないでNOTの論理回路にし、オフにする。オフの時、他方のコンプリメタリーMOSFETの出力はONになる。
14,15は、分周比選択のための信号切り替えのための2ビット出力で、74VHC153などの2ビット入力に入力する。ピン番号としてはこのとおり3つ使用するが、番号を互いに交換してももちろん構わない。
int myerr = gpio_request_one(17, GPIOF_OUT_INIT_LOW, “MyTest”);
if (myerr == 0) {
if (sampling_rate == 48000 || sampling_rate == 96000 ||sampling_rate == 192000 ) {
gpio_set_value(17, 0);
} else {
gpio_set_value(17, 1);
}
gpio_free(17);
}
int myerr = gpio_request_one(14, GPIOF_OUT_INIT_LOW, “MyTest”);
if (myerr == 0) {
if (sampling_rate == 44100 || sampling_rate == 48000) {
gpio_set_value(14, 0);
if (sampling_rate == 88200 || sampling_rate == 96000) {
gpio_set_value(14, 1);
}
if (sampling_rate == 176400 || sampling_rate == 192000) {
gpio_set_value(14, 0);
}
gpio_free(14);
}
int myerr = gpio_request_one(15, GPIOF_OUT_INIT_LOW, “MyTest”);
if (myerr == 0) {
if (sampling_rate == 44100 || sampling_rate == 48000) {
gpio_set_value(15, 0);
if (sampling_rate == 88200 || sampling_rate == 96000) {
gpio_set_value(15, 0);
}
if (sampling_rate == 176400 || sampling_rate == 192000) {
gpio_set_value(15, 1);
}
gpio_free(15);
}
おそらく以上の通りして動作を確認したという記憶があるが、ピン番号はあいまいで忘れました。また、このままコピっても、全角文字コードのエラーが出るかもしれない。
動作確認は、aplay(2017年のトラ技の連載「高品位Linuxサウンド・アプリケーション・プログラミング超入門」参照、フォーマット変換が必要) or aplayex(当サイトの過去記事参考)で、44.1k、96k音源を切り替える。グラウンドと、LED+100オーム?の抵抗を接続し、その点灯で確認できる。74vhc163の先は、192系列、44.1k系列の出力があり、2つを切り替える必要があるが、おそらく?ダイオードの逆止弁で代用できないかと考えている。
このピン番号をファイルの情報を読み取り適宜変更しようと考えたが、カーネルでファイルを読み込むのは相当難しく手に負えないので諦めた。
この論理回路を構成するには、fpgaで構成できないか考えている。de1-socの場合、元から、DACが接続されており音声出力ジャックがあるので、簡単に構成できるのではないかと。