ラベル Raspberry Pi の投稿を表示しています。 すべての投稿を表示
ラベル Raspberry Pi の投稿を表示しています。 すべての投稿を表示

2023年4月16日日曜日

Raspberry Pi PicoをUSBマウスとして使う(3/3)(マウスボタンのダブルクリックが使えるようにする)

マウスのダブルクリックが動くようにする

前の投稿で,マウスのダブルクリックができませんでしたが,このサイトで確認したところ,クリックも判定してもらえていないことが分かりました.

改めて,サンプルプログラムで確認しました.

Arduino IDEのメニューをたどると,サンプルプログラムとして[File]→[Examples]→[09.USB]→[Mouse]→[ButtonMouseControl]というのがあります.このサンプルでは,Mouse.press()とMouse.release()だけを使っており,Mouse.click()を使っていないのですが,このプログラムを用いると,このサイトのシングルクリックの判定とダブルクリックの判定がうまくいきました.また,ドラッグの動作もうまく行きました.

そこで,シンプルに,クリックとドラッグの判定をせずに,マウスボタンのdownとupそのものを送出するようにしました.

これが以下のプログラムです.

// move mouse cursor by joystick
// implement left/right button
// 2023/4/16

#include <Mouse.h>

void setup() {
  Serial.begin(9600);
  // joystick
  gpio_init(27);
  gpio_set_dir(27, GPIO_IN); // GP27 in:0(false) out:1(true)
  gpio_init(28);
  gpio_set_dir(28, GPIO_IN); // GP28 in:0(false) out:1(true)
  // button
  gpio_init(16); // right button
  gpio_set_dir(16, GPIO_IN);
  gpio_pull_down(16);
  gpio_init(17); // left button
  gpio_set_dir(17, GPIO_IN);
  gpio_pull_down(17);
  Mouse.begin();
  delay(5000);
}

#define MIN_RAW 3
#define MAX_RAW 1023
#define MIDDLE_RAW ((MAX_RAW - MIN_RAW)/2)

#define MOUSE_DOWN 1
#define MOUSE_UP 0

void loop() {

  //----------------------------------------
  // move
  uint16_t raw_x = analogRead(28); // 3..1023
  int16_t value_x = (raw_x - MIDDLE_RAW)/10; // -50..51
  uint16_t raw_y = analogRead(27); // 3..1023
  int16_t value_y = (raw_y - MIDDLE_RAW)/10; // -50..51

  float dx=0.0;
  float dy=0.0;
  if (value_x > 0) {
    dx = -((float)value_x * value_x / 200.0);
  } else {
    dx = ((float)value_x * value_x / 200.0);
  }
  if (value_y > 0) {
    dy = (float)value_y * value_y / 200.0;
  } else {
    dy = -(float)value_y * value_y / 200.0;
  }
  Mouse.move(dx, dy, 0);

  //----------------------------------------
  // click/drag
  bool left_button_val = gpio_get(17);
  bool right_button_val = gpio_get(16);

  // left button down
  if (left_button_val == MOUSE_DOWN) {
    // if the mouse is not pressed, press it:
    if (!Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.press(MOUSE_LEFT);
    }
  } else {
    // if the mouse is pressed, release it:
    if (Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.release(MOUSE_LEFT);
    }
  }
  // right button down
  if (right_button_val == MOUSE_DOWN) {
    // if the mouse is not pressed, press it:
    if (!Mouse.isPressed(MOUSE_RIGHT)) {
      Mouse.press(MOUSE_RIGHT);
    }
  } else {
    // if the mouse is pressed, release it:
    if (Mouse.isPressed(MOUSE_RIGHT)) {
      Mouse.release(MOUSE_RIGHT);
    }
  }
  delay(10);
}

これでめでたく,USBマウスとして使用することができるようになりました.

2023年4月13日木曜日

Raspberry Pi PicoをUSBマウスとして使う(2/3)(マウスボタンのクリック・ドラッグ)



前回の続きです.

Raspberry Pi PicoをUSBマウスとして使用するにあたって,マウスボタンの実装をします.

まずボタンは物理的にはスイッチとして実装されており,Raspberry Pi PicoではON (down)かOFF (up)かの状態が瞬間ごとに読み取れます.これだけではクリックとドラッグの区別ができませんので,ソフトウェアで実装します.

ソフトウェア

まず,ONかOFFかの読み取りは定期的に行われているので,前回の状態を記憶しておいて,ON→OFFとOFF→ONの状態変化を読み取ります.OFF→ONがボタンのdown,ON→OFFがボタンのupになります.

