针对iOS,您推荐什么方法(和音频/声音框架)?有人做过这个吗?有代码示例吗?
最好像“笑声轨道”一样构建它,使用音频编辑器将多个吱吱声合并成一个MP3文件,然后在循环中播放(此文件应该比单个吱吱声长得多,也应该更长)。
如果尝试将100个声音呈现为不同的声音播放实例,则会遇到软件合成器开发人员遇到的相同类型的语音和延迟问题。在现代PC上保持100个语音计数并具有小于25毫秒左右的总延迟是困难的,在iPhone / iPad上更加困难(或不可能)。
一般而言,语音和延迟代表了基本的工程折衷:在移动设备上拥有低延迟的合成引擎相对容易,但这只能通过非常少量的语音(即不同的并发声音)来实现。相反(就像我的软件合成引擎一样),您可以拥有一个可以处理有效无限数量的语音的引擎,但延迟非常高(大约几秒钟)。
更新: 以编程方式生成自己的声音是一个很好的主意。在 iPhone 上,您可以相对轻松地使用 AVAudioPlayer
类来实现这一点。通常,该类使用其 initWithURL
方法进行初始化,该方法用于从文件中加载音频数据。
在您的情况下,您要改为使用 initWithData
方法。在这里,您传递一个 NSData
对象,它基本上只是一块字节。在这种情况下,您希望字节块是一个内存中的 WAV 文件,其中包括一个 44 字节的标头,后跟表示实际采样数据的 2 字节整数数组。
您设置标头中的值(例如采样率、每个采样的位数、通道数等),然后使用任何喜欢的算法计算采样值。一个简单的 sin
波是一个好的起点,但这只会产生一个无聊的音调。更有趣的声音(并且可能接近您要寻找的声音)称为“啁啾” - 这基本上是一种基于短 sin 波的声音,但在播放过程中,sin 波的频率从高频变化到低频。
抱歉,我有很多关于 C# 和 Java 的音频代码,但是还没有针对 iPhone 的。希望我在这里添加的内容可以帮助你进行搜索。你基本上只需要弄清楚两件事:1) 如何使用AVAudioPlayer
和initWithData
,以及 WAV 文件的文件格式。
AudioQueue
。 - MusiGenesis