2016-08-09 2 views
0

PortAudio를 사용하여 다중 채널 오디오 데이터를 기록하고 있습니다. 각 채널의 데이터를 별도의 파일로 저장하려고합니다. 따라서 프로그램의 어딘가에서 File IO 작업을해야합니다. 이 문서는 높은 빈도로 호출되기 때문에 콜백 함수에서 IO 작업을 수행하지 않는 것이 좋습니다.콜백에없는 경우 PortAudio에서 파일 IO 작업을 수행해야하는 위치

그런 다음 IO 작업을 수행하는 올바른 방법은 무엇입니까? 다른 스레드를 시작해야합니까?

미리 내 게시물을 읽는 데 시간을내어 감사드립니다!

1) 각 채널에 대한 버퍼를 가지고 :

답변

0

이 내가 할 것 인 것이다. 이러한 버퍼는 저장 버퍼가 될 것이며 콜백에있는 버퍼가 아닙니다. paData 구조체에 이러한 버퍼를 선언하는 것이 좋습니다. 저장 용량이나 시간 제한에 따라 버퍼 길이를 결정해야합니다.

2) 녹음을 중지하면 파일 IO 작업을 수행하는 방법을 호출해야합니다.

3) 1 단계에서 가져온 버퍼를 사용하여 파일에 기록하십시오.

4) 반복

+0

답장을 보내 주셔서 감사합니다. 나는 네가 말한 것과 같은 정신을 공유하는 것을 발견했다. 링 버퍼 (RingBuffer)라는 데이터 구조가 있습니다.이 구조는 여러 스레드에서 동시에 쓰기 및 읽기를 처리합니다. 콜백 함수에서 별도의 스레드를 사용하여 링 버퍼를 읽고 파일에 쓸 때 링 버퍼에 쓰기를해야합니다. – Foreverniu

+1

아 맞아! 순환 버퍼가 필요합니다. 순환 버퍼를 대량으로 읽는다면 ... 2048 개의 샘플 크기 배열을 가지고 있다면 1024 개의 샘플 또는 모든 것을 읽게 될 것입니다. 그렇게하면 모든 샘플을 읽고/녹음하는 데 시간을 낭비하지 않습니다. –