AudioUnit, configurer un AUGraph pour convertir et récupérer un callback?
yoann
Membre
Salut la liste,
Je viens de poster une question sur StackOverflow ne sachant pas s'il y a grand monde ici qui touche à l'audio...
Cependant si quelqu'un sait répondre, il est le bienvenu ^^
Le lien :
http://stackoverflow...t-to-a-callback
Le contenu :
Je viens de poster une question sur StackOverflow ne sachant pas s'il y a grand monde ici qui touche à l'audio...
Cependant si quelqu'un sait répondre, il est le bienvenu ^^
Le lien :
http://stackoverflow...t-to-a-callback
Le contenu :
On Mac OS X, I try to get a audio stream from a user selected sound card and do some stuff with PCM buffer coming out.
At this time, I can access to the good device and use a AudioDeviceIOProc to get buffer at the hardware native stream description.
Now I want to use a AUGraph with my selected device to convert my buffer to a custom ASBD and get it on a AURenderCallback.
Here is my setup code (NSString* deviceUID and AudioStreamBasicDescription streamDescription are pass in argument to my setup function):
[/size][/size][/size]<br /> [color=#000000][size=4] [/size][/color][color=gray][size=4]// get the AudioDeviceID[/size][/color]<br /> [color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AudioValueTranslation[/size][/color][color=#000000][size=4] avt [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]{&[/size][/color][color=#000000][size=4]deviceUID[/size][/color][color=#000000][size=4],[/size][/color]<br /> [color=#000000][size=4] [/size][/color][color=#00008B][size=4]sizeof[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]deviceUID[/size][/color][color=#000000][size=4]),[/size][/color]<br /> [color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]_inDevice[/size][/color][color=#000000][size=4],[/size][/color]<br /> [color=#000000][size=4] [/size][/color][color=#00008B][size=4]sizeof[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]_inDevice[/size][/color][color=#000000][size=4])};[/size][/color]<br /> [color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]UInt32[/size][/color][color=#000000][size=4] avt_len [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#00008B][size=4]sizeof[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]avt[/size][/color][color=#000000][size=4]);[/size][/color]<br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AudioHardwareGetProperty[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]kAudioHardwarePropertyDeviceForUID[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]avt_len[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]avt[/size][/color][color=#000000][size=4]);[/size][/color]<br /> <br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]NewAUGraph[/size][/color][color=#000000][size=4](&[/size][/color][color=#000000][size=4]_inputGraph[/size][/color][color=#000000][size=4]);[/size][/color]<br /> <br /> [color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AudioComponentDescription[/size][/color][color=#000000][size=4] streamConverterDesc[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] streamConverterDesc[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]componentType [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] kAudioUnitType_FormatConverter[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] streamConverterDesc[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]componentSubType [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] kAudioUnitSubType_AUConverter[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] streamConverterDesc[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]componentManufacturer [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] kAudioUnitManufacturer_Apple[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] streamConverterDesc[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]componentFlags [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] streamConverterDesc[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]componentFlagsMask [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#800000][size=4]0[/size][/color][color=#000000][size=4];[/size][/color]<br /> <br /> [color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AUNode[/size][/color][color=#000000][size=4] streamConverterNode[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AUGraphAddNode[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]_inputGraph[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]streamConverterDesc[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]streamConverterNode[/size][/color][color=#000000][size=4]);[/size][/color]<br /> <br /> [color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AudioUnit[/size][/color][color=#000000][size=4] streamConverterUnit[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AUGraphNodeInfo[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]_inputGraph[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] streamConverterNode[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] NULL[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]streamConverterUnit[/size][/color][color=#000000][size=4]);[/size][/color]<br /> <br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AudioUnitSetProperty[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]streamConverterUnit[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] kAudioUnitProperty_StreamFormat[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] kAudioUnitScope_Output[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#800000][size=4]0[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]streamDescription[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#00008B][size=4]sizeof[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]streamDescription[/size][/color][color=#000000][size=4]));[/size][/color]<br /> <br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AudioUnitSetProperty[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]streamConverterUnit[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] kAudioOutputUnitProperty_CurrentDevice[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] kAudioUnitScope_Global[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#800000][size=4]0[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]_inDevice[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#00008B][size=4]sizeof[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]_inDevice[/size][/color][color=#000000][size=4]));[/size][/color]<br /> <br /> [color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AudioComponentDescription[/size][/color][color=#000000][size=4] streamReaderDesc[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] streamReaderDesc[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]componentType [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] kAudioUnitType_Output[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] streamReaderDesc[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]componentSubType [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] kAudioUnitSubType_GenericOutput[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] streamReaderDesc[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]componentManufacturer [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] kAudioUnitManufacturer_Apple[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] streamReaderDesc[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]componentFlags [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] streamReaderDesc[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]componentFlagsMask [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#800000][size=4]0[/size][/color][color=#000000][size=4];[/size][/color]<br /> <br /> [color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AUNode[/size][/color][color=#000000][size=4] streamReaderNode[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AUGraphAddNode[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]_inputGraph[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]streamReaderDesc[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]streamReaderNode[/size][/color][color=#000000][size=4]);[/size][/color]<br /> <br /> [color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AudioUnit[/size][/color][color=#000000][size=4] streamReaderUnit[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AUGraphNodeInfo[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]_inputGraph[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] streamReaderNode[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] NULL[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]streamReaderUnit[/size][/color][color=#000000][size=4]);[/size][/color]<br /> <br /> [color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AURenderCallbackStruct[/size][/color][color=#000000][size=4] callback[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] callback[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]inputProc [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]EIRenderCallback[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] callback[/size][/color][color=#000000][size=4].[/size][/color][color=#000000][size=4]inputProcRefCon [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] self[/size][/color][color=#000000][size=4];[/size][/color]<br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AudioUnitSetProperty[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]streamReaderUnit[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] kAudioOutputUnitProperty_SetInputCallback[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] kAudioUnitScope_Output[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#800000][size=4]0[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]callback[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#00008B][size=4]sizeof[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]callback[/size][/color][color=#000000][size=4]));[/size][/color]<br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AudioUnitSetProperty[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]streamReaderUnit[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] kAudioUnitProperty_StreamFormat[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] kAudioUnitScope_Output[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#800000][size=4]0[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#000000][size=4]&[/size][/color][color=#000000][size=4]streamDescription[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#00008B][size=4]sizeof[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]streamDescription[/size][/color][color=#000000][size=4]));[/size][/color]<br /> <br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AUGraphConnectNodeInput[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]_inputGraph[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] streamConverterNode[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#800000][size=4]1[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] streamReaderNode[/size][/color][color=#000000][size=4],[/size][/color][color=#000000][size=4] [/size][/color][color=#800000][size=4]0[/size][/color][color=#000000][size=4]);[/size][/color]<br /> <br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AUGraphOpen[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]_inputGraph[/size][/color][color=#000000][size=4]);[/size][/color]<br /> [color=#000000][size=4] osstat [/size][/color][color=#000000][size=4]=[/size][/color][color=#000000][size=4] [/size][/color][color=#2B91AF][size=4]AUGraphInitialize[/size][/color][color=#000000][size=4]([/size][/color][color=#000000][size=4]_inputGraph[/size][/color][color=#000000][size=4]);[/size][/color]<br /> <br />
And I start my AUGraph later.
Actually I got a error -50 on each AudioUnitSetProperty with streamConverterUnit.
I would like to have a feedback from people used to CoreAudio, is this setup flow is good? Why this error -50 and what should I do to finish on a working setup?
Best regards, Yoann
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses