我的目标是创建一个“Chirper”类。 r声应能够发出程序生成的chi声。具体想法是必须按程序生成the声,而不是播放预先录制的声音。
在iPhone上获得程序生成的chi声的最简单方法是什么?
最佳答案
您可以按照您所说的使用正弦波来实现,您可以使用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 API来播放原始缓冲区。
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)
}