parec의 출력을 sox로 파이프

parec의 출력을 sox로 파이프

sox아마도 나를 계속해서 좌절시키는 유일한 Linux 프로그램일 것입니다. 동시에, 나는 그 능력에 경외감을 느끼고 있으며, 그것을 마스터하지는 못하더라도 그것에 가까워지고 싶습니다.

오늘 저는 sox파이프를 통해 바이트를 읽으려고 약 2시간을 보냈습니다.parec

바이트 는 "수신기" 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채널 44 100kHz라는 것을 알고 있습니다.

$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"

답변1

-t옵션이 나와야합니다앞으로적용되는 파일 이름입니다. 또한 -t pulsePulseAudio 데몬에서 직접 읽기(또는 쓰기)를 의미하며 그 자체로는 파일 형식이 아닙니다. 원본 오디오의 유형 이름은 입니다 raw.

이 시도:

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

(이는 ...이전과 동일한 주장을 유지한다는 의미)

soxi파일 형식은 헤더만 보기 때문에 인식되지 않습니다. 원본 오디오에는 볼 수 있는 제목이 없습니다.

관련 정보