正如您所说,您可以使用正弦波来做到这一点,您可以使用 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);
}
无论如何,类似的事情。
如果您想要嗡嗡声或其他声音,请使用不同的波形 - 创建它们以与 sin 非常相似的方式工作,并且您可以互换使用它们。这样你就可以创建 saw() sqr() tri(),并且你可以做一些事情,比如将它们组合起来形成更复杂或更多样化的声音
=======================
Edit -
如果您想玩,您应该能够使用 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)
}