Итак, некоторое время назад я работал над приложением генератора волн и столкнулся с некоторыми проблемами, но Кенни Уинкер был настоящим спасителем и помог мне в принципе все начать. Однако одной проблемой, с которой я столкнулся, является тот факт, что всякий раз, когда я изменяю значение частоты, которую я использую (и в гораздо меньшей степени, когда я изменяю значение громкости), я в конечном итоге получаю эти уродливые трещины ». появляются "шумы". Это проблема, поскольку весь смысл в том, чтобы иметь возможность плавно изменять частоту и громкость волны с помощью ползунка, и то, что походит на мятую бумагу, может действительно разрушить этот эффект. Вот код моего 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 {}
срабатывает. Любые идеи о том, как это исправить, чтобы это звучало более гладко?
Спасибо!