我知道这是一个非常广泛的话题,但是我一直在玩演示和自己的测试,不确定我是否正确攻击了问题。因此,任何可能从哪里开始的潜在客户都将不胜感激。

目的是根据用户的设置使应用程序生成一些合成的声音。 (这不是唯一的应用程序函数,我不是在这里重新创建Korg,而是合成器。)用户将设置典型的合成器设置(例如Wave,Reverb等)。然后在音符播放时选择,可能带有音高和速度修饰符。

我已经使用音频单元和远程装置进行了一些比赛,但只能理解我在做什么。在我走得太远的兔子洞之前,我想知道我是否在正确的球场上。我知道音频合成器将是低水平的,但是我希望我可以使用一些更高级别的库。

如果您对从哪里开始,以及我应该阅读更多的iOS技术,请告诉我。

谢谢!

编辑:让我更好地总结问题。

是否有为iOS构建的合成器库吗? (商业或开源 - 我没有发现很多搜索,但也许我缺少它。)

是否有更高级别的API可以帮助生成缓冲区更容易?

假设我已经可以生成缓冲区,是否有一种比远程音频单元提交这些缓冲区的更好 /更简单的方法?

有帮助吗?

解决方案

这是一个非常好的问题。我有时会问自己同样的事情,我总是最终使用 MOMU工具包 来自斯坦福大学的家伙。该库提供了一个不错的回调函数,该功能连接到Audiits/AudiotoolBox(不确定),因此您所关心的只是设置采样率,缓冲区大小和音频样本的位深度,并且您可以轻松合成/综合/处理您在回调功能中喜欢的任何内容。

我也推荐 iOS的合成工具包(STK) 这也由斯坦福大学的GE Wang发布。真正酷的东西可以合成 /处理音频。

每次Apple发布新的iOS版本时,我都会检查新文档,以找到一种更好(或更简单的)综合音频的方法,但始终没有运气。

编辑:我想添加一个链接到Audiograph源代码: https://github.com/tkzic/audiograph 这是一个非常有趣的应用程序,可以显示汤姆·Zicarelli(Tom Zicarelli)制造的录音带的潜力。该代码真的很容易遵循,也是一个了解这一点的好方法 - 有些人会说 - 卷曲 处理iOS中低级音频的过程。

其他提示

迅速和客观c

有一个很棒的开源项目,可以通过Objective-C和Swift进行视频和教程记录。

Audiokit.io

将缓冲区带到声卡的最低级别是通过音频API,尤其是远程音频。这是一堆胡言乱语,但是网络周围有一些示例。 http://atastypixel.com/blog/using-remoteio-audio-unit/ 是一个。

我认为还有其他方法可以使用Avoundation框架来填充缓冲区,但是我从未做过它们。

另一种方法是将OpenFrameWorks用于所有音频内容,但这也假设您想在OpenGL中进行绘图。但是,如果您想以另一种方式进行绘画,那么拆除AudiOunit的实现就不应该是太多问题。这种特殊的实现很不错,因为它将所有内容都投入到-1..1浮子供您填充。

最后,如果您想在一堆振荡器 /过滤器 /延迟行上跳跃开始,您可以将其连接到OpenFrameWorks音频系统(或使用-1..1 floats的任何阵列)中的任何系统) http://www.maximilian.strangeloop.co.uk.

有两个部分:首先,您需要生成合成音频的缓冲区 - 这几乎是平台 - 不合时宜的,您需要对音频合成的良好理解才能编写此部分。第二部分是将这些缓冲区传递给适当的OS特定API,以便实际播放声音。大多数用于音频播放的API支持双重缓冲甚至多个缓冲区,因此您可以在播放当前缓冲区时综合未来的缓冲区。至于要使用哪种iOS API,这可能取决于您为应用程序拥有哪种整体体系结构,但这确实很容易。合成部分是您需要完成大部分工作的地方。

我知道这有点古老,但这似乎是我错误的方法 - 您可能要做的就是找到一个音频单元合成器,该合成器可以建模您想做的更改。其中有许多,其中有些是开源的,有些可能是可授权的 - 并从您的代码中托管音频单元。上面描述的机制似乎可以正常工作,但是它们并没有真正针对iOS平台进行优化。

我知道这个话题是古老的,我很惊讶iOS的情况在音频方面仍未得到改善。

但是,地平线上有一条银线:iOS 6支持Webaudio API。我成功地设法拥有一个不错的poly Phone合成器,其中JavaScript中只有几行。至少有一些基本的东西,例如开箱即用的振荡器:

https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html

(只是在许多人中选择一个例子)

我知道这是一个古老的帖子,但是请查看 惊人的音频引擎.

令人惊叹的音频引擎是用于iOS音频应用程序的复杂框架,因此您不必这样做。它的设计非常易于使用,并代表您处理iOS音频的所有复杂性。

这构成了iOS的AudioBus的开发商。

基本上,这将是音频队列和音频单元之间的折腾。如果您需要接近实时,例如,如果您需要处理麦克风输入,则音频单元是实现最小延迟的方法。

但是,在渲染回调中可以进行多少处理是有限制的 - 即在超高优先级系统线程上到达大量数据。而且,如果您尝试在此线程中执行太多操作,它将整个操作系统。

因此,您需要在此回调中对Smart进行编码。很少有陷阱,例如使用nslog和访问没有非原子的另一个对象的属性(即它们将隐式创建锁)。

这是Apple建立更高级别框架(AQ)来淘汰这一低级棘手业务的主要原因。 AQ使您可以接收流程并在线程上吐出音频缓冲区,而导致延迟无关紧要。

但是,您可以进行大量处理,尤其是当您使用加速框架来加快数学操作时。

实际上,只需使用音频单元 - 从乔布罗(Jonbro)给您的链接开始。即使AQ是一个更高级别的框架,它也更令人头疼,而远程音频单元是此作业的正确工具。

我一直在使用开放框架和斯坦福STK合成库中的音频输出示例来处理我的iOS合成器应用程序。

我一直在尝试 补品音频合成器库. 。清洁,易于理解的代码,并准备编译MACOS和iOS示例。

在某个时候,我开始使用Scratch的简单C代码生成自己的缓冲区,以执行正弦发生器,ADSR和延迟等基本功能,这非常令人满意。

我将浮子阵列推到了tonic的对应物上的扬声器, 诺瓦卡因.

例如 256K 将它们用于其生成的所有音乐。

刚刚发现 Avaudiounitsampler, ,这是一种在不同潜伏期不同音调下基于播放样本音频的超级令人愉悦的方式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top