マウスのイベントとしては,MOUSE_DOWN, MOUSE_UP, MOUSE_CLICKを発出する必要があります.MOUSE_DRAGとMOUSE_CLICKのモードを作成して,MOUSE_DRAGモードの際にはMOUSE_DOWNとMOUSE_UPのイベントを発出します.MOUSE_CLICKモードの際には,マウスボタンを離した瞬間にMOUSE_CLICKイベントを発出することにします.

さらに,MOUSE_DRAGモードとMOUSE_CLICKモードの区別は以下のようにします.downの瞬間にdownしている時間の計測を始めます.初期状態はMOUSE_CLICKにしておいて,ある閾値(ここでは0.5秒)を超えたら,MOUSE_CLICKからMOUSE_DRAGに状態変化すると同時に,ここでMOUSE_DOWNイベントを発出します.

マウスボタンがupされた時点で,現在MOUSE_DRAGモードの場合にはMOUSE_UPイベントを,MOUSE_CLICKモードの場合にMOUSE_CLICKイベントを発出します.

図示すると以下のようになります.

ハードウェア

ハードウェアの製作は以下のようになります.push buttonの片方のピンを3.3Vに接続して,もう片方のピンをGPIOにpull down接続します.今回はGP16とGP17を使いました.

配線全体は以下のようになります.


以下の写真はボタンの部分の配線です.


以下の写真はRaspberry Pi Pico側の配線です.


ダブルクリックについて

ダブルクリックが未実装です.これも時間を測って,時間の閾値を決めてその時間内にマウスボタンがON→OFF→ON→OFFされたらダブルクリックイベントを発出する必要があるみたいです.

もしくは,OSに合わせてハードウェア側でクリックの時間をある程度決めないといけないのかも知れません.

続きはここで.

2023年4月12日水曜日

Raspberry Pi PicoをUSBマウスとして使う(1/3)(マウスカーソルの移動)

Raspberry Pi PicoをArduino IDEから使うと,USBマウスのサンプルソースコードがあります.メニューバーで[File]→[Examples]→[Mouse]→[Circle]のプログラムです.

このプログラムをArduino IDEからRaspberry Pi Picoに書き込み,Raspberry Pi PicoのBOOTSELボタンを押すと,マウスカーソルが円形に一周動きます.macOSのシステム設定でマウスの軌跡の速さを変更すると,この円の半径が変わるので,Raspberry Pi PicoがUSBマウスとして認識されていることが分かります.

ハードウェア

まず,ジョイスティックを使ってマウスカーソルを動かします.ジョイスティックとしてはスイッチサイエンスで購入できるAdafruitの小型アナログジョイスティック小型アナログジョイスティック用ピッチ変換基板をつけた物を,ブレッドボードに挿して用います.

まず,Raspberry Pi Picoのピン配置はこちらにあります.

36pin(3.3V),34pin(GP28),32pin(GP27),28pin(0V)を用います.結線は以下の写真のようにします.全体の写真が以下です.

ジョイスティックのハードウェアは,ただのボリューム(反固定抵抗)で,0Vと+の電圧を与えると,x軸方向とy軸方向の変位に比例した0Vと+の電圧の間の電圧が,x軸方向とy軸方向それぞれに対して出力されます.


次に,Raspberry Pi Pico側の結線の写真が以下です.


最後に,ジョイスティック側の結線の写真が以下です.


ソフトウェア

ジョイスティックの値を読んでシリアルコンソールに表示するプログラムは以下のようになります.

// read joystick and print to serial console
// 2023/4/12

#include <Mouse.h>

void setup() {
  Serial.begin(9600);
  Mouse.begin();
  delay(5000);
}

#define MIN_RAW 3
#define MAX_RAW 1023
#define MIDDLE_RAW ((MAX_RAW - MIN_RAW)/2)

void loop() {
  uint16_t raw_x = analogRead(28); // 3..1023
  int16_t value_x = (raw_x - MIDDLE_RAW)/10; // -50..51
  uint16_t raw_y = analogRead(27); // 3..1023
  int16_t value_y = (raw_y - MIDDLE_RAW)/10; // -50..51

  Serial.print("X raw=");
  Serial.print( raw_x );
  Serial.print(", Value=");
  Serial.print( value_x );

  Serial.print(", Y raw=");
  Serial.print( raw_y );
  Serial.print(", Value=");
  Serial.println( value_y );

  delay(10);
}

次に,ジョイスティックの値を見てマウスカーソルを動かすプログラムは以下のようになります.

// move mouse cursor by joystick
// 2023/4/12

#include <Mouse.h>

