iPhone 마이크에서 오디오를 지속적으로 녹음하고 처리합니다.실시간 오디오 처리 Swift
현재 AVAudioRecorder 및 AVFoundation을 사용하고 오디오 인 아웃을 8 초의 ".wav"파일로 녹음합니다.
대신 오디오 입력을 버퍼에 계속 녹음하고 8 초 길이 버퍼의 청크를 처리하고 싶습니다.
오디오 입력을 버퍼에 녹음하려면 어떻게해야합니까? 거기에서 8 초 길이의 청크를 읽으려면 어떻게해야합니까?
감사합니다.
iPhone 마이크에서 오디오를 지속적으로 녹음하고 처리합니다.실시간 오디오 처리 Swift
현재 AVAudioRecorder 및 AVFoundation을 사용하고 오디오 인 아웃을 8 초의 ".wav"파일로 녹음합니다.
대신 오디오 입력을 버퍼에 계속 녹음하고 8 초 길이 버퍼의 청크를 처리하고 싶습니다.
오디오 입력을 버퍼에 녹음하려면 어떻게해야합니까? 거기에서 8 초 길이의 청크를 읽으려면 어떻게해야합니까?
감사합니다.
AVCaptureDevice의 AVCaptureAudioDataOutput 또는 처리 탭이 삽입 된 AVAudioEngine의 Audio Toolbox : Audio Queue Services, RemoteIO 오디오 장치)에서 여러 가지 방법으로 원시 PCM을받을 수 있습니다. 파일을 만들었다면 Audio Toolbox의 AudioFile 또는 ExtAudioFile을 사용하여 작성한 프레임 수를 세고 새로운 8 초 파일을 시작할 시간을 결정할 수 있습니다.
리듬 Fistman 위 노트, 그것은 더 안전 할 것입니다 당신이 한 경우
캡처 콜백 같은 --pushes - 투 -> 링 버퍼 < --pulls-from-- 파일 코드를 작성
하나의 파일을 닫고 다른 파일을 열면 캡쳐 콜백이 계속 들어올 수 있으며 파일 I/O를 차단하면 바닥에 일부 데이터를 놓을 수있는 기회가됩니다.
또 다른 방법은 콜백에서 메모리에 8 초 버퍼를 채우는 것입니다. 그리고 그것이 가득 찼을 때 새로운 버퍼를 malloc하는 동안 다른 스레드가 그 파일을 쓰게하고 (분명히 파일 작성자는 완료되면 이전 버퍼를 삭제합니다).
편집 : 또한, 귀하의 질문에 스위프트에 대해서는 아무 것도 보지 못했지만이 중 어떤 것도 Swift 또는 C/Obj-C에서 제대로 작동합니다.
링 버퍼가 원하는 것일 수 있습니다. –
답변을 주셔서 감사합니다. 버퍼 코드에 삽입하는 몇 가지 예를 들어 주시겠습니까? –
오디오를 실시간으로 처리하려면 AVAudioRecorder보다 낮은 레벨을 사용하고 싶을 수도 있습니다. -> https://developer.apple.com/library/content/documentation/MusicAudio/Conceptual/AudioQueueProgrammingGuide/AQRecord/RecordingAudio.html#//apple_ref/doc/uid/TP40005343-CH4-SW1 –