我想为iPhone开发一个生成自定义DTMF音色的应用程序。我假设纯音将从内存缓冲区播放,而不是从上传的文件播放,我想我应该使用AVAudioPlayer类和方法“initWithData:error:”,但我该如何实现呢?无论我做什么,我都无法发挥作用!
我在论坛中看到了这个代码,用于计算正弦波:
const int PLAYBACKFREQ = 44100;
const float PI2 = 3.14159265359f * 2;
void generateDTMF(short *buffer, int length, float freq1, float freq2) {
int i;
short *dest = buffer;
for(i=0; i<length; i++) *(dest++) = (sin(i*(PI2*(PLAYBACKFREQ/freq1))) + sin(i(PI2(PLAYBACKFREQ/freq2)))) * 16383;
}
但是我应该在哪里放置此代码?它如何帮助我填充指定的内存缓冲区?
任何形式的帮助都将不胜感激!
Sagiftw
答案 0 :(得分:1)
传递给AVAudioPlayer实例方法的数据initWithData:error:必须具有有效的音频文件头。您可以使用WAVE文件头,AIFF文件头或CAF文件头。由于您的数据格式是固定的,因此您只需在您生成的音频的持续时间内创建一个静态标头。
另一种方法是降低级别并使用AudioQueue直接播放音频缓冲区。这可能最终会变得更容易,具体取决于您希望在播放时控制多少,或者您希望无限期地播放。
答案 1 :(得分:0)