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;
}
Avere problemi con Clic/pop. Qualcuno PER FAVORE AIUTA ... Non so cosa sto sbagliando. Questo è in Xcode usando C in Objective-C. Ho provato a creare Coeff Global e Static ma non ho avuto fortuna. Il file audio che utilizza è un .caf che ho provato .wav ma ancora non va bene ....Filtro di picco con clic e pop
Grazie, scusa per il grido generale di aiuto. Sono nuovo di questo sito .. Sto provando ad aggiungere un filtro Peak nella mia app ma ogni volta che uso uno slider o semplicemente il guadagno a 1 ottengo pop e click. Sembra che ci sia tutto e funzioni correttamente per quanto riguarda il mantenimento dei campioni precedenti, ecc. Ho anche ottenuto un certo tipo di fase quando si modifica la frequenza o la larghezza di banda. Sono così confuso che ho studiato dsp per alcuni mesi, penso che sia qualcosa con Objective-C e un errore utente lil. Sembra che vada via quando si cambia il campione in uno SInt32, ma il canale sinistro scompare quando si cambia freq.
Dsp.h
typedef struct {
void* audioData;
UInt32 audioDataByteCount;
SInt16 *samplePtr;
} MusicPlaybackState;
Non riesco a immaginare perché qualcuno stia votando per chiudere questo. – ocodo
@ Silomojo: Non penso che la domanda debba essere chiusa, ma non è molto ben presentata così com'è, e posso capire perché potrebbe ottenere voti ravvicinati. @Cocell: potresti voler migliorare la domanda per evitare ulteriori voti ravvicinati - prova a dare maggiori dettagli sul problema e su ciò che hai provato, e fargli una singola domanda specifica piuttosto che un "grido d'aiuto" generale. –
@Paul R - Sono d'accordo sul fatto che la domanda dovrebbe essere posta in modo più efficace, ma il voto di chiusura del tutto silenzioso è inappropriato. È del 100% evidente che Cocell è un nuovo utente di SO e, semplicemente, vuole risolvere un problema spinoso. Non è possibile per qualcuno con meno di 2k rep per votare per la chiusura, quindi è estremamente deludente quando ciò accade. È arbitrario, inutile e francamente maleducato, un commento che richiede maggiori informazioni se è necessario è tutto ciò che è necessario qui, non un "VIAGGIARE, LA TUA DOMANDA È INDESIDERATA", che è esattamente ciò che esprime un voto ravvicinato. – ocodo