ラズパイのScratchで録音/再生がしたい!
ラズパイクラスの子どもたちとScratch、Sonic Pi、Minecraftなどを楽しんでいるわけですが、Scratchで録音/再生がしたくて、ずっとできずにいました。USBサウンドカードを繋いで、マイクを刺せばできそうなんだけど、どれがいいのかよくわからない。
USBウェブカメラがいいのでは?
一方、写真も取り込みたいのでカメラが必要。でも、ラズパイ専用カメラは高いし、ケーブルがやわなので、パス。おっ、サウンドカードとマイクを買うより、USBウェブカメラが安い。そして、音声も取れるやんか。一石二鳥。
とりあえず、買ってみたけど、なかなか時間が取れない。。
https://www.logicool.co.jp/ja-jp/product/hd-webcam-c270
https://www.logicool.co.jp/ja-jp/product/hd-webcam-c310
標準のオーディオ出力を使いながら、USBウェブカメラで録音するのは難しい?
最近、音声合成や音声認識でALSA関係をいじくり始めていて、USBウェブカメラをマイクとして使うのはいい感じ。それなら、やっぱりScratchもなんとかしたいと、いよいよ本腰を入れることに。
ところが、インターネットをかなり彷徨ったところ、USBウェブカメラで録音しつつ、標準のオーディオ出力を使いつつという例がない。ラズパイ財団の仕事としてラズパイ用のScratchをバリバリ整備/改造しているTim Rowledgeさんとやりとりしたけど、ALSAの設定がわけわかんない!というところで止まっている模様。掲示板などでも、世界的に皆さん困っている感じ?
何度このメッセージを見たことか。
これをググって、Tim Rowledgeさんとつながることができたわけですが。彼は、ガシガシのSqueaker/Smalltalkerで、ラズパイ用のVMの高速化、ラズパイ用のScratchイメージの改良をやっている人です。最近の高速化はこの人のおかげ!!!
というわけで、ScratchもSqueakもオープンソースだから、好きにしていいよと言われつつ、ALSA設定の深い森へ。。。。。。もうだめだ、遭難するー。と思ったら、、、できました!
ALSAの秘密の設定
デフォルトの「再生」を標準オーディオ出力、0番のサウンドカード(ALSA用語)にしたまま、デフォルトのキャプチャー(録音)としてUSBウェブカメラのマイク、1番のサウンドカードを指定、という、合わせ技。コントロールのデフォルト設定は特に必要ないです。あと、よくある、ドライバーの読み込み順を入れ替える作戦も不要。
Scratchは、とにかく、システムのデフォルトの入出力を見ています。なので、今回のような場合は、 type asym
を使った合わせ技が必要でした。
nano ~/.asoundrc
で編集します。
pcm.!default {
type asym
playback.pcm {
type hw
card 0
}
capture.pcm {
type hw
card 1
}
}
ctl.!default {
type hw
card 0
}
このファイルは消しても自動的にできるし、ある環境では、せっかく書いた設定にテンプレートを必ず追加してくるという不思議な動きをしていました。そういう時は、chmod 444 でpiさんに触らせなくするとオッケー。(2018-1-30追記:type asmが、type hwに書き換わっていて、色々とおかしな動きになりました。原因は不明。chmod 444やっていなかった環境。)
$ alsamixer
で、音量調節をすると、やったー。録音できた。
(2018-1-30追記:録音 → 停止で良いはずですが、これでは録音できない場合がありました。その時は、録音 → 再生で。)
USBウェブカメラで写真も撮りたい。
さて、こちらの方が先にできていました。もしかすると何もしないでも使えていたかも。Scratchでコスチュームのタブを開くと、なんと [カメラ]ボタン出現。新しいコスチュームとして撮った写真を使えます。
もう一つの使い方は、[( gpioserveron ) を送る]でGPIOサーバーを起動しておいて、[( photo ) を送る]ブロックでシャッターを切る方法。スクリプト中に使えます。
ラズパイ財団のページにも説明されています。「Scratch GPIO」
https://www.raspberrypi.org/documentation/usage/gpio/scratch1/README.md
このページは、当然ながらTim Rowledgeさんもコミットしています。
(追記:2019-02-20)
[( photo ) を送る]ブロックだけでなく、[( photo640@480 ) を送る]など、サイズ指定もできます。注意!:あまり大きなサイズにすると、永遠に時間がかかります=おそらくフリーズ。
Scratch以外にも使えるのでラズパイ財団の「USING A STANDARD USB WEBCAM」ページをみて、fswebcamというツールをインストールしておきます。
https://www.raspberrypi.org/documentation/usage/webcams/
sudo apt-get install fswebcam
以上!
参考ページ
Advanced Linux Sound Architecture/Troubleshooting
2.2 Setting the default microphone/capture device
https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture/Troubleshooting#Setting_the_default_microphone.2Fcapture_device