3

我想做一个非常简单的合成器。

简而言之,我想播放一个 wav 文件,并让它在某些点循环,直到触摸被释放。

我正在寻找一些示例代码,(不需要是免费的)。

抱歉,这是一个基本问题,我一直在谷歌上搜索,尽管似乎没有关于这个确切主题的内容,除非我错过了一些重要的术语。

另外,我所描述的是波表合成器还是音板?

4

2 回答 2

3

我称它为采样器。

这是一个可以帮助您入门的示例项目:

https://sites.google.com/site/iphonecoreaudiodevelopment/remoteio-playback

也可以看看:

音频编程书

核心有声读物

我的一个示例项目

于 2011-11-18T16:09:03.007 回答
0

您需要将声音数据存储在内存中,并使用某种 read() 命令填充要发送到声卡的字节数组。read() 命令必须在两次读取之间跟踪其位置,因此必须维护一个持久指针。您将测试指针的位置,看看您是否已经到达终点,并在需要时重置到起点。

当然,具体情况将取决于您选择的语言。

我用 Java 做到了这一点,增加了以不同速度播放的可能性。 http://www.hexara.com/VSL/VSL2.htm 有点滞后。发布后我学到了一些东西,但还没有回去修复它。该程序请求许可并让您从计算机加载 wav 文件。它应该是 16 位、立体声、44100fps、little-endian。

WaveTable 合成有点不同,因为只有一次波迭代被存储并用作源数据。

这里有一个简短的讨论,来自斯坦福的 CCRMA 网站: https ://ccrma.stanford.edu/~bilbao/booktop/node9.html 我用这种方法制作了一个 Java “Theremin” http://www.hexara.com/ VSL/JTheremin.htm

使用 WaveTable,您可以决定数组的大小。如果它是 2 的幂,则可以在每次递增后对指针进行位屏蔽,这比进行比较和重置要快。

于 2011-11-19T03:03:55.450 回答