问题标签 [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.
ios - 使用 ExtAudioFileRead 播放 .caf 音频文件不同步
我的应用程序对来自麦克风输入的音频进行大量数据处理。为了获得“演示模式”,我想基于本地 .caf 音频文件做同样的事情。我设法得到了音频文件。现在我正在尝试使用 ExtAudioFileRead 读取 .caf 文件,然后进行数据处理。
显然有一些我不明白的地方,或者我对 ExtAudioFileRead 做错了,因为这段代码根本不起作用。我有两个主要问题:
- 文件即刻播放。我的意思是 44'100 个样本显然不等于 1 秒。我的 3 分钟音频文件处理在几秒钟内完成......
- 在处理过程中,我需要更新 UI。所以我有一些 dispatch_sync
processaudio
和realtimeUpdate
. ExtAudioFileRead 似乎真的不喜欢这并且它冻结了。谢谢你的帮助。
core-audio - 多通道混音器 + 语音处理 IO 单元
我有一个 AUGraph 设置和工作,它由一个多通道混音器(带有单个单声道输入)组成,将 RemoteIO ( kAudioUnitSubType_RemoteIO
) 单元馈送到扬声器输出。我实现了单输入混音器,以便能够在左右硬件输出通道之间平移我的音频源。这工作得很好。
由于这是一个 VOIP 应用程序,我一直在尝试使用语音处理 IO 单元 ( kAudioUnitSubType_VoiceProcessingIO
) 代替远程 IO 单元 ( kAudioUnitSubType_RemoteIO
)。根据 Apple 的描述,这个单元的行为应该像一个具有一些额外功能的远程 IO 单元......
Voice-Processing I/O 单元(子类型
kAudioUnitSubType_VoiceProcessingIO
)具有远程 I/O 单元的特性,并为双向双工通信增加了回声抑制。它还增加了自动增益校正、语音处理质量调整和静音。这是用于 VoIP(互联网协议语音)应用程序的正确 I/O 单元。
但我注意到,当我切换到语音处理 IO 单元时,我失去了使用混音器进行平移的能力。关于这里发生了什么的任何想法?语音处理 IO 单元本身是单声道的吗?
ios - 音频输出单元的输入回调中允许哪些操作
我正在使用音频输出单元来捕获麦克风数据。我收到通知,通过我使用 kAudioOutputUnit_SetInputCallback 属性设置的回调读取数据,并在回调中通过调用 AudioUnitRender() 读取数据。
最终,我将根据通过分析这些数据提取的一些信息来更新我的应用程序的用户界面。因此,我需要在某个阶段对主队列执行 dispatch_async。分析相当耗时,并且是分块完成的,而不是我从 AudioUnitRender() 获得的那些,因此负载是突发性的。
我的问题是:在输入回调本身的实现中,哪些操作被认为是可以接受的?我发现很多来源都说明了对渲染回调的严格限制(没有内存分配、没有 i/o、没有与其他线程同步等),但根本没有关于输入回调的信息。
如果我遵循与渲染回调相同的规则,我会遇到一些挑战。dispatch_async() 本身是不可取的,因为它会分配内存,而且负载无论如何都是突发的(在某些回合中很容易超过一个渲染周期,而在其他回合中几乎为零)。因此,似乎有必要将我的数据发送到工作线程进行处理并进行 dispatch_async() 调用。但是,我仍然需要管理将数据传递到此工作线程。最简单的方法(在 C++ 中)是使用循环缓冲区,加上互斥体和条件变量,以在数据可用时发出信号。但是,这将需要输入回调来锁定互斥锁,而渲染回调的准则明确不鼓励这种做法。
避免这种互斥锁将带我去无锁循环缓冲区、信号量(POSIX 或 GCD)、自旋锁等,我想知道这对于简单地听麦克风是否有点过分。这些东西缺乏令人震惊的文档,我不知道幕后到底发生了什么。我真的需要担心在我的输入回调实现中等待互斥锁(仅短暂且很少被另一个线程锁定)吗?
ios - What is the unit of measurement of raw audio data from Remote I/O unit?
I am recording the raw audio data using Remote I/O unit as given below:
What is the unit of measurement of this raw audio data ( mBuffers[0].mData, which is a void pointer if you look up the AudioBuffer structure ).
Is it Pascal or milliVolts (mV) ? Thanks in advance.
c - Core Audio - 远程 IO 混乱
我无法解释 iOS 中 remoteIO audiounit 回调的行为。我正在设置一个带有两个回调的 remoteIO 单元,一个作为输入回调,一个作为“渲染”回调。我正在遵循与此美味像素教程中推荐的非常相似的 remoteIO 设置。这是相当长度的设置方法:
我在回调中遇到了奇怪的行为。首先,该playbackCallback
函数根本没有被调用,尽管它的属性设置方式与教程中的相同(教程是由编写 Loopy 应用程序的人编写的)。
其次,输入回调有一个 ioData (audioBufferList) 参数,该参数应该为 null(根据文档),但在每个第二个回调中都在 null 和具有非 nil 值之间翻转。这对任何人都有意义吗?
此外,调用audiounitRender
输入回调(我仍然不理解 API 逻辑和生命周期等方面的语义)会导致 -50 错误,这是非常通用的“坏参数”。这很可能是由于audiobufferlist
交错/去交错、通道数等的无效“拓扑”......但是,我尝试了各种拓扑,但都没有导致错误。这也不能解释奇怪的 ioData 行为。这是供参考的功能:
我相信我的经验可能是由于一些简单的格式错误或可能在错误的示波器上使用了错误的总线或其他一些琐碎的事情(并且很容易在核心音频上下文错误中产生)。但是,因为我基本上对语义和生命周期流(方案?,我什至不知道该用什么词)没有直觉,所以我无法充分调试它。我将非常感谢一位更有经验的核心音频程序员的帮助,这可能会对这种情况有所帮助。
ios - 发布 iOS 音频单元
我正在尝试制作一个应用程序间音频 iOS 应用程序,看起来我的AudioOutputUnitPublish
方法有问题。这是方法:
这是我的 plist 信息:
这是我得到的结果:
我知道 OSStatus 代码 -50 意味着有一个无效参数......但我似乎无法弄清楚哪个是无效的。谁能帮我在这里调试?谢谢!
编辑 :
只是想发布更多代码,以便其他人可以帮助我更多:
我有两个音频单元,希望还有第三个 - MIDISynth(目前处于非活动状态)、MultiChannelMixer 和 RemoteIO 音频单元。我有一个渲染回调附加到混音器音频单元。我猜我在我的 AUGraph 中连接了一些错误(我见过的所有示例都没有将音频渲染回调附加到音频单元,所以这可能是我做错了什么)。希望有人能发现我做错了什么!
这是代码:
core-audio - 仅当插入耳机插孔时远程IO回调上的BAD_ACCESS
我对 remoteIO 音频单元有以下渲染回调。简单地访问参数的第 0 个元素会ioData
导致崩溃。很简单地说,这可以在没有耳机插孔连接的情况下使用,但是一旦我将插孔插入我的 iphone6+,访问缓冲区时就会出现错误的访问错误。
如果我在应用程序运行时插入它,它会崩溃。如果我先插入它,然后构建并运行应用程序,它仍然会崩溃。我检查了是否inNumberFrames
可能基于线路输出连接发生变化,但它始终保持在 512 帧。
显然,AVAudioSession
即使在应用程序启动之前插入耳机,也会调用路由更改回调。我尝试的其中一件事是将 remoteIO 启动延迟到那时。但是,以下代码会产生错误:
错误:
错误:应该分配 (-10849)
ios10 - 运行时的 RemoteIO 配置
我有一个 RemoteIO 单元设置,可以从麦克风获取输入并播放它。只需轻按一下按钮,即可随时启用或禁用播放。我的问题是启用或禁用播放的调用是否需要音频单元停止、取消初始化然后配置或停止并且根本不需要取消初始化?这是我用来在 RIO 运行时在运行时启用或禁用播放的示例代码。
filter - 如何在 AudioGraph 中将 RemoteIO、Mixer 和 Filter 连接在一起?
我对 AudioGraph 中的节点连接有疑问。我的想法是接收输入的声音,用混音器调高音量,用低通滤波器进行滤波。
阅读“Learning Core Audio”一书,我能够连接并操作耦合到滤波器的输入,耦合到混音器的输入,但我无法加入这三个元素。
我还查看了 Apple 提供的示例代码,但为我的项目调整它对我不起作用。我报告我的代码:
所以我寻求帮助。我应该怎么办?我做好的连接?我必须设置其他属性?
感谢您的关注。
ios11 - AVAudioSession RemoteIO playAndRecord
我认为 AVAudioSession API 自 iOS7 以来已经发展了很多,并且经常令人困惑。我的目标是设置一个 RemoteIO 单元,从麦克风录制音频并通过耳机同时播放样本。如果没有耳机,则不要播放。如果存在蓝牙麦克风,则将其作为首选麦克风,而不是耳机麦克风或 USB 麦克风。如果有单独的耳机,则通过它播放样本。如果同一个蓝牙麦克风也有耳机功能,那么避免它播放样本,因为它会环回造成混乱。
什么是正确的 API 来完成这项工作?目前我正在使用以下代码,但它并没有完成全部工作。
我应该改用 AVAudioSessionCategoryMultiRoute 吗?如何选择首选输入和输出?正如我所见,iOS 11 上的所有 API 的行为都不同。