问题标签 [audiounit]

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 回答
171 浏览

ios - 如何为 AudioGraph 添加固定增益?

是否有可以在 AudioGraph 中应用固定增益的 AudioUnit?还有其他替代方法吗?

0 投票
2 回答
345 浏览

ios - 带有 RemoteIO 的虚拟仪器应用程序录音功能

我正在为 iOS 开发一个虚拟乐器应用程序,并尝试实现一个录音功能,以便该应用程序可以录制和播放用户使用乐器制作的音乐。我目前正在使用基于 OpenAL 的 CocosDenshion 声音引擎(我自己的一些技巧涉及淡入淡出等)。从我在网上的研究看来,我有两种选择:

  1. 记录用户的输入(即以什么音量播放了哪些音符),以便应用程序可以重新创建声音(但这不能共享/通过电子邮件发送)。
  2. 使用 AudioUnits & 特别是 RemoteIO 破解我自己的低级声音引擎,以便我手动混合所有声音并手动填充最终输出缓冲区,因此可以将所述缓冲区保存到文件中。这将能够通过电子邮件等共享。

我已经实现了一个 RemoteIO 回调来渲染输出缓冲区,希望它能给我以前在缓冲区中播放的数据,但可惜缓冲区总是全 00。

所以我的问题是:有没有比我上面的选项 2 更简单的方法来嗅探/收听我的应用程序发送给扬声器的内容?

在此先感谢您的帮助!

0 投票
1 回答
1227 浏览

c++ - AudioUnit 中的输入缓冲区结构

我编写了一个简单的音频单元,它应该交换立体声源的左右声道。此代码的移植版本在 C 中适用于使用 BASS 库的命令行程序,但我无法让相同的代码在 Xcode 中为 audiounit 工作。

对于例如 {1, 2, 3, 4, 5, 6} 的缓冲区输入,我希望立体声反转为 {2, 1, 4, 3, 6, 5}。

我的代码以这种方式正确地反转了样本,但我听到的只是某种低通滤波,而不是样本的立体声反转。

我的输入缓冲区中的前 4 个值是: 0.000104 0.000101 0.000080 0.000113

输出为:0.000101 0.000104 0.000113 0.000080

我是否误解了输入/输出缓冲区的结构方式?

0 投票
2 回答
2489 浏览

ios - 如何正确填充立体声 AudioBuffer

所以我正在使用 Apple 的MixerHost 示例代码来为立体声合成做一个基本的听力图设置。我在弄清楚如何填充缓冲区切片时遇到了一些麻烦。具体来说,我只在左声道输出音频,右声道是静音的:

这会在左声道播放一个正弦波......音高每 10 秒左右就会改变一次,这是我做错的另一个指标:]

我已经尝试过其他遍历数组的方法。这产生了远离正弦信号的有趣声音。有一次,我在两个通道上都有故障/断断续续的输出,这有点像成功。

如果我检查 AudioBuffer 结构,它确认有 2 个通道,每帧的字节大小为 4。所以每帧有两个 SInt16,对吗?一个用于左声道,一个用于右声道..它们应该是交错的?

请注意,我使用的流格式与 Apple 的示例不同,因为我不知道定点数学。

流格式设置如下:

所以我的问题是,我如何用数据填充像上面设置的立体声缓冲区,以便它正常工作?

谢谢!

0 投票
2 回答
655 浏览

iphone - 从 Springboard 返回后导致通用跳过的 AudioUnits

我在使用 AudioUnits 的应用程序中遇到问题。所有应用程序的音频(包括未通过 AudioUnits 播放的音频)将在退出 Springboard 并返回应用程序后开始跳过。

我将问题分解为一个新的单独测试应用程序。以下是重复它的步骤:

  • 使用 AVAudioPlayer 开始播放音频文件。
  • 创建、删除,然后再创建一个 AudioUnit
  • 退出跳板
  • 返回应用程序
  • 来自 AvAudioPlayer 的音频将开始跳过

这是我使用的一些代码:

请原谅冗长的代码转储,但 AudioUnits 很复杂,我很确定我只是设置它们或不正确地删除它们。

MySoundStream 类:

如果有人能看到我对这个 AudioUnit 做错了什么,那将非常有帮助。

