1

Is it possible to set the audio format for an AUGraphAddRenderNotify callback? If not, is it possible just to see what the format is at init time?

I have a very simple AUGraph which plays audio from a kAudioUnitSubType_AudioFilePlayer to a kAudioUnitSubType_RemoteIO. I'm doing some live processing on the audio so I've added a AUGraphAddRenderNotify callback to the graph to do it there. This all works fine, but when I initialise the graph, I need to set up a couple buffers and some other data for my processing, and I need to know what format will be supplied in the callback. (On some devices it's interleaved, on others it's not — this is fine I just need to know).

Here's the setup:

NewAUGraph(&audioUnitGraph);

AUNode playerNode;
AUNode outputNode;

AudioComponentDescription playerDescription = {
    .componentType = kAudioUnitType_Generator,
    .componentSubType = kAudioUnitSubType_AudioFilePlayer,
    .componentManufacturer = kAudioUnitManufacturer_Apple
};

AudioComponentDescription outputDescription = {
    .componentType = kAudioUnitType_Output,
    .componentSubType = kAudioUnitSubType_RemoteIO,
    .componentManufacturer = kAudioUnitManufacturer_Apple
};

AUGraphAddNode(audioUnitGraph, &playerDescription, &playerNode);
AUGraphAddNode(audioUnitGraph, &outputDescription, &outputNode);

AUGraphOpen(audioUnitGraph);

AUGraphNodeInfo(audioUnitGraph, playerNode, NULL, &playerAudioUnit);
AUGraphNodeInfo(audioUnitGraph, outputNode, NULL, &outputAudioUnit);

// Tried adding all manner of AudioUnitSetProperty() calls here to set the AU formats

AUGraphConnectNodeInput(audioUnitGraph, playerNode, 0, outputNode, 0);
AUGraphAddRenderNotify(audioUnitGraph, render, (__bridge void *)self);

AUGraphInitialize(audioUnitGraph);

// Some time later...
// - Set up audio file in the file player
// - Start the graph with AUGraphStart()

I can understand that altering the formats used by the two audio units may not have any effect on the format 'seen' at the point the AUGraph renders into its callback (as this is downstream of them), but surely there is a way to know at init time what that format will be?

Dan Halliday
  • 725
  • 6
  • 22
  • How to use `kAudioUnitSubType_AudioFilePlayer ` unit to play audio file?Could you show you show some sample code? – alpine Apr 07 '16 at 02:10

0 Answers0