web-dev-qa-db-ja.com

parecの出力をsoxにパイプする

soxは、私を苛立たせ続けている1つのLinuxプログラムでしょう。同時に、何ができるのかということに驚かされ、習得しなくても流暢に話せるようになりたいです。

今日、私はパイプを介してsoxからparecからバイトを読み取るために約2時間費やしました。

parecバイトはpulseaudio "シンク"です。それらをパイプに流すために、私は askubuntuからのこの回答を使用しました

これは私が使ってきたコマンドです:

$ parec -d telephonControl.monitor | sox -b 16 -e signed -c 2 -r 44100 - -t Pulse hmm.ogg silence 1 0.50 0.1% 1 2.0 0.1% :             newfile : restart

そしてこれは私が得るエラーです:

sox FAIL formats: can't determine type of  `-'
write() failed: Broken pipe

さらに、oggencはそれらをうまく解析します:

parec -d telephonControl.monitor | oggenc -b 192 -o telephonControl.ogg --raw -
Encoding standard input to 
         "telephonControl.ogg" 
at approximate bitrate 192 kbps (VBR encoding enabled)

soxにこれらのバイトをダイジェスト化する方法はまったくわかりません。

$ parec -d telephonControl.monitor >> somebytes

$ soxi somebytes
soxi FAIL formats: can't determine type of file `somebytes'

しかし、それらが生のオーディオ、16ビットの符号付きリトルエンディアン、2チャネル44100kHzであることは知っています。

$pacmd
>>> list-sink-inputs
1 sink input(s) available.
    index: 17
        driver: <protocol-native.c>
        flags: 
        state: RUNNING
        sink: 2 <telephonControl>
        volume: 0: 100% 1: 100%
                0: 0.00 dB 1: 0.00 dB
                balance 0.00
        muted: no
        current latency: 92.86 ms
        requested latency: 23.20 ms
        sample spec: s16le 2ch 44100Hz
        channel map: front-left,front-right
                     Stereo
        resample method: (null)
        module: 7
        client: 53 <ALSA plug-in>
        properties:
                media.name = "ALSA Playback"
                application.name = "ALSA plug-in"
                native-protocol.peer = "UNIX socket client"
                native-protocol.version = "26"
                application.process.id = "3609"
                application.process.user = "alec"
                application.process.Host = "ROOROO"
                window.x11.display = ":0"
                application.language = "en_GB.UTF-8"
                application.process.machine_id = "eec7c6ae60f90bb3921ad16d0000302d"
                application.process.session_id = "eec7c6ae60f90bb3921ad16d0000302d-1345384044.64188-1149507345"
                module-stream-restore.id = "sink-input-by-application-name:ALSA plug-in"
5
ixtmixilix

-tオプションが必要before適用するファイル名また、-t Pulseは、PulseAudioデーモンから直接読み取る(または書き込む)ことを意味します。それ自体はファイル形式ではありません。 rawオーディオのタイプ名はrawです。

これを試して:

parec ... | sox -t raw -b 16 -e signed -c 2 -r 44100 - hmm.ogg ...

(どこ ...は、以前と同じ引数を保持することを意味します)

soxiはヘッダーを確認するだけなので、ファイルタイプを識別できません。生のオーディオには、それを見るためのヘッダーがありません。

7
cjm