Пиковый фильтр имеет щелчки и треск

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; 
5
задан Cocell 30 January 2011 в 21:44
поделиться