Я работаю над транскодером FLAC-ALAC и пытаюсь использовать ExtAudioFile для записи в ALAC.Я использую систему обратного вызова библиотеки FLAC для чтения в файле FLAC, что означает, что каждый кадр в файле FLAC приводит к вызову функции.В рамках этого вызова я настроил свои буферы и вызвал код ExtAudioFileWrite следующим образом:
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.
Итак, я спрашиваю, какое значение я должен предоставить?
Или я лаю не на том дереве?
(Примечание: я подозревал, что, несмотря на значение ошибки, связанное с параметром, истинной проблемой может быть настройка буфера, поэтому я попытался использовать нулевой буфер-пустышку, чтобы посмотреть, что произойдет. Та же ошибка.) * +1010 *