void setup() {
  Serial.begin(9600);
  Mouse.begin();
  delay(5000);
}

#define MIN_RAW 3
#define MAX_RAW 1023
#define MIDDLE_RAW ((MAX_RAW - MIN_RAW)/2)

void loop() {
  uint16_t raw_x = analogRead(28); // 3..1023
  int16_t value_x = (raw_x - MIDDLE_RAW)/10; // -50..51
  uint16_t raw_y = analogRead(27); // 3..1023
  int16_t value_y = (raw_y - MIDDLE_RAW)/10; // -50..51

  Serial.print("X raw=");
  Serial.print( raw_x );
  Serial.print(", Value=");
  Serial.print( value_x );

  Serial.print(", Y raw=");
  Serial.print( raw_y );
  Serial.print(", Value=");
  Serial.println( value_y );

  float dx=0.0;
  float dy=0.0;
  if (value_x > 0) {
    dx = -((float)value_x * value_x / 200.0);
  } else {
    dx = ((float)value_x * value_x / 200.0);
  }
  if (value_y > 0) {
    dy = (float)value_y * value_y / 200.0;
  } else {
    dy = -(float)value_y * value_y / 200.0;
  }
  Mouse.move(dx, dy, 0);
  delay(10);
}

マウスボタンの実装

続きはここで.

2023年4月4日火曜日

Raspberry Pi Pico WでpimoroniのInky Packを使用

 Raspberry Pi Pico Wが日本で発売になったので,一緒にpimoroniのInky Packを入手しました.


Raspberry Pi PicoとRaspberry Pi Pico Wを接続すると,以下のようなサイズです.

pimoroniのgitにまとめてサンプルファイルがあるので,macOSからCの開発環境でサンプルファイルを書き込んでみます.


まずは開発環境のセットアップから始めます.HomeBrewが入っている状態で,ターミナルから以下のようにコマンドを打ち込みます.
brew install cmake
brew tap ArmMbed/homebrew-formulae
brew install arm-none-eabi-gcc
Xcodeが入っていない場合は以下もやっておきます.
xcode-select install
Raspberry Pi Picoのリポジトリからpico-sdk, pico-examples, pico-extrasをコピーします.
cd
mkdir pico
cd pico
git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
cd ..
git clone -b master https://github.com/raspberrypi/pico-examples.git
git clone -b master https://github.com/raspberrypi/pico-etras.git
次に,pimoroniのリポジトリからpimoroni-picoをコピーします.
git clone https://github.com/pimoroni/pimoroni-pico.git
cd pimoroni-pico
git submodule update --init
cd ..
pico-examplesのサンプルファイルをコンパイルします.Raspberry Pi Pico Wを使っているので,環境変数PICO_BOARDを設定しておきます.全体をコンパイルするので,だいぶ時間がかかります.
export PICO_BOARD=pico_w
export PICO_SDK_PATH=../../pico-sdk
cd pico-examples
mkdir build
cd build
cmake ..
make
cd ../../
pimoroni-picoのサンプルファイルをコンパイルします.
cd pimoroni-pico
mkdir build
cd build
cmake ..
make
cd ../../
pimoroni-pico/examples/inky-packの動作を確認します.一度,Raspberry Pi Pico WをmacにUSBケーブルで接続します.認識できたら,一度ケーブルを抜いて,Raspberry Pi Pico WのBOOTSELボタンを押しながらUSBケーブルでmacに接続します.コンパイルしたプログラムを書き込みます.
cd pimoroni-pico/build/examples/inky_pack
cp inky_pack_demo.uf2 /Volumes/RPI-RP2/
書き込みが終了すると,すぐにプログラムが動きました.
eペーパーなので,USBケーブルを抜いても表示が消えません.

2021年5月17日月曜日

Raspberry Pi PicoでUSB-DAC(I2Sボードをつけて音出し)

前の投稿で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って,物がないので,自分でいじるには貴重はハードウェアではないでしょうか.

2021年5月15日土曜日

Raspberry Pi PicoでUSB-DAC(I2Sボード無しでbuild,installまで)

Raspberry Pi PicoでLチカの続きです.

Raspberry Pi PicoからI2S信号をI2S-DACに出力すると,Raspberry Pi PicoのUSBがパソコンに対してslave側なので,パソコンのUSBに外付けしてUSB-DACとして使えるのでは?という話です.



この商品の記述に,「カスタムUSBサウンドカード」って書いてあるので,いろいろ探してみた所,こういうソースコードを見つけました.ざっと眺めてみると,どうもUSBとI2Sを両方使っているので,USBオーディオデバイスとしてパソコンから認識されて,I2Sに信号を流し込めるっぽいです.

