问题标签 [remoteio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
118 浏览

ios - AudioOutputUnitStart() 和 RemoteIO 的渲染回调之间的时间差异

这是一个关于时间的非常“细节”问题......

我正在使用 iOS 的 RemoteIO 音频单元来做事。只是想知道系统究竟是如何处理时间的:在调用 AudioOutputUnitStart() 之后,该单元应该“打开”,然后渲染回调将被下游单元拉取。请允许我猜测:

可能性1:下一次渲染回调发生在AudioOutputUnitStart()执行之后,然后继续

可能性2:系统有自己的render回调节奏。调用 AudioOutputUnitStart() 后,下一个渲染回调捕获系统的“下一个”滴答声之一,然后从那里开始

1 还是 2?还是有 3 个?提前致谢!

0 投票
0 回答
635 浏览

core-audio - iOS 中的多路音频输入

我们一直在使用 Core Audio 中的 AudioUnits。它同时是一个非常强大的音频框架,也是记录最差的框架之一,使用它既令人愉悦又令人沮丧。

我们想要完成一些我们知道 iPad 自 iOS 6.0 以来就能够做到的事情——多音频输入。

到目前为止 - 从 2012 年的开发者谈话中 - 看来您必须将音频会话设置为 MultiRoute。我们已经做到了。如果我从键盘插入声卡。我可以看到有两个输入。伟大的。然后我们被告知需要在远程 I/O 单元上设置 ChannelMap。

到什么?嗯......这就是它变得模糊的地方。我们需要将所有不想设置为 -1 的通道以及我们想要设置为 0 和 1 的通道(用于立体声输入还是用于单声道?)。

我们尝试这个并且......什么都没有。声音仍然在“最后获胜”的原则中发挥作用。麦克风,如果一切都插上,声卡,如果那是插入的。但我们不能在它们之间切换。

此设置代码始终在列出的其他功能之前运行

然后,我们有一个远程 I/O 并设置了相关的听力图。这已经过测试并且效果很好。但是我们需要能够设置它从哪里拉声音。

我试图这样做,但它不仅没有任何效果......没有任何反应。

我错过了什么吗?

据我所知,根本没有任何关于此的文档。也没有任何代码示例。

我希望你能帮助我们。

0 投票
1 回答
228 浏览

ios - 如何在不使用 AudioUnit 的回调的情况下播放音频

我使用 AudioUnit 来录制和播放 8 KHz 采样率和 8 位音频采样的音频。我使用来自以下来源的示例:https ://github.com/fuxx/MicInput

播放部分基于回调模式。使用这种方法,我无法控制何时播放音频,Core Audio 在需要播放更多音频数据时调用回调。

问题是,我从网络获取音频数据,因此不能保证为下一次回调准备好音频数据。有时,回调会错过来自网络的音频数据,因此会有大约 20 毫秒的间隙,这听起来像是点击。

是否可以在不等待回调的情况下立即渲染音频?使用 AudioQueue 可以通过调用AudioQueueEnqueueBuffer(),我不知道如何使用 AudioUnit。我希望你能帮助我。

0 投票
2 回答
963 浏览

ios - AudioUnitRender Error -50 含义

我在 AudioUnitRender 调用中收到错误 -50。我的音频单元只是一个从麦克风获取样本的 RemoteIO 单元。错误-50是什么意思?

0 投票
1 回答
130 浏览

ios - AudioUnitRender 错误 -50 带有奇数长度的缓冲区

我有一个配置了 AVAudioSessionCategoryPlayAndRecord 的 RemoteIO 单元。我在其中发现了一些奇怪的行为。我打开应用程序,并在 audioUnit 完全初始化之前立即关闭它(它实际上在后台初始化,因为我太早退出应用程序)。接下来,我将应用程序带到前台并立即重新启动,我看到 AudioUnitRender 连续失败并出现错误 -50。我发现 inNumberFrames 是 1115,只要这个数字是奇数,它就会失败。

}

奇怪的是,如果我在 AudioUnitRender 调用中将 inNumberFrames 硬编码为 1114,它就会成功!有谁知道发生了什么?模式是应用程序从后台恢复时,有一个路由更改通知,然后回调中的第一个样本长度为 1114 帧,但它旁边的样本有 1115 帧失败。

0 投票
0 回答
105 浏览

