LoginSignup
14
14

More than 5 years have passed since last update.

Raspberry PiのScratchで、USBウェブカメラを活用する方法を発見!

Last updated at Posted at 2017-02-24

ラズパイの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の設定がわけわかんない!というところで止まっている模様。掲示板などでも、世界的に皆さん困っている感じ?

何度このメッセージを見たことか。
no device.png
これをググって、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 で、音量調節をすると、やったー。録音できた。

PreviewScreenSnapz006.png
(2018-1-30追記:録音 → 停止で良いはずですが、これでは録音できない場合がありました。その時は、録音 → 再生で。)

USBウェブカメラで写真も撮りたい。

さて、こちらの方が先にできていました。もしかすると何もしないでも使えていたかも。Scratchでコスチュームのタブを開くと、なんと [カメラ]ボタン出現。新しいコスチュームとして撮った写真を使えます。

PreviewScreenSnapz007.png

PreviewScreenSnapz010.png

もう一つの使い方は、[( gpioserveron ) を送る]でGPIOサーバーを起動しておいて、[( photo ) を送る]ブロックでシャッターを切る方法。スクリプト中に使えます。

FinderScreenSnapz006.png

ラズパイ財団のページにも説明されています。「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

14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14