使用iOS 3d混音器

时间:2011-06-20 18:33:54

标签: iphone ios audiounit

我有一个AUGraph设置,相当简单,多通道混音器连接到I / O单元。通过回调函数访问回放,一切正常。

我正在尝试切换到3D混音器而不是多声道混音器。所以我将参数从kAudioUnitSubType_MultiChannelMixer切换到kAudioUnitSubType_AU3DMixerEmbedded,并将所有其他设置保持不变。

结果是一种高亢的呜呜声似乎开始听起来像是什么东西然后变成了呜呜声。我已经浏览了每个3D混音器单元的parameters并将它们设置为默认值,但没有任何变化。打开和关闭k3DMixerParam_Enable参数确实可以在静音和取消静音播放时起作用。

我可能错过了哪些设置?或者知道在哪里找到工作的3D混音器的例子?

3 个答案:

答案 0 :(得分:3)

正如已经指出的那样,3D混音器需要单声道输入。但您还必须使用UInt16作为输入样本数据类型。这是一个有效的AudioStreamBasicDescription:

AudioStreamBasicDescription streamFormat = {0};
size_t bytesPerSample = sizeof (UInt16);

streamFormat.mFormatID          = kAudioFormatLinearPCM;
streamFormat.mFormatFlags       = kAudioFormatFlagsCanonical;
streamFormat.mBytesPerPacket    = bytesPerSample;
streamFormat.mFramesPerPacket   = 1;
streamFormat.mBytesPerFrame     = bytesPerSample;
streamFormat.mChannelsPerFrame  = 1;
streamFormat.mBitsPerChannel    = 8 * bytesPerSample;
streamFormat.mSampleRate        = graphSampleRate;

// Set the input stream format of the desired 3D mixer unit audio bus
AudioUnitSetProperty (
                      mixerUnit,
                      kAudioUnitProperty_StreamFormat,
                      kAudioUnitScope_Input,
                      audioBus,
                      &streamFormat,
                      sizeof (streamFormat)
                      );

答案 1 :(得分:1)

所有答案都已提及:iOS上的3D混音器需要单声道输入。

在iOS 8 / Xcode 6上,不推荐使用规范格式的概念,我发现这个(仅限于此)单声道流格式描述可用作3D混音器输入总线流格式说明:

AudioStreamBasicDescription monoStreamFormat = {0};
monoStreamFormat.mSampleRate        = sampleRate;
monoStreamFormat.mFormatID          = kAudioFormatLinearPCM;
monoStreamFormat.mFormatFlags       = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
monoStreamFormat.mBitsPerChannel    = 16;
monoStreamFormat.mChannelsPerFrame  = 1;
monoStreamFormat.mFramesPerPacket   = 1;
monoStreamFormat.mBytesPerPacket    = 2;
monoStreamFormat.mBytesPerFrame     = 2;

应设置采样率,然后从AVAudioSession获得。

在连接到3D混音器输入的音频单元的输出上设置此格式。这可能是一个AUConverter单位...

但是,请注意,这尚未针对< iOS 8。

答案 2 :(得分:0)