如何像来自声音制造对象的人群一样播放合成声音

3
考虑到我有100个“吱吱声”类的实例。每个“吱吱声”对象都能够单独发出吱吱声。每个吱吱声实体都使用相同的.mp3资源。当所有吱吱声一起呈现在屏幕上(例如作为小人物),我希望它们都在大约(但不完全)同时吱吱叫,以便它们的组合吱吱声一起被听到,就像一群吱吱声一样。
针对iOS,您推荐什么方法(和音频/声音框架)?有人做过这个吗?有代码示例吗?

我真正希望的是有人曾经在寻求这个效果并能分享一些源代码或示例代码。 - Todd Hopkinson
“群体”也会发出略有不同的吱吱声。您可以通过变化振幅/速度(参见“自动双轨录音”)来模拟这种情况。更好的方法可能只是拥有预先录制的“100个吱吱声”。 - tc.
2个回答

2
首先,不要使用MP3。iPhone/iPod/iPad在第一次解码有损压缩的音频层时会使用硬件加速。自iOS 3.0以来,可以播放另一个有损压缩的声音,但这会给CPU带来很大的负载,因为它没有硬件加速。据我所知,这已经是MP3和AAC的限制了。
作为个人喜好,我建议使用OpenAL与RAW(未压缩)16位音频文件相结合。OpenAL非常简单、灵活并且有很好的文档(除了Apple的参考资料)。然而,你也会遇到限制。据我记得,在iOS设备上,OpenAL最多只能同时播放32个声音。

谢谢。我一直在考虑OpenAL,知道我可能同时运行多达32个声音,这可能会实现接近所需的效果。我想知道尝试同时使用超过32个声音是否会引发错误或只是静默地不执行这些额外的声音。 - Todd Hopkinson
直接将MP3解压到内存缓冲区,然后播放呢?我认为AVAudioPlayer可以做到这一点。 - tc.

1

最好像“笑声轨道”一样构建它,使用音频编辑器将多个吱吱声合并成一个MP3文件,然后在循环中播放(此文件应该比单个吱吱声长得多,也应该更长)。

如果尝试将100个声音呈现为不同的声音播放实例,则会遇到软件合成器开发人员遇到的相同类型的语音和延迟问题。在现代PC上保持100个语音计数并具有小于25毫秒左右的总延迟是困难的,在iPhone / iPad上更加困难(或不可能)。

一般而言,语音和延迟代表了基本的工程折衷:在移动设备上拥有低延迟的合成引擎相对容易,但这只能通过非常少量的语音(即不同的并发声音)来实现。相反(就像我的软件合成引擎一样),您可以拥有一个可以处理有效无限数量的语音的引擎,但延迟非常高(大约几秒钟)。

更新: 以编程方式生成自己的声音是一个很好的主意。在 iPhone 上,您可以相对轻松地使用 AVAudioPlayer 类来实现这一点。通常,该类使用其 initWithURL 方法进行初始化,该方法用于从文件中加载音频数据。

在您的情况下,您要改为使用 initWithData 方法。在这里,您传递一个 NSData 对象,它基本上只是一块字节。在这种情况下,您希望字节块是一个内存中的 WAV 文件,其中包括一个 44 字节的标头,后跟表示实际采样数据的 2 字节整数数组。

您设置标头中的值(例如采样率、每个采样的位数、通道数等),然后使用任何喜欢的算法计算采样值。一个简单的 sin 波是一个好的起点,但这只会产生一个无聊的音调。更有趣的声音(并且可能接近您要寻找的声音)称为“啁啾” - 这基本上是一种基于短 sin 波的声音,但在播放过程中,sin 波的频率从高频变化到低频。

抱歉,我有很多关于 C# 和 Java 的音频代码,但是还没有针对 iPhone 的。希望我在这里添加的内容可以帮助你进行搜索。你基本上只需要弄清楚两件事:1) 如何使用AVAudioPlayerinitWithData,以及 WAV 文件的文件格式。


谢谢,非常好的评论。您认为使用程序生成的声音代替预先录制的声音资源怎么样? - Todd Hopkinson
@icnivad:我认为这是个好主意。通过程序生成声音而不是将它们作为资源嵌入应用程序中,可以帮助保持下载大小的小巧。 - MusiGenesis
超棒的信息!如果有任何相关的C#或Java代码,那将是难以置信的,因为我可以进行实验。如果您有一个我可以在C#中运行的“chirp”示例,那将非常值得。 - Todd Hopkinson
我完全找不到任何关于这方面的教程 - 甚至没有糟糕的教程。我可能需要写我的第一个iPhone教程,因为我知道这非常简单。我猜想大多数想要进行编程声音的人使用AudioQueue - MusiGenesis
我在这里发布了一个关于过程声音的相关问题(具体来说是你提到的鸣叫声):https://dev59.com/H1bTa4cB1Zd3GeqP8jV2 - Todd Hopkinson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接