前の投稿でRaspberry Pi PicoをUSB-DACにするソースコードをコンパイルし,ボードに書き込んで,パソコンでUSB-DACとして認識させるところまでできたので,今回は最終的に音出しまでします.
まず,I2S-DACボードはこれを使いました.Raspberry Pi Picoに足の配置が合わせてあり,そのまま挿すことができます.ボードの裏には,Raspberry Pi Picoの絵が描いてあり,挿す向きもわかります.Raspberry Pi Picoに足をはんだ付けしますが,足が曲がって付かないように,Raspberry Pi PicoとI2S DACボードの両方にピンを挿した状態ではんだ付けします.
実際に動かすには,ソースコードの書き換えが必要でした.この製品のページに
You can use Pico Audio Pack with the I2S audio examples provided by Raspberry Pi in their experimental examples (usb_sound_card and sine_wave_i2s). You'll need to #define PICO_AUDIO_I2S_DATA_PIN and PICO_AUDIO_I2S_CLOCK_PIN_BASE to 9 and 10 respectively to tell the examples which pins are being used for the audio data.
とあります.具体的にこれらの値が定義されているファイルは
pico-extras/src/rp2_common/pico_audio_i2s/include/pico/audio_i2s.h
です.このファイルを以下のように書き換えます.
#ifndef PICO_AUDIO_I2S_DATA_PIN //#warning PICO_AUDIO_I2S_DATA_PIN should be defined when using AUDIO_I2S // https://shop.pimoroni.com/products/pico-audio-pack #define PICO_AUDIO_I2S_DATA_PIN 9 // 28 #endif #ifndef PICO_AUDIO_I2S_CLOCK_PIN_BASE //#warning PICO_AUDIO_I2S_CLOCK_PIN_BASE should be defined when using AUDIO_I2S // https://shop.pimoroni.com/products/pico-audio-pack #define PICO_AUDIO_I2S_CLOCK_PIN_BASE 10 // 26 #endif
実際に使っているピン番号は12, 14, 15なので,なぜこの番号なのかは謎です.この後,pico-extrasをbuildしなおします.その上で,pico-playgroundをbuildしなおします.
pico-playground/build/usb_sound_card/usb_sound_card.uf2をRaspberry Pi Picoに書き込むと,ボードが再起動して,音がこのボード経由で出せるようになります.
I2Sボードの方はPCM5100Aで32bit, 384kHzまで出力できるのに,Raspberry Pi PicoがXMOSと違いソフトウェアで処理を実行しているので,16bit, 44.1kHz/48kHzしか出力できないのは残念です.
ただ,ソフトウェアでUSBから入力した信号をI2Sに出力しているので,ここで信号処理が色々できると面白いと思います.ソースコードの公開されているUSB-DACって,物がないので,自分でいじるには貴重はハードウェアではないでしょうか.