OSStatus MusicPlayerCallback (
void * inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData) {
MusicPlaybackState *musicPlaybackState = (MusicPlaybackState*) inRefCon;
double sampleinp;
double A,omega,sn,cs,alpha,Bandwidth;
double dbGain;
double a0,a1,a2,b0,b1,b2;
dbGain = 1.0;
A=pow(10.0,dbGain/40.0);
Bandwidth = 2.0;
omega=2 * M_PI * 800.0/44100.0;
sn=sin(omega);
cs=cos(omega);
alpha=sn*sinh(((M_LN2/2)*Bandwidth*omega)/sn);
//Peak Filter Biquad
b0 =1.0 + alpha * A;
b1 = (-2.0 * cs);
b2 = 1.0 - alpha * A;
a0 = 1.0 + (alpha /A);
a1 = -2.0 * cs;
a2 = 1.0 - (alpha /A);
double b0a0, b1a0, b2a0, a1a0, a2a0;
double static x1;
double static x2;
double static y1;
double static y2;
b0a0=b0/a0;
b1a0=b1/a0;
b2a0=b2/a0;
a1a0=a1/a0;
a2a0=a2/a0;
for (int i = 0 ; i < ioData->mNumberBuffers; i++){
AudioBuffer buffer = ioData->mBuffers[i];
AudioSampleType *outSample = buffer.mData;
for (int j = 0; j < inNumberFrames*2; j++){
sampleinp = *musicPlaybackState->samplePtr++;
outSample[j] = b0a0 * sampleinp +
b1a0 * x1 +
b2a0 * x2 -
a1a0 * y1 -
a2a0 * y2;
x2=x1;
x1=sampleinp;
y2=y1;
y1=outSample[j];
}}
return noErr;
}
Проблемы с щелчками / всплыванием. КТО-ТО ПОЖАЛУЙСТА ПОМОГИТЕ ... Не знаю, что делаю не так. Это в Xcode с использованием C в Objective-C. Я попытался сделать Coeff Global и Static, но безуспешно. Используемый аудиофайл - это .caf. Я пробовал .wav, но все равно ничего не вышло ....
Спасибо, извините за общий крик о помощи. Я новичок на этом сайте .. Я пытаюсь добавить фильтр пиковых значений в свое приложение, но каждый раз, когда я использую ползунок или просто оставляю усиление на 1, я получаю всплывающие окна и щелчки. Кажется, что все есть и работает правильно, поскольку удерживает предыдущие сэмплы и т. Д. Я также получаю некоторый тип фазы при изменении частоты или полосы пропускания. Я так запутался, изучая dsp уже несколько месяцев, я думаю, что это что-то с Objective-C и небольшая ошибка пользователя. Кажется, что он исчезает при смене семпла на SInt32, но левый канал исчезает при изменении частоты.
Dsp.h
typedef struct {
void* audioData;
UInt32 audioDataByteCount;
SInt16 *samplePtr;
} MusicPlaybackState;