스트리밍 데이터를 표준 출력으로 출력하는 RTL-SDR 라디오 수신기가 있습니다. 다음 명령을 사용하여 오디오를 들을 수 있습니다.
$ rtl_fm -M wbfm -f 96.5M | play -r 32k -t raw -e s -b 16 -c 1 -V1 -
보시다시피, rtl_fm은 32kHz의 샘플 속도로 16비트 부호 있는 정수로 구성된 샘플 스트림을 출력합니다.
이제 sox를 사용하여 이 오디오를 녹음하고 싶어서 시도해 보았습니다.
$ rtl_fm -M wbfm -f 96.5M -g 25 | rec -e s -b 16 -r 32000 out.wav
wav 파일을 받았는데 그냥 비어있습니다. 모든 값이 0입니다. 나는 노력했다
$ rtl_fm -M wbfm -f 96.5M -g 25 | rec -e s -b 16 -r 32000 -t raw out.wav
하지만 이것은 Audacity가 wav로 인식하지 못하는 파일만을 제공합니다. 원시 데이터로 가져오면 여전히 모두 0입니다.
제가 쓴 것처럼 재생 명령을 실행하면 오디오가 나오지만 녹음하면 아무것도 나오지 않습니다.
어쨌든, 기록 명령의 출력은 다음과 같습니다.
$ rtl_fm -M wbfm -f 96.5M -g 25 | rec -e s -b 16 -r 32000 -c 1 out.wav
Found 1 device(s):
0: Realtek, RTL2838UHIDIR, SN: 00000001
rec WARN alsa: can't encode 0-bit Unknown or not applicable
Using device 0: Generic RTL2832U OEM
Input File : 'default' (alsa)
Channels : 1
Sample Rate : 32000
Precision : 16-bit
Sample Encoding: 16-bit Signed Integer PCM
In:0.00% 00:00:00.00 [00:00:00.00] Out:0 [ | ] Clip:0 Detached kernel driver
In:0.00% 00:00:00.26 [00:00:00.00] Out:0 [ | ] Clip:0 Found Rafael Micro R820T tuner
In:0.00% 00:00:00.51 [00:00:00.00] Out:8.19k [ | ] Clip:0 Tuner gain set to 25.40 dB.
Tuned to 96771000 Hz.
oversampling input by: 6x.
Oversampling output by: 1x.
Buffer size: 8.03ms
Exact sample rate is: 1020000.026345 Hz
Create UDP thread
Created UDP thread
Allocating 15 zero-copy buffers
Main socket started! :-) Tuning enabled on UDP/6020
Sampling at 1020000 S/s.
Output at 170000 Hz.
In:0.00% 00:00:09.22 [00:00:00.00] Out:287k [ | ] Clip:0 ^CSignal caught, exiting!
User cancel, exiting...
In:0.00% 00:00:09.47 [00:00:00.00] Out:295k [ | ] Clip:0
Aborted.
Signal caught, exiting!
Reattached kernel driver
답변1
당신 rec
은로 대체 할 수 있습니다ffmpeg -f s16le -ar 32k -ac 1 -i pipe: file.wav
ffmpeg -formats | grep PCM
내가 틀렸을 경우를 대비해.
당신의 결과물
Rec WARN alsa: 알 수 없거나 적용할 수 없는 0비트를 인코딩할 수 없습니다.
실제 마이크(연결되지 않은 것으로 가정)에서 실제로 녹음하고 있음을 나타낼 수 있습니다.