내 목표는 Raspberry Pi 3에서 긴 다중 채널 wav 파일(5시간 이상, 18채널)을 녹음하는 명령줄 도구를 갖는 것입니다. 오디오 인터페이스는벨린저 XR18.
이를 수행하는 방법은 물론 via 입니다 arecord
. 불행하게도 pi에 버퍼 오버플로가 발생합니다. 왜냐하면 arecord
고정된 최대값이 있기 때문입니다. 버퍼 크기는 500ms로 변경할 수 없거나 변경할 수 없으며 arecord의 출력을 sox로 파이프하여 ntfs USB 플래시 드라이브에 씁니다. 추가 보너스로 sox는 샘플을 32비트에서 24비트로 동적으로 변환하고 오버플로를 제거할 수 있습니다(내가 아는 한).
내가 실행한 명령은 다음과 같습니다.
arecord -M -D hw:CARD=X18XR18,DEV=0 -c18 -f S32_FE -r48000 | sox --input-buffer 51200 -t wav - -b24 -c18 -t wav <filename.wav>
첫 번째 부분은 배관 |
작업이므로 도움이 필요하지 않습니다. 두 번째 부분도 작동하며, 녹음이 진행됨에 따라 파일이 생성되고 커집니다. 그런데 무슨 이유인지 1.5GB 정도에서 녹음이 멈추고 sox도 종료됩니다.
단독 실행에는 arecord
이러한 제한이 없으며 몇 시간 동안 실행됩니다(물론 한도 내에서).
최종 파일 크기에 도달하기 직전에 파일이 지속적으로 커지는 것을 멈추고 대신 꽤 오랫동안 머물렀다가 크기가 몇 MB씩 커지는 것을 발견했습니다. 나에게 이것은 버퍼 오버플로와 매우 유사하게 들리지만 sox의 버퍼 크기를 100MB로 두 배로 늘려도 아무런 차이가 없습니다. sox의 출력도 별로 도움이 되지 않습니다. 자세한 정보 수준 3에서도 다음과 같은 내용만 표시됩니다.
sox WARN sox: '<filename>' output clipped 13403 samples; decrease volume?
sox WARN sox: '-' balancing clipped 13403 samples; decrease volume?
내가 지금까지 시도한 것 :
- 양말 변경
--input-buffer-size
- 차이 없음 - 1.5GB 이전에 새 파일 시작을 시도했습니다. 작동하지만 추가된 파일 크기가 1.5GB에 도달하자마자 다시 중지됩니다.
- 플래시 드라이브 대신 SD 카드에 직접 기록 - 차이 없음(오버플로 발생 제외)
ATM에서 이것을 테스트할 다른 Linux 상자는 없지만 Raspberry Pi 3는 확실히 작업을 처리할 수 있어야 합니다(CPU/RAM 측면). 이 이상한 동작의 원인이 무엇인지 아는 사람이 있습니까?
답변1
이 스레드xfs 형식의 대상 디스크/SD 카드를 사용해 보십시오.