是否可以设置AUGraphAddRenderNotify
回调的音频格式?如果没有,是否可以在初始时看到格式是什么?
我有一个非常简单的AUGraph,播放从kAudioUnitSubType_AudioFilePlayer
到kAudioUnitSubType_RemoteIO
的音频。我正在对音频进行实时处理,因此我已在图表中添加了AUGraphAddRenderNotify
回调功能。这一切都很好,但是当我初始化图形时,我需要为我的处理设置一些缓冲区和一些其他数据,我需要知道回调中将提供什么格式。 (在某些设备上它是交错的,而在其他设备上却不是 - 这很好,我只需要知道)。
以下是设置:
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()
我可以理解,改变两个音频单元使用的格式可能对格式'看到'在AUGraph
呈现回调的时候(因为这是它们的下游),但肯定有一种方法可以在初始化时知道该格式是什么?