2011-10-26 2 views
2

iOS 5のAUGraphにkAudioUnitSubTypeを追加しようとしていますが、追加してAUGraphInitializeを呼び出すと、エラーコード-10868が返されます(kAudioUnitErr_FormatNotSupported)。iOS5のAUGraphにkAudioUnitSubType_Varispeedを追加します。

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 

あなたがからの接続を見ることができるように:私は私が手グラフは以下の初期化直前のグラフの状態を印刷する場合

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

:ここ

は私AudioComponentDescriptionですリモートIOユニットへのVarispeedユニットは非常に奇妙なフォーマットを示しています。もっと奇妙なのは、私が開発したデバイスとは対照的に、シミュレータ上でこれを実行すると、表示されるフォーマットは16ビットのリトルエンディアンの整数で、デインタリーブされているということです。 Varispeedユニットの入力または出力スコープでストリームフォーマットを設定しようとすると、同じエラーコード-10868が発生します。

Iは、入力範囲の各マルチチャンネルミキサーバス上のストリーム形式として設定い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; 

Iは、オーディオユニットの正規の形式を使用していない理由私があるためであります8.24 Signed Integerサンプルを出力するように設定できないAVAssetReaderからサンプルを読み込みます。

グラフからVarispeedユニットを取り出し、マルチチャネルミキサーユニットをリモートIOユニットの入力に接続すると、グラフが初期化され、正常に再生されます。私が間違っていることは何か考えていますか?

答えて

2

ioユニットが32bit浮動小数点を要求しており、varispeedユニットから8.24を受信して​​いるため、フォーマットエラーです。

あなたは、このような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)); 
関連する問題