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

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

PulseAudio上の録音に関する覚え書き(WAVE形式での保存)

ここでは、PulseAudio上の音声データを録音してWAVE形式に保存するための2通りの方法を扱う。
(2015/1/10)PulseAudioが統合された新しいディストリではアプリケーションの出す音はALSA向けのアプリケーションからも録音できる。また、parecなどの専用ツールでも直接WAVE形式に書き出す録音ができる。

  1. GStreamerを使用した方法
    1. Sink(出力)側の録音
    2. Source(入力)側の録音
  2. JACK Audio Connection Kitと連携した方法
    1. 例: JACK Timemachineで録音する

GStreamerを使用した方法

GStreamerのPulseAudioプラグイン*1を使用することで、WAVE形式のファイルに保存することができる。
使用するのはgst-launchというコマンドで、Gentooではgst-launch-0.10のようなコマンド名になる(media-libs/gstreamerに含まれる)。Debian/Ubuntuでは「gstreamer-tools」というパッケージに含まれる。
録音するデバイスの指定に関する扱いは「PulseAudio上の録音に関する覚え書き(オーディオストリームの録音)」と同様。

Sink(出力)側の録音
device=オプションで、出力先デバイスのモニタデバイスを指定する。
下は、モニタデバイス名が「alsa_output.default.monitor」の場合の例。

$ gst-launch pulsesrc device=alsa_output.default.monitor ! queue ! audioconvert ! wavenc ! filesink location=out.wav
(Ctrl+Cを押すと停止)

Source(入力)側の録音
device=引数は付けない。

$ gst-launch pulsesrc ! queue ! audioconvert ! wavenc ! filesink location=out.wav
(Ctrl+Cを押すと停止)

JACK Audio Connection Kitと連携した方法

設定ファイルdefault.pa*2でmodule-jack-sinkを使用するように設定する*3と、PulseAudioからのオーディオ出力をJACK Audio Connection Kitの出力ポートとして、別のJACKアプリケーションの入力ポートと接続することができる。これにより、JACK向けのアプリケーションで録音することができる。もちろん、JACK Rackなどを途中に挟んで加工した音をリアルタイムで録音することも可能。
また、同様に、module-jack-sourceを使用した場合、JACK側から「PulseAudio JACK Source」のポートへ接続したデータがPulseAudio側でSourceとして使用できる。
下の画像は両方のモジュールを使用したときのJACK側の接続状況。

(2008/9/13)もし、「PulseAudio JACK Sink」から「system」へ自動的に作成される接続が(途中にJACKアプリケーションを挟むなどの都合で)邪魔になるのであれば

$ pulseaudio &; sleep 3 && jack_disconnect "PulseAudio JACK Sink:front-left" system:playback_1 && jack_disconnect "PulseAudio JACK Sink:front-right" system:playback_2

のような形でPulseAudioを起動すると、接続後すぐに切断するようになる。

例: JACK Timemachineで録音する
音飛びに強く、音声放送などの録音にも役立つ録音ツール」で扱っている通り、JACK Timemachineを使用することで、JACKのオーディオストリームをWave64もしくはWAVE(-f wavオプション使用時)の形式で保存することができる。録音は、ボタンを押した10秒前の状態から開始される。

ポートの接続に関しては、画像のように「PulseAudio JACK Sink」から引っ張ってくる。
(64bitでない)WAVE形式で保存するためのモードでTimemachineをデスクトップ環境のメニューから起動するための.desktopファイルは、同記事の追記を参照。
下は、途中にJACK Rackを挟んだ場合のポート接続例の参考画像。

使用したバージョン:

  • PulseAudio 0.9.10(0.9.10-r51)
  • GStreamer 0.10.20
  • gst-plugins-pulse 0.9.7
  • JACK Audio Connection Kit 0.109.2(0.109.2-r1)
  • QjackCtl 0.3.2

*1:パッケージ名は、Debian/Ubuntuでは「gstreamer0.10-pulseaudio」(0.10の部分は今後変更される可能性がある)、Gentooでは「gst-plugins-pulse」

*2:もしくはPulseAudioの起動時に-nF [.paファイル]オプションで代わりに指定した別ファイル

*3:module-hal-detect、module-detect、module-alsa-sinkといったモジュールの読み込み部分を全てコメントアウトして、「load-module module-jack-sink」を追加