2012-06-16 2 views
1

AudioFile & ExtAudioFile API를 사용하여 로우 레벨 오디오 작성기를 작성하려고합니다. AudioFileInitializeWithCallbacks를 사용하여 새 오디오 파일을 만들었지 만 & 크기 콜백 가져 오기가 필요합니다. 왜 이것은 단일 쓰기 콜백 만 허용하고 데이터가 성공적으로 작성되었는지 신뢰할 수없는 이유는 무엇입니까?AudioFileInitializeWithCallbacks에 필요한 콜백 읽기? Apple AudioFile API

CD 나 네트워크 소켓과 같이 찾을 수없는 스트림에 쓰고 있다면 어떻게해야합니까?

분명히 이것은 데이터를 쓰기 콜백으로 지속적으로 푸시해야하며 작업이 성공하지 못하면 오류 코드를 반환하는 데 필요한 경우이 데이터를 쓰는 것은 필자의 책임입니다.

AudioFile_SetSizeProc 및 AudioFile_WriteProc에 대한 문서는 모두 읽기 작업 "inPosition"에서 읽을 데이터의 오프셋에 대해 이야기하므로 정확하지 않은 것처럼 보입니다. ","@result 콜백은 데이터 크기를 반환해야합니다. ".

필자는 파일 작성 만함으로써이 시점을 얻었지만 첫 번째 기록 절차 후에 kExtAudioFileError_InvalidOperationOrder를 얻습니다. 이것은 무엇을 의미 하는가? 거기에 대한 문서에 대한 의견이 없습니다.

모든 포인터 나 도움이 많은 도움이 될 것입니다.

+0

콜백을 원하지 않는데 왜이 콜백 기반 API를 사용하고 있습니까? – hotpaw2

+1

다른 옵션 AudioFileCreateWithURL은 실제 파일을 가리키는 CFURLRef를 사용하기 때문에. 모든 종류의 스트림에 쓸 수 있어야 AudioFile_WriteProc (함수 포인터)를 인수로 사용하는 AudioFileInitializeWithCallbacks가 필요합니다. 이 함수는, 스트림에 기입 할 필요가있는 데이터가있는 경우, AudioFile 객체에 의해 불려갑니다. AudioFile_ProcProc을 지정해야하는 이유 또는이 문제를 해결할 방법이 없는지 알 수 없습니다. – dave96

답변

1

Apple 설명서가 잘못되었습니다. 헤더 파일 확인 AudioFile.h :

/*! 
@typedef AudioFile_SetSizeProc 
@abstract A callback for setting the size of the file data. used with AudioFileOpenWithCallbacks or AudioFileInitializeWithCallbacks. 
@discussion a function that will be called when AudioFile needs to set the size of the file data. This size is for all of the 
      data in the file, not just the audio data. This will only be called if the file is written to. 
@param  inClientData A pointer to the client data as set in the inClientData parameter to AudioFileXXXWithCallbacks. 
@result      The callback should return the size of the data. 
*/ 

typedef OSStatus (*AudioFile_SetSizeProc)(
          void *  inClientData, 
          SInt64  inSize); 
+0

또한 쓰기 콜백은 다릅니다. const void * 입력 버퍼입니다. – Wojciech