【问题标题】:Can't add render callback to output unit无法将渲染回调添加到输出单元
【发布时间】:2014-06-16 23:15:22
【问题描述】:

我正在编写一个应用程序,它应该混合磁盘中的几种声音并将生成的文件保存到磁盘。我正在尝试使用音频单元。 我使用Apple's MixerHost 作为我的应用程序的基础。它具有连接到远程 I/O 的多通道混音器。当我尝试向远程 IO 添加渲染回调时,出现错误 -10861“无法建立两个节点之间的尝试连接。”当调用 AUGraphConnectNodeInput(...)。 我做错了什么?混合和录制文件到磁盘的正确方法是什么?

回调存根:

static OSStatus saveToDiskRenderCallback(void *inRefCon,
                                     AudioUnitRenderActionFlags *ioActionFlags,
                                     const AudioTimeStamp *inTimeStamp,
                                     UInt32 inBusNumber,
                                     UInt32 inNumberFrames,
                                     AudioBufferList *ioData) 
{
    return noErr;
}

向远程 I/O 单元添加回调:

    AURenderCallbackStruct saveToDiskCallbackStruct;
saveToDiskCallbackStruct.inputProc = &saveToDiskRenderCallback;


result = AUGraphSetNodeInputCallback (
                                      processingGraph,
                                      iONode,
                                      0,
                                      &saveToDiskCallbackStruct
                                      );    

此处出错:

    result = AUGraphConnectNodeInput (
             processingGraph,
             mixerNode,         // source node
             0,                 // source node output bus number
             iONode,            // destination node
             0                  // desintation node input bus number
         );

【问题讨论】:

    标签: ios audio audiounit


    【解决方案1】:

    您对音频单元的工作方式感到困惑。

    节点输入回调(由AUGraphSetNodeInputCallback 设置)和节点输入连接(由AUGraphConnectNodeInput 设置)都位于远程IO 单元的同一输入 侧。看起来您相信输入回调将是您的图形的输出。这是错误的。

    AUGraph 提供了两条路径来馈送 AudioUnit 的输入:

    • 来自另一个上游节点 (AUGraphConnectNodeInput)
    • 或来自自定义回调 (AUGraphSetNodeInputCallback),

    所以你不能同时设置它们,它没有任何意义。

    现在有两种可能

    1) 实时监控

    这不是您所描述的,但从您所在的位置更容易获得。所以我假设你想在处理过程中(实时)收听远程 I/O 上的混音。 然后Read this

    2) 离线渲染

    如果您不打算实时收听(这是我从您的描述中首先了解到的),那么远程 IO 在这里没有任何关系,因为它的目的是与物理输出通信。然后read that。它将 远程 I/O 单元 替换为 通用输出单元。注意图表的运行方式不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-05
      • 2015-08-19
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多