【问题标题】:Is it Possible To Play Back Two or More FilePlayer Audio Units in an AUGraph?是否可以在 AUGraph 中播放两个或更多 FilePlayer 音频单元?
【发布时间】:2013-01-05 21:20:10
【问题描述】:

针对iOS,我想同时播放两个.caf音频文件。

我创建了一个简单的 AUGraph,它包含两个“生成器”音频单元(子类型 kAudioUnitSubType_AudioFilePlayer),连接到连接到远程 IO(输出范围)的多通道混音器 AU。

我可以通过连接到混音器的一个 filePlayer AU 成功播放其中一个文件。要播放这两个文件,我只需创建 filePlayer AU 的另一个实例,并以与第一个 filePlayer 相同的方式对其进行配置。

我正在打开音频文件,然后使用kAudioUnitProperty_ScheduledFileIDs 属性和kAudioUnitProperty_ScheduledFileRegion 属性将它们传递到生成器单元。

我一直在检查所有 AU 调用的错误,并且没有返回错误。当我开始绘制图表时,我什么也得不到。

这是我按下“播放”后图表的快照:

AudioUnitGraph 0xF7DA000:
  Member Nodes:
    node 1: 'auou' 'rioc' 'appl', instance 0xf18e3e0 O I
    node 2: 'aumx' 'mcmx' 'appl', instance 0x9d72f50 O I
    node 3: 'augn' 'afpl' 'appl', instance 0x9db6ee0 O I
    node 4: 'augn' 'afpl' 'appl', instance 0x9db6fd0 O I
  Connections:
    node   3 bus   0 => node   2 bus   1  [ 1 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   4 bus   0 => node   2 bus   2  [ 1 ch,  44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved]
    node   2 bus   0 => node   1 bus   0  [ 2 ch,  44100 Hz, 'lpcm' (0x00000C2C) 8.24-bit little-endian signed integer, deinterleaved]
  CurrentState:
    mLastUpdateError=0, eventsToProcess=F, isRunning=T (3)

使用我缺少的多个 filePlayer 音频单元是否有细微差别?我试图以这种方式做的事情可能吗?还是我需要创建音频缓冲区并将其手动提供给 filePlayer 单元?

【问题讨论】:

    标签: ios core-audio


    【解决方案1】:

    你所拥有的应该可以工作,但有几个问题可能已经浮出水面:

    1. 您是否在 each 总线以及输出上将音量参数设置为 > 0? (kMultiChannelMixerParam_Volume 在输入和输出范围内)。这就是我认为的问题所在,因为我相信混音器的所有音量都是从 0 开始的。

    2. 您是否通过在输入范围上设置 kAudioUnitProperty_ElementCount 属性将输入总线计数设置为 2 或更多? (注意:由于您使用的是元素 1 和 2,因此您需要将元素计数设置为 3,或者改用元素 0 和 1。

    【讨论】:

    • 感谢您的建议。我会在输入范围上将kAudioUnitProperty_ElementCount 设置为 6,所以这不是问题。我没想过要检查输入范围的音量参数,但这些参数显示为 1.0。继续调试。
    • 仍在尝试解决这个问题,只是注意到 CAShow() 输出中前两个连接的内存地址是相同的:0x00000029。应该是这样吗?我已经创建了单独的节点和音频单元,所以我不确定为什么这两个地址会相等......?
    • 实际上,我相信0x00000029 只是连接格式标志的十六进制表示。在这种情况下,格式为kAudioFormatFlagIsFloat + kAudioFormatFlagIsPacked + kAudioFormatFlagIsNonInterleaved
    【解决方案2】:

    不确定你是否修复过这个问题。

    看起来您在将混音器连接到 remoteIO 之前将文件播放器连接到混音器。

    始终“向后”连接您的图表,即从 remoteIO 开始,然后通过链返回到您的生成器。我认为由于 AUGraphs 中使用的拉式架构,连接前向不起作用

    【讨论】:

      猜你喜欢
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多