저는 FLAC-ALAC 트랜스 코더를 사용하고 있으며 ExtAudioFile을 사용하여 ALAC에 쓰기를 시도하고 있습니다. FLAC 라이브러리의 콜백 기반 시스템을 사용하여 FLAC 파일을 읽었습니다. FLAC 파일의 모든 프레임에서 함수 호출이 발생합니다. 다음과 같이 그 전화 내, 내 버퍼를 설정하고 ExtAudioFileWrite 코드를 호출 :ExtAudioFileWrite inNumberFrames 매개 변수에 적절한 값은 무엇입니까?
AudioBufferList * fillBufList;
fillBufList = malloc(sizeof *fillBufList + (frame->header.channels - 1) * sizeof fillBufList->mBuffers[0]);
fillBufList->mNumberBuffers = frame->header.channels;
for (int i = 0; i < fillBufList->mNumberBuffers; i++) {
fillBufList->mBuffers[i].mNumberChannels = 1; // non-interleaved
fillBufList->mBuffers[i].mDataByteSize = frame->header.blocksize * frame->header.bits_per_sample/8;
fillBufList->mBuffers[i].mData = (void *)(buffer[i]);
NSLog(@"%i", fillBufList->mBuffers[i].mDataByteSize);
}
OSStatus err = ExtAudioFileWrite (outFile, 1, fillBufList);
이제, 마지막 줄에 숫자 1이 내가 한 프레임 있다고 생각하기 때문에 내가 선택한 매직 넘버의 무언가이다 FLAC 파일의 해당 프레임은 해당 ALAC 파일의 한 프레임과 일치 할 수 있지만이 경우는 그렇지 않습니다. ExtAudioFileWrite를 호출 할 때마다 오류 값이 -50 (사용자 매개 변수 목록의 오류)을 반환합니다. 명백한 범인은 frame 매개 변수에 제공하는 값입니다.
나는 무엇을 제공해야합니까?
아니면 잘못된 나무를 짖고 있습니까?
(사이드 노트 : param 관련 오류 값에도 불구하고 실제 문제는 버퍼 설정 일 수 있으므로 어떤 일이 발생하는지 확인하기 위해 제로 아웃 된 더미 버퍼를 mallocing하려고했습니다.)
더 많은 연구와 연구에서, "프레임"이라는 용어는 FLAC 문서와 CoreAudio에서 매우 다른 것을 의미 할 수 있습니다. 채널 당 샘플 수를 제공하려고 시도했지만 (frame-> header.blocksize) 여전히 매개 변수 오류가 발생합니다. –