AudioUnit, configurer un AUGraph pour convertir et récupérer un callback?

yoannyoann Membre
juillet 2012 modifié dans Objective-C, Swift, C, C++ #1
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 :








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]{&amp;[/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]&amp;[/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]&amp;[/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]&amp;[/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](&amp;[/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]&amp;[/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]&amp;[/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]&amp;[/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]&amp;[/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]&amp;[/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]&amp;[/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]&amp;[/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]&amp;[/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]&amp;[/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]&amp;[/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


Réponses

  • Actually est un faux ami. Je suppose que tu voulais dire "actuellement" = "Currently".
  • C'est vrai, j'y pense jamais, cependant le "en fait" passe quand même dans la phrase, on perd pas vraiment le sens.
  • Je n'avais pas vu ce sujet en juillet. Est-il toujours d'actualité? Je me débrouille mieux avec Core Audio maintenant...
  • Projet fini et livré pour ma part :-)
Connectez-vous ou Inscrivez-vous pour répondre.