Я пытаюсь написать (что должно быть) простое приложение, которое имеет последовательность аудиоустройств последовательно в AUGraph, а затем записывает вывод в файл. Я добавил обратный вызов с помощью AUGraphAddRenderNotify. Вот моя функция обратного вызова:Как написать вывод AUGraph в файл?
OSStatus MyAURenderCallback(void *inRefCon,
AudioUnitRenderActionFlags *actionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
if (*actionFlags & kAudioUnitRenderAction_PostRender) {
ExtAudioFileRef outputFile = (ExtAudioFileRef)inRefCon;
ExtAudioFileWriteAsync(outputFile, inNumberFrames, ioData);
}
}
Этот вид работ. Файл воспроизводится, и я могу слышать, что я записал, но есть ужасное количество статичности, которое делает его едва слышимым.
Кто-нибудь знает, что не так с этим? Или кто-нибудь знает, как лучше записать вывод AUGraph в файл?
Спасибо за помощь.
Соответствуют ли форматы вашего AUGraph и ExtAudioFile (формат данных клиента)? Кроме того, вам нужно записывать в режиме реального времени? – sbooth
Я думаю, они совпадают. Я использовал тот же AudioStreamBasicDescription, чтобы настроить все аудиоустройства и создать файл. Я не уверен, как на самом деле проверить. Вы знаете, как это сделать? Думаю, я посмотрю. Думаю, мне не нужно записывать в реальном времени, но есть ли другой способ сделать это? Если я не сохраню данные, где-то в режиме реального времени, то он будет потерян. – HowsItStack
Я верю, что вместо вызова 'AUGraphStart' вы хотите называть' AudioUnitRender' несколько раз на голове графика. Я думаю, что проблема с этим в реальном времени заключается в том, что внутренний кольцевой буфер ExtAudioFile заполняет и теряет данные. – sbooth