【问题标题】:Using iOS 3d Mixer使用 iOS 3d 混合器
【发布时间】:2011-06-20 18:33:53
【问题描述】:

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

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

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

我可能错过了什么设置?或者知道在哪里可以找到工作 3d 混合器的示例?

【问题讨论】:

    标签: iphone ios audiounit


    【解决方案1】:

    如前所述,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)
                          );
    

    【讨论】:

    • 虽然这在本例中是隐含的,但大端标志必须关闭。
    【解决方案2】:

    正如所有答案已经提到的: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 Unit...

    但请注意,这尚未针对

    【讨论】:

      【解决方案3】:

      【讨论】:

      猜你喜欢
      • 2015-12-09
      • 2012-06-02
      • 2013-10-06
      • 2023-03-17
      • 2016-10-19
      • 2018-12-27
      • 2016-01-01
      • 2019-12-08
      • 1970-01-01
      相关资源
      最近更新 更多