我试图将kAudioUnitSubType添加到iOS 5中的AUGraph,但是当我添加它并调用AUGraphInitialize时,返回错误代码-10868(kAudioUnitErr_FormatNotSupported)。

这是我的AudioComponentDescription:

AudioComponentDescription varispeedDescription;
varispeedDescription.componentType = kAudioUnitType_FormatConverter;
varispeedDescription.componentSubType = kAudioUnitSubType_Varispeed;
varispeedDescription.componentManufacturer = kAudioUnitManufacturer_Apple;
varispeedDescription.componentFlags = 0;
varispeedDescription.componentFlagsMask = 0;

如果在初始化图之前立即打印图的状态,则会得到以下信息:
AudioUnitGraph 0x918000:
    Member Nodes:
    node 1: 'auou' 'rioc' 'appl', instance 0x16dba0 O
    node 2: 'aumx' 'mcmx' 'appl', instance 0x1926f0 O
    node 3: 'aufc' 'vari' 'appl', instance 0x193b00 O
    Connections:
    node   2 bus   0 => node   3 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000C2C)   8.24-bit little-endian signed integer, deinterleaved]
    node   3 bus   0 => node   1 bus   0  [ 2 ch,      0 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    Input Callbacks:
    {0x39a5, 0x172e24} => node   2 bus   0  [2 ch, 44100 Hz]
    {0x39a5, 0x172e24} => node   2 bus   1  [2 ch, 44100 Hz]
  CurrentState:
    mLastUpdateError=0, eventsToProcess=F, isRunning=F

如您所见,从Varispeed装置到Remote IO装置的连接显示了一种非常奇怪的格式。更奇怪的是,如果我在模拟器上而不是在我的开发设备上运行此程序,则显示的格式是16位小端序整数,即已解交织。如果尝试在Varispeed装置的输入或输出范围上设置流格式,则会收到相同的错误代码-10868。

我要在输入范围内的每个多通道混音器总线上设置为流格式的asbd如下:
stereoFormat.mSampleRate = sampleRate;
stereoFormat.mFormatID = kAudioFormatLinearPCM;
stereoFormat.mFormatFlags = kAudioFormatFlagsCanonical;
stereoFormat.mFramesPerPacket = 1;
stereoFormat.mChannelsPerFrame = 2;
stereoFormat.mBitsPerChannel = 16;
stereoFormat.mBytesPerPacket = 4;
stereoFormat.mBytesPerFrame = 4;

我不对音频单元使用规范格式的原因是因为我正在从AVAssetReader读取样本,但无法将其配置为输出8.24有符号整数样本。

如果我从图表中取出Varispeed单元并将Multichannel Mixer单元连接到Remote IO单元的输入,则该图表会初始化并可以正常播放。知道我在做什么错吗?

最佳答案

您的io单元要求32位浮点并从变速单元中接收8.24,因此出现格式错误。

您可以在varispeed的输出上设置流格式,以匹配io单元的输入格式,如下所示:

AudioStreamBasicDescription asbd;
UInt32 asbdSize = sizeof (asbd);
memset (&asbd, 0, sizeof (asbd));

AudioUnitGetProperty(ioaudiounit , kAudioUnitProperty_StreamFormat, kAudioUnitScope_Input, 0, &asbd, &asbdSize);

AudioUnitSetProperty(varipseedaudiounit, kAudioUnitProperty_StreamFormat, kAudioUnitScope_Output, 0, &asbd, sizeof(asbd));

关于iphone - 在iOS5中将kAudioUnitSubType_Varispeed添加到AUGraph,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7905889/

10-11 04:35