ALSAサウンドシステム上のオーディオデータをWAVEファイルに書き出す
ここでは、ALSAサウンドシステムに対応したアプリケーションからのオーディオ出力をWAVE形式のファイルに書き出す方法についてを扱う。
「file」のALSA PCMモジュール(プラグイン)を用いる方法
ALSAサウンドシステム上のPCMモジュール(プラグイン)システムにおいて、アプリケーションからの出力を「file」モジュールに向けることで、その音声の流れがファイルに出力されつつ、slave.pcm(次に渡す先のPCMモジュール名)を「default」にすることで、通常通りに音声も出力させることができる。
ファイル名: ~/.asoundrc
pcm.wavfile { type file slave.pcm default format wav perm 0644 file [出力先ファイルの絶対パス(/path/to/filename.wav)] }
これでALSA対応アプリケーションからPCMデバイス名を(上の例では)「wavfile」にして音声が流れると、音声が止まるまでの間、指定された出力先にWAVE形式のオーディオデータを書き出す。
アプリケーションごとのPCMデバイス名の指定方法は「ALSA対応アプリケーションのPCMデバイス指定」を参照。*1
生の形式のオーディオデータを書き出すようにすることも可能で
ファイル名: ~/.asoundrc
pcm.rawfile { type file slave.pcm default format raw perm 0644 file [出力先ファイルの絶対パス(/path/to/filename.raw)] }
のようにする。この場合は「rawfile」というPCMデバイスを指定する。
保存された.rawファイルはaplayでは
$ aplay --file-type raw --rate 48000 --format S16_LE --channels 2 out.raw
のように、PulseAudioが動作していればpacatコマンドにより
$ pacat --playback --rate=48000 [.rawファイル]
のようにして再生できる。いずれの場合も(生データという性質上)フォーマットに関する指定を正しく行わないとテンポや音の高さがおかしくなったりノイズになったりする。
${HOME}/.asoundrc内の「perm」は保存されたファイルの属性(パーミッション)。記述しない場合は既定値として0600(所有者以外読み書き不可)という属性になる。
なお、このモジュールを用いた方法では特定のタイミングで記録を開始/停止するということはできず、「file」のPCMデバイスに向けてデータが出力されている間はずっとそれがファイルに書き出され続けることになる。
glcを用いる方法
ALSAサウンドシステムに対応したキャプチャツールglc(glc-capture)を用いてアプリケーションを起動し、録音したい部分でキャプチャ開始/停止の操作を行い、出力された.glcファイルからglc-playで音声部分を抽出すればWAVE形式のオーディオデータが得られる。
詳しくは「OpenGLアプリケーションが快適にキャプチャできるglcについて(キャプチャ、再生、エンコード)」を参照。
関連記事:
- ALSA対応アプリケーションのPCMデバイス指定
- GNU/Linuxにおける基本的なアクセス権について(対象/属性/表記など)
- GNU/Linuxにおける基本的なアクセス権について(属性の設定手順と初期値について)
- OpenGLアプリケーションが快適にキャプチャできるglcについて(キャプチャ、再生、エンコード)
参考URL:
- http://www.alsa-project.org/alsa-doc/alsa-lib/pcm_plugins.html - 「Plugin: File」の部分を参考とした
使用したバージョン:
- alsa-plugins 1.0.18, 1.0.21