2014年2月13日木曜日

USBマイクとUSBスピーカーでarecord(録音)とaplay(再生)を行う

さて、久しぶりの更新ですが、
今回はLinuxの音声デバイスドライバALSAに含まれる録音と再生ツールarecordとaplayの使い方を紹介します。

PCのオンボードデバイスではなく、後差ししたUSBマイクとUSBスピーカーを使う場合についてです。
(PCはUbuntuです。)

最初に、とあるUSBマイクを使った録音です。
まずは録音に使えるデバイスの一覧をarecord -lコマンドで取得します

$ arecord -l

**** ハードウェアデバイス CAPTURE のリスト ****
カード 0: Intel [HDA Intel], デバイス 0: VT2020 Analog [VT2020 Analog]
サブデバイス: 2/2
サブデバイス #0: subdevice #0
サブデバイス #1: subdevice #1
カード 2: Device [USB PnP Sound Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
USBマイクは、デバイス2の0番であることがわかりました。

続いて、USBマイクを使って録音します。-Dでデバイス名を指定します。
$ arecord -D hw:2,0 record.wav

録音中 WAVE 'record.wav' : Unsigned 8 bit, レート 8000 Hz, モノラル
arecord: set_params:1081: サンプルフォーマットが使用不可能
Available formats:
- S16_LE
フォーマットが違うと怒られてしまいました。


気を取り直してもう一度(上記メッセージの通り、フォーマットにS16_LEを付けます。)
$ arecord -f S16_LE -D hw:2,0 record.wav

録音中 WAVE 'record.wav' : Signed 16 bit Little Endian, レート 8000 Hz, モノラル
警告: レートが不正確です (要求値 = 8000Hz, 使用値 = 44100Hz)
plug プラグイン を使用してください
^Cシグナル 割り込み で中断...
警告が表示されますが、録音は開始されます。適当なところでCtrl+Cで止めましょう。
(警告としては、サンプリングレート8000Hz(arecordのデフォルト値)が使えないので44100Hzに直しましたという内容です。)


続いて、とあるUSBスピーカーを使って再生させてみます。
まずは再生に使えるデバイス一覧を取得します。
$ aplay -l

...(略)...
カード 2: Device [USB PnP Sound Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 3: Device_1 [USB Sound Device], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
(ちょっと紛らわしいですが、USBマイクとは違うデバイスなので、)USBスピーカーはデバイス3の0番目であることがわかりました。

USBスピーカーで先ほど録音したファイル(record.wav)を再生します。
まずは再生に使えるデバイス一覧をaplay -lコマンドで取得します。
$ aplay -D hw:3,0 record.wav

再生中 WAVE 'record.wav' : Signed 16 bit Little Endian, レート 44100 Hz, モノラル
aplay: set_params:1087: チャネル数が使用不可能
モノラル音声は再生できないぜ、と怒られています。

さて、これはどうする。
リサンプリングを使いましょう。
$ aplay -D plughw:3,0 record.wav

再生中 WAVE 'record.wav' : Signed 16 bit Little Endian, レート 44100 Hz, モノラル
-Dオプション時にplugをデバイス名の前につけるだけ。ちゃんと再生できました。

ちなみに、先ほどの録音時もplugをつけるとフォーマット指定しなくても怒られなくなります。
$ arecord -D plughw:2,0 record.wav

録音中 WAVE 'record.wav' : Unsigned 8 bit, レート 8000 Hz, モノラル
plugをつけると指定のフォーマット、ビットレートになるよう自動でリサンプリング処理を行ってくれるようになります。
つまり今回の場合だと、USBマイクではSigned 16bit Little Endianの44100Hzのモノラル音声で録音し、ファイルはUnsigned 8bit 8000Hzのモノラル音声になります。

逆に、再生時のplugは、先ほどの例だと、
モノラルを2ch(ステレオ)に変換してUSBスピーカーから再生しています。

...ということを調べるのに時間がかかってしまったのでメモとして残しておくことにしました。

おまけ。
いちいちファイルにするのが面倒だぜ、マイクとスピーカーがちゃんと動いているか確認したいだけなんだぜ、という場合は、
arecordとaplayをパイプでつなぐとファイルに落とさず録音と再生を行えます。
$ arecord -f S16_LE -r 44100 -D hw:2,0 | aplay -D plughw:3,0

録音中 WAVE 'stdin' : Signed 16 bit Little Endian, レート 44100 Hz, モノラル
再生中 WAVE 'stdin' : Signed 16 bit Little Endian, レート 44100 Hz, モノラル
(Ctrl+Cで終了します。)

確認したいデバイスがマイクなのかスピーカーなのかによって、plugをつけたり外したりすると良いみたいです。

以上でございます。

0 件のコメント:

コメントを投稿