Sto provando a scrivere (cosa dovrebbe essere) una semplice app che ha un gruppo di unità audio in sequenza in un AUGraph e quindi scrive l'output in un file. Ho aggiunto un callback usando AUGraphAddRenderNotify. Ecco la mia funzione di callback:Come scrivere l'output di AUGraph in un file?
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);
}
}
Questo tipo di opere. Il file è riproducibile e riesco a sentire ciò che ho registrato, ma c'è una quantità orribile di elettricità statica che la rende appena udibile.
Qualcuno sa cosa c'è di sbagliato in questo? O qualcuno sa di un modo migliore per registrare l'output di AUGraph in un file?
Grazie per l'aiuto.
I formati di AUGraph e ExtAudioFile (formato dati client) corrispondono? Inoltre, hai bisogno di registrare in tempo reale? – sbooth
Penso che corrispondano. Ho usato lo stesso AudioStreamBasicDescription per configurare tutte le unità audio e creare il file. Non sono sicuro di come effettivamente controllare però. Sai come farlo? Immagino che lo esaminerò. Immagino di non dover registrare in tempo reale, ma esiste un altro modo per farlo? Se non salvi i dati alcuni in tempo reale, allora è perso. – HowsItStack
Credo invece di chiamare 'AUGraphStart' per chiamare' AudioUnitRender' ripetutamente sulla testa del grafico. Penso che il problema con farlo in tempo reale sia che il buffer circolare interno di 'ExtAudioFile' si riempie e perda i dati. – sbooth