我的目标是创建一个"Chirper“类。鸣叫者应该能够发出程序上产生的鸣叫声。具体的想法是,chirp必须通过程序生成,而不是预先录制的声音回放。
在iPhone上实现程序生成的chirp声音的最简单方法是什么?
发布于 2011-04-22 01:09:21
您可以使用您所说的正弦波来实现,您可以使用sin函数来定义正弦波。只要采样中需要声音,就创建一个缓冲区,例如:
// 1 second chirp
float samples[44100];然后选择开始频率和结束频率,您可能希望开始频率高于结束频率,如下所示:
float startFreq = 1400;
float endFreq = 1100;
float thisFreq;
int x;
for(x = 0; x < 44100; x++)
{
float lerp = float(float(x) / 44100.0);
thisFreq = (lerp * endFreq) + ((1 - lerp) * startFreq);
samples[x] = sin(thisFreq * x);
}不管怎么说,差不多就是这样。
如果你想要嗡嗡声或其他声音,使用不同的波形-创建它们的工作方式非常类似于罪过,你可以互换使用它们。这样,您就可以创建saw() sqr() tri(),还可以组合它们以形成更复杂或不同的声音
========================
编辑-
如果你想玩,你应该能够使用OpenAL按照这些思路做一些事情。重要的是使用OpenAL或类似的iOS应用程序接口来播放原始缓冲区。
alGenBuffers (1, &buffer);
alBufferData (buffer, AL_FORMAT_MONO16, buf, size, 8000);
alGenSources (1, &source);
ALint state;
// attach buffer and play
alSourcei (source, AL_BUFFER, buffer);
alSourcePlay (source);
do
{
wait (200);
alGetSourcei (source, AL_SOURCE_STATE, &state);
}
while ((state == AL_PLAYING) && play);
alSourceStop(source);
alDeleteSources (1, &source);
delete (buf)
} 发布于 2011-04-28 08:37:09
您可以在远程I/O单元的渲染回调中使用Nektarios的代码。你甚至可以实时改变波形(低延迟)。
https://stackoverflow.com/questions/5659522
复制相似问题