このページをみると,pico-playgroundはpico-extras内のライブラリを使っていると書いてあります.

まず,pico-sdkやpico-exampleディレクトリのあるディレクトリで以下ようにライブラリとexampleを取得します.

git clone -b master https://github.com/raspberrypi/pico-extras.git
git clone -b master https://github.com/raspberrypi/pico-playground.git

ここの,pico-playground/apps/usb_sound_card/がそれっぽいです.


まずは,pico-extrasからbuildします.

cd pico-extras
git submodule update --init
mkdir build
cd build
export PICO_SDK_PATH=../../pico-sdk
cmake ..
make

これでpico-extras以下が全てコンパイルできした.


次にpico-playgroundをbuildします.

cd ../../pico-playground
mkdir build
cd build
export PICO_SDK_PATH=../../pico-sdk
export PICO_EXTRAS_PATH=../../pico-extras
cmake ..
make

これでpico-extrasが全てコンパイルできました.


Raspberry Pi PicoのBOOTSELボタンを押しながらUSBケーブルでMacに接続すると,RPi-RP2という外付けストレージとして認識されます.

pico-playground/buildの中のファイルapps/usb_sound_card/usb_sound_card.uf2をRPi-RP2の中にコピーすると,RPi-RP2がアンマウントされ,Raspberry Pi Picoが再起動してプログラムが動きます.このとき,Raspberry Pi Picoは外付けUSBストレージとして認識されません.画面の一番上のオーディオボリュームをクリックしてみると,無事にオーディオ出力デバイスとして認識されているようです.


また,/アプリケーションズ/ユーティリティ/Audio MIDI設定.appを起動してみると,48kHzと44.1kHzが使えて,初期値が48kHzのオーディオデバイスとして認識されていることがわかります.



Raspberry Pi Picoに足をはんだづけするのを忘れたのと,I2S DACボードを家に持って帰ってくるのを忘れたので,とりあえず今日はここまでです.

続きはここで.

Raspberry Pi PicoのSDKをmacOSでセットアップしてC言語でLチカ

Linuxの動かないRaspberry Pi,Raspberry Pi Picoの開発環境をmacOS (Catalina 10.15.7)上に構築します.



以下のページを参照してmacOS上を構築しました.

https://fukuno.jig.jp/3116

以下のようにSDKをインストールして,コマンドラインからサンプルプログラムblinkをbuildしました.


brew install cmake
brew tap ArmMbed/homebrew-formulae
brew install arm-none-eabi-gcc

cd ~/
mkdir pico
cd pico

git clone -b master https://github.com/raspberrypi/pico-sdk.git
cd pico-sdk
git submodule update --init
cd ..
git clone -b master https://github.com/raspberrypi/pico-examples.git

cd pico-examples
mkdir build
cd build
export PICO_SDK_PATH=../../pico-sdk
cmake ..

cd blink
make


いつものように,まずはLチカから動かしてみます.Raspberry Pi PicoのBOOTSELボタンを押しながらUSBケーブルでMacに接続すると,RPi-RP2という外付けストレージとして認識されます.
上のコマンドラインでbuildしてできたblink.utf2ファイルをRPi-PI2の中にコピーすると,RPi-RP2がアンマウントされて,プログラムが動きます.



引き続きこのページで,Raspberry PiをUSB-DACにしてみます.

2019年7月25日木曜日

Raspberry Piで作るデジタルオーディオシステムのメモ

Raspberry Piで作るデジタルオーディオシステムの現状をざっくりとまとめてみました.

  • 本体
2019年7月現在,Raspberry Pi 4Bが発表されているものの,日本では未発売なので,3B3B+になるでしょうか.両者ともWiFiとbluetooth内蔵です.最初の設定の時だけはディスプレイが必要です.SSHでリモートログインできるようになったらディスプレイは不要です.また,ACアダプターとmicroSDカードも忘れないように購入しましょう.

なお,4Bと3B/3B+はディスプレイ端子と電源端子の形状が変更されているので,ケースに互換性はありません.3Bと3B+も若干形状が異なっており,このケースに3B+を入れるには,加工が少し必要なようです.

  • OS
Raspberry Piをパソコン代わりに使う際には,Debian LinuxベースのRaspbianが提供されていますが,Raspberry Piをオーディオサーバーとして用いる際に最も良く使われているOS(基本ソフトウェア)がVolumioです.日本語のWeb情報も多いです.他にはMoode AudioRuneAudioがあります.面白いのは,OSを変えると音も変わることです.microSDカードを複数枚用意して,OSを入れ替えながら使ってみると良いでしょう.

  • I2S-DAC
