所以,不久前我正在开发一个波浪发生器应用程序并且遇到了一些问题,但肯尼温克是一个真正的救星,帮助我基本上让一切顺利进行。然而,我最终遇到的一个问题是,每当我改变我正在使用的频率的值时(当我改变音量的值时,程度要小得多),我最终会得到这些丑陋的噼啪声爆裂”的声音。这是一个问题,因为关键在于能够用滑块平滑地改变波的频率和音量,而听起来像皱纸的声音真的会破坏这种效果。这是我的 OSStatus 控制音量/频率的代码。
OSStatus playbackCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData) {
SlidersViewController *me = (SlidersViewController *)inRefCon;
static int phase = 1;
for(UInt32 i = 0; i < ioData->mNumberBuffers; i++) {
int samples = ioData->mBuffers[i].mDataByteSize / sizeof(SInt16);
SInt16 values[samples];
float waves;
for(int j = 0; j < samples; j++) {
waves = 0;
waves += sin(kWaveform * me.fr1 * phase)*(me.vol1);
waves += sin(kWaveform * me.fr2 * phase)*(me.vol2);
waves += sin(kWaveform * me.fr3 * phase)*(me.vol3);
waves *= sin(kWaveform * (me.fr4/100) * phase)*(me.vol4);
waves *= 32500 / 4;
values[j] = (SInt16)waves;
values[j] += values[j]<<16;
phase++;
}
memcpy(ioData->mBuffers[i].mData, values, samples * sizeof(SInt16));
}
return noErr;}
如您所见,obj-c 变量“fr1”-“fr4”控制频率,而“vol1”到“vol4”控制幅度。这些值每次都会更新
- (void) touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {}
或者
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {}
被触发。有关如何解决此问题以使其听起来更流畅的任何想法?谢谢!