Próbuję napisać (co powinno być) prostą aplikację, która ma kilka jednostek audio w sekwencji w AUGraph, a następnie zapisuje dane wyjściowe do pliku. Dodałem wywołanie zwrotne za pomocą AUGraphAddRenderNotify. Oto moja funkcja zwrotna:Jak zapisać wyjście pliku AUGraph do pliku?
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);
}
}
Tego rodzaju prace. Plik można odtwarzać i słyszę to, co nagrałem, ale jest tam strasznie dużo szumu, który sprawia, że jest ledwo słyszalny.
Czy ktoś wie, co jest nie tak z tym? A może ktoś wie o lepszym sposobie zapisywania wyjścia AUGraph do pliku?
Dzięki za pomoc.
Czy formaty plików AUGraph i ExtAudioFile (dane klienta) są zgodne? Czy musisz nagrywać w czasie rzeczywistym? – sbooth
Myślę, że pasują. Użyłem tego samego AudioStreamBasicDescription, aby skonfigurować wszystkie jednostki audio i utworzyć plik. Nie jestem pewien, jak to sprawdzić. Czy wiesz, jak to zrobić? Chyba się nad tym zastanowię. Zgaduję, że nie muszę nagrywać w czasie rzeczywistym, ale czy jest jakiś inny sposób na zrobienie tego? Jeśli nie zapiszę danych w niektórych miejscach w czasie rzeczywistym, to zostaną utracone. – HowsItStack
Wierzę, zamiast wywoływać 'AUGraphStart', który chcesz nazwać' AudioUnitRender' wielokrotnie na początku wykresu. Myślę, że problem z robieniem tego w czasie rzeczywistym polega na tym, że wewnętrzny bufor pierścieniowy ExtAudioFile napełnia się i traci dane. – sbooth