I2SというのはIC間でデジタル音声データを伝送するプロトコルです.この仕様のデータを受け入れて,Raspberry PiのGPIOピンに直接挿せるボードがあり,これで,Raspberry Piのデジタルオーディオをアナログに変換します.パソコン+USB-DACと違うのは,USBケーブルにはノイズがいっぱい乗っていると言う話があり,このようなUSBラインのノイズフィルターなどが売られていますが,I2SだとUSBラインのノイズは乗りません(Raspberry Pi自体のデジタル部分のノイズは乗ると思います).

2018年にRaspberry Piオーディオケースの規格ができてこの手のケースを使うと,DACつきのRaspberry Piをちゃんとケースに入れられるようになりました.

気を付けることは,I2Sはシステムクロック,ビットクロック,LRクロック,データ信号の4本の線を使うのですが,Raspberry Piからはシステムクロックが出力されないので,システムクロック入力が不要なDACを選ぶ必要があります.代表的なのがDACチップとしてPCM5122 (32bit, 384kHzまで入力可能)を用いたこのようなボードです.ただし,PCM5122を用いても,このボードのようにシステムクロックをチップの外部から入力することもできます.DACチップとしてPCM5122を用いていれば,Raspberry PiのOSからはHiFiBerry DACもしくはHiFiBerry DAC+として人気できるようです.

PCM5122でも頑張れば,このボードこのボードを組み合わせて,DACボード側でシステムクロックを生成してRaspberry Pi側に送ることもでき,より精度の高いクロックを供給することができます.

注意:デジタル音楽データの伝送エラーは,基本的にほとんど起きないのですが,クロックのゆらぎ(クロックジッタと呼ばれる)があると,これがアナログの波形に影響を与えます.デジタルオーディオの世界では,ルビジウムを用いたマスタークロック供給機器などもあります.

  • 音楽データを保存する機器(NASもしくはタブレットPC,スマホなど)
本体をmicroSDカードで運用する場合に,別に音楽データを入れるのに使います.

NASを用いる場合
Raspberry Piと2.5inch SSD/HDDを内蔵できるこういうケースもあります.電源スイッチも付いているので,Raspberry Pi自体をNASとして運用するには良いと思います.パソコンをNASサーバーとして用いて,パソコンに入れた音楽データにRaspberry Piからアクセスさせることもできます.

スマホなどから音楽データを飛ばす場合
なお,Raspberry Pi上のOSにVolumioなど前述のOSを使うと,AirPlayという機能が使えるので,スマホの音声出力をRaspberry Piに飛ばして,スマホに入っている音楽データをRaspberry Pi経由で再生できます.

  • アンプ
Raspberry Piに合わせるなら,デジタルアンプがコスパが良いと思います.安価な割に定評のあるTA2020を使った物としては,例えばNFJのこれなどでしょうか.最近流行っているオペアンプ差し替えですが,定番はOPA627への交換です.半田付けを頑張るならここあたり,DIP製品がよければこれを2個とこの変換基板を購入します.オペアンプ差し替え済みのこれとか,かなり良いと思います.

TA2020を使った組み立てキットもあるようです.

  • スピーカー
値段別にリストアップしてみます.

1万円コース
  1. スピーカーユニットは毎年7月に発売されている音楽の友社ONTOMO MOOKのスピーカーユニット(2019年はマークオーディオ製8cmスピーカー(Amazon)).スピーカーボックスはFOSTEXの8cm用バスレフ箱P800-Eを2個(Amazon).
  2. FOSTEXかんすぴセットP802-S(Amazon).
  3. その他,8cmだとコイズミ無線で色々選べます.
2万円コース
  1. 2019年7月に,FOSTEXの定番FE83シリーズの新製品FE83NVが出ました.これとバックロードホーンエンクロージャー(完成品組み立て品)もしくはダブルバスレフ型エンクロージャーを組み合わせると良いと思います.
  2. 上記の10cmタイプだとFE103NVバスレフ型エンクロージャー (各2個ずつ)が2万円で構成可能です.
3万円〜5万円コース

この値段になると,オーディオメーカー製のそこそこのスピーカーが入手できます.代表的な物として,以下を挙げておきます.
  1. DALI ZENSOR1 (Amazon).
  2. TEAC S-300NEO (Amazon).
  3. TANNOY MERCURY 7.1 (Amazon)
  4. FOSTEX FE103NV + FOSTEXエンクロージャー (各2個ずつ)

  • 最後に
Raspberry Piでオーディオをやってみるなら,この連載が網羅的にまとまっています.