ios - 远程 IO 音频单元未从扬声器或远程流中捕获音频

我正在使用以下代码录制音频并将其写入文件

在我的应用程序中,我有使用 webRTC 的视频通话功能。上面的代码与麦克风音频一起工作正常,麦克风音频被正确录制,但我无法录制扬声器声音(远程音频流)。是否可以在同一个文件中同时录制声音(麦克风和扬声器)?如果是,那么如何修改代码以便它也可以录制来自内部 iphone 扬声器的声音。

0 投票
1 回答
177 浏览

swift - CoreAudio:如何检测RemoteIO后面没有设备而不启动它?

我正在尝试kAudioUnitSubType_RemoteIO在没有麦克风的 Mac 上使用 Catalyst 上的单元。

问题是,总线 1(即输入)的整个初始化都很好,包括设置格式,甚至启用总线,但随后它失败了,出现了一些甚至没有在osstatus.comAudioOutputUnitStart(unit)上列出的模糊错误。-66628

但是,如果我仅使用输出总线 0 启动设备,则它运行良好并播放我的音频。

那么,有没有一种简单的方法可以在没有枚举所有设备的情况下检测 RemoteIO 后面没有设备的情况?只需尝试一些肯定会失败的功能(设置或获取参数?)。

这是我的代码:

所以它通过了所有这些,并且只在OSStatus(-66628)这里失败:

我认为在尝试启动设备之前必须有某种方法来检测设备的缺失。

编辑:理想情况下,我正在寻找一种跨平台的方式(ios/macOS)

0 投票
0 回答
55 浏览

ios - RemoteIO 单元去除背景噪音

有没有办法像 Apple 在通话期间在 AirPods 中那样从来自麦克风(RemoteIO 单元)的音频样本中去除背景噪音?哪个 AudioUnit 最有效地实现这一目标?

0 投票
0 回答
11 浏览

ios - 具有声音识别功能的 RemoteIO 故障

我的应用正在使用 RemoteIO 录制音频。它不进行任何播放。RemoteIO 似乎与 iOS14 中的新声音识别功能广泛兼容,但我在首次启用声音识别时看到了一个小故障。

如果我的应用程序已启动并初始化 RemoteIO,然后打开声音识别(例如通过控制中心),则此后不会调用 RemoteIO 输入回调,直到我拆除音频单元并将其重新设置。所以类似于以下内容:

  • 启动应用程序
  • RemoteIO已初始化并正在工作,可以记录
  • 通过设置或控制中心小部件打开声音识别
  • 使用已设置的 RemoteIO 开始录制
  • 录音回调不再被调用
  • 虽然没有看到输入回调,但 kAudioOutputUnitProperty_IsRunning 报告为 true,因此音频单元认为它处于活动状态
  • 拆下音频单元
  • 重新设置音频单元
  • 录音作品
  • 缓冲区大小已更改,反映了对声音识别功能的音频会话的一些影响

我还注意到,当启用声音识别时,我看到几个(通常是 3 个)AVAudioSession.routeChangeNotifications 快速连续。在设置 RemoteIO 时禁用声音识别时,我看不到此问题。我正在分配我自己的缓冲区,所以它们的大小不是问题。

这里会发生什么?我没有正确处理路线变更吗?我似乎没有可靠的事件序列来了解何时重置音频单元。


我在这里找到的唯一解决方法是破解一个计时器,该计时器在开始录制后不久检查回调活动,如果没有看到回调活动,则重置音频单元。总比没有好,但不是超级可靠。

0 投票
1 回答
42 浏览

ios - AudioToolBox AudioConverterFillComplexBuffer 实现文件不存在

我正在使用实时音频渲染,Audio Unit RemoteIO我需要进行采样率转换,以确保我的渲染与硬件规格的采样率相同。例如。iPhone 12 的采样率为 48khz,但 iPhone 8 的采样率为 44.1khz。

要进行此采样率转换,我正在使用AudioConverterFillComplexBuffer方法。但是有一个问题。为了确保我没有得到任何欠载,我想检查AudioConverterFillComplexBuffer方法源代码以查看内存分配是否是使用new关键字进行的。这是一个要求,因为 mem alloc 是阻塞的,它不应该在远程 io 回调中使用。

有没有办法AudioConverterFillComplexBuffer从源代码访问函数AudioToolBox?在 xcode 中,我只能看到标题。