試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

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について(キャプチャ、再生、エンコード)」を参照。

関連記事:

参考URL:

使用したバージョン:

  • alsa-plugins 1.0.18, 1.0.21

*1:MPlayerを使用した例としては「mplayer -ao alsa:device=wavfile [再生ファイル]」