사운드 데이터를 생성하고 변환하여 WAV 형식으로 저장하려고 합니다. 거의 다 왔어요. 하지만 생성된 소리를 듣고 싶습니다.하지만"녹화" 중입니다.
이 명령은 데이터를 생성하고 재생합니다.
perl -e 'for ($c=0; $c<4*44100; $c++) {
$k=1*sin((1500+$c/16e1)*$c*22e-6); print pack "f", $k;
} ' |
aplay -t raw -c 1 -r 44100 -f FLOAT_LE
(사운드 재생이 멈춘 후 Ctrl-C를 누르면 aplay
세그폴트가 발생할 수 있습니다.)
sox
및 를 사용하면 mplayer
잘 녹음할 수 있지만 동시에 소리가 들리지 않습니다.
perl -e 'for ($c=0; $c<4*44100; $c++) {
$k=1*sin((1500+$c/16e1)*$c*22e-6); print pack "f", $k;
} ' |
sox -V -r 44100 -c 1 -b 32 -e floating-point -t raw - \
-c 2 -b 16 -t wav - trim 0 3 gain -1 dither |
mplayer - -cache 8092 -endpos 3 -vo null -ao pcm:waveheader:file=test.wav
play test.wav
( s 가 아닌 패키지 play
의 위치 ) 는 파일의 "Duration: 00:00:03.00" 을 선언합니다 . 또한 프로세스가 실시간보다 빠르게 실행되는 것 같습니다. 즉 (분명히) 3초 이내에 완료됩니다.sox
alsa
aplay
test.wav
다음을 사용하여 스트림을 디스크로 캡처하려고 시도하여 tee
부정 행위를 합니다 .
perl -e 'for ($c=0; $c<4*44100; $c++) {
$k=1*sin((1500+$c/16e1)*$c*22e-6); print pack "f", $k;
} ' |
sox -V -r 44100 -c 1 -b 32 -e floating-point -t raw - \
-c 2 -b 16 -t wav - trim 0 3 gain -1 dither |
tee test.wav |
aplay
분명히 여기에서 생성된 소리가 들리고 소리 test.wav
도 재생되지만 play test.wav
"기간: 알 수 없음"이 보고됩니다.
그래서 묻고 싶습니다. 위의 "one-liner" 명령과 유사한 작업을 수행하여 사운드를 생성, 재생 및 녹음할 수 있습니까?동시에- 하지만,아니요설치해야 합니까 jack
?
추신: 일부 관련 링크:
답변1
예를 들어 tee(1)을 사용하여 스트림을 재사용할 수 있습니다.
perl -e 'for ($c=0; $c<4*44100; $c++) {
$k=1*sin((1500+$c/16e1)*$c*22e-6); print pack "f", $k;
}' | tee >(sox -c1 -r44100 -t f32 - test.wav) \
>(sox -c1 -r44100 -t f32 - -d) > /dev/null
대부분의 톤과 스윕을 생성할 수 있는 Red Sox Synth Effects에도 관심이 있을 수 있습니다.
sox -n -r 44100 test.wav synth 4 sine 100:1000