2018-06-07

PulseAudioのpipe-sourceとpipe-sink

PulseAudioのpipe-sinkやpipe-sourceとffmpegとをプロセス間通信する方法のメモ.
pactl load-module module-pipe-sink file=/tmp/sink.fifo
pactl list | less # どのようなサンプリングスペックになっているか確認.
ffmpeg -f s16le -ac 2 -ar 48000 -i /tmp/sink.fifo save.wav
新しくできたシンクに向かってアプリケーションから再生すると, ffmpegによって取り込むことができる.
pactl load-module module-pipe-source file=/tmp/source.fifo
ffmpeg -i input.wav -f s16le -ac 2 -ar 48000 /tmp/source.fifo
新しくできたソースからアプリケーションで録音ができる.

この方法単体では役に立たないが, 独自のソース・シンクを開発する場合に便利だろう. PulseAudioのモジュールを書かなくても, pipeへ読み書きするだけでソース・シンクのディバイスを作ることができる.
ところで, スピーカーへ再生している何かを録音したい場合, sink-monitorっていうsourceから録音すれば良いので, pipe-sinkは必要ない.