Tod*_*son 5 iphone audio objective-c avaudioplayer
我的目标是创建一个"Chirper"课程.唧唧响应应该能够发出程序生成的啁啾声.具体的想法是啁啾必须是程序生成的,而不是预先录制的声音.
在iPhone上实现程序生成的啁啾声的最简单方法是什么?
您可以使用正弦波来执行此操作,您可以使用sin函数定义.只要您想要样本中的声音,就创建一个缓冲区,例如:
// 1 second chirp
float samples[44100];
Run Code Online (Sandbox Code Playgroud)
然后选择一个开始频率和结束频率,你可能希望开始高于结束,例如:
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);
}
Run Code Online (Sandbox Code Playgroud)
无论如何,这样的事情.
如果你想要一个嗡嗡声或其他声音,使用不同的波形 - 创建它们与sin非常相似,你可以互换使用它们.这样你可以创建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)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1183 次 |
| 最近记录: |