编辑:上传完整的源代码。这里

  1. 按播放声音(可能需要耳机)
  2. 按重启AudioUnit
  3. 返回跳板
  4. 重新进入 TestAudioUnit 应用程序

音频将跳过

0 投票
1 回答
314 浏览

iphone - AUmixer 后的 RemoteIO 回调

在 aumixer 完成之后,在 RemoteIO 上实现回调的正确方法是什么?

如果我使用;

结果 = AUGraphSetNodeInputCallback(mGraph, outputNode,1, &remoteIOCallback);

它没有调用我的函数

如果我使用..

结果 = AudioUnitSetProperty(mIONode, kAudioOutputUnitProperty_SetInputCallback, kAudioUnitScope_Input, 1, &remoteIOCallback, sizeof(remoteIOCallback));

它调用我的回调,但是当我尝试创建指向 ioData 的指针时

AudioSampleType *inData = (AudioSampleType *) ioData->mBuffers[0].mData;

它崩溃了。

我根本看不到问题所在。这是缓冲区的问题吗?但是我没有为缓冲区分配任何东西,只是一个指向它的指针。

干杯

0 投票
3 回答
392 浏览

iphone - iPhone:如何在 iPod 声音上播放声音?

我试图在 iPod 音乐上播放声音,但是当我进入我的应用程序时,iPod 声音会自动静音。我试过:

但可能是因为我使用 RemoteIO/Audio Units 播放我的声音,这没有效果(不确定这是否是原因,但它肯定什么都没做......声音仍然停止)

我错过了什么?

0 投票
2 回答
1151 浏览

iphone - 启动 AVAssetReader 停止对远程 I/O AudioUnit 的回调

我正在使用 AVAssetReader 从 iPod 库中读取音频。(见这里)然后我获取读取缓冲区并通过 AudioUnit 播放它。我正在尝试在播放时折射代码以在音频中流式传输。但是,如果 AVAssetReader 正在运行,AudioUnit 将停止接收对其 kAudioUnitProperty_SetRenderCallback 的调用。

我已将代码简化为仅在 AudioUnits 回调中播放文件...

然后我调用此代码并且 AudioUnit 停止播放,不再调用 UnitRenderCB。

我正在使用与此处列出的相同的 AudioUnit 设置

AVAssetReader 是否使用 AudioUnit 系统?有没有办法让它们一起工作?

0 投票
1 回答
2253 浏览

ios - 您将如何将 iPod 库资产连接到音频队列服务并使用音频单元进行处理?

我需要处理来自 iPod 库的音频。为 iPod 库读取资产的唯一方法是 AVAssetReader。要使用音频单元处理音频,它需要采用立体声格式,因此我有左右声道的值。但是当我使用 AVAssetReader 从 iPod 库中读取资产时,它不允许我以立体声格式将其取出。它以交错格式出现,我不知道如何分成左右音频通道。

要到达我需要去的地方,我需要执行以下操作之一:

  1. 让 AVAssetReader 给我一个立体声格式的 AudioBufferList
  2. 将交错数据转换为非交错数据以获得我需要的立体声输出
  3. 通过音频队列服务发送它以获得我需要的自动缓冲

我似乎受限于现有的公共 API 可以做什么以及 AVAssetReader 在读取 iPod 库资产时所支持的功能。你会怎么办?如何获得需要使用音频单元处理的内容?

我的另一个限制是我无法一次读取整首歌曲,因为它会填满内存并使应用程序崩溃。这就是我想使用音频队列服务的原因。如果我可以将 iPod 库中的资产视为立体声格式的流,那么我的所有要求都会得到满足。

这甚至可以做到吗?是否有任何文档、博客或文章可以解释如何做到这一点?

0 投票
1 回答
1561 浏览

ios - AudioUnitInitialize 失败,错误代码 1852008051

我正在尝试使用 iOS 中的音频单元进行录制。
我将 AudioComponentDescription 中的 componentSubType 设置为kAudioUnitSubType_VoiceProcessingIO
那么 AudioUnitInitialize 和 AudioOutputUnitStart 的错误代码都是1852008051('ncfs')
我在文档中找不到此错误代码。
但是当我将kAudioUnitSubType_VoiceProcessingIO转为kAudioUnitSubType_RemoteIO时,一切都很好。
谁能告诉我从 VoiceProcessingIO 更改为 RemoteIO 时应该修改什么?