Equalizer



  • Guten Tag,

    ich bin auf der Suche nach einem Equalizer Source Code.

    Ich google nun schon einige Zeit, habe aber noch nix passendes gefunden.

    Folgenden Code habe ich schon ausprobiert:

    http://www.un4seen.com/

    Ich dachte dieser wuerde genau dem entsprechen was ich suche...

    Ich kenne mich in der Audiomaipulationsthematik nicht wirklich aus, bin aber der Meinung das der ablauf folgender sein sollte...

    Ich decode mir eine mp3 etc. Datei (das habe ich auch schon geht auch wunderbar...) woraus ich dann meine PCM daten bekomme die in float Form dann vorliegen. Danach rufe meine write Methode auf, welche mir die Daten dann in den Audioausgabestream schreibt...

    Soweit so gut.

    Nun wollte ich noch einen Equalizer dazwischen schalten und da faengt auch schon das Problem an. Ich dachte dieser BiQuad filter waere genau das richtige, ich kann mir dort einen Filter erstellen (FilterTyp,, gain, Frequenz, Samplerate, Bandbreite).
    Danach dann einfach eine Methode processSample(float sample, filter) vor die write Methode packen und dann die veraenderten Samples in den AusgabeStream schreiben..

    Im grunde genommen klappt das auch, aber nur bei folgendem Aufruf:

    Ich gehe jetzt mal von ObjectOrientiert aus.

    float[] samples = decode("pfad/zur/mp3");
    
    float hz         = 63f;
    float gain       = 0;
    float sampleRate = 44100f;
    float bandwidth  = 1f;
    
    BiQuad biQuad = new BiQuad(PEQ, gain, hz, sampleRate, bandwidth);
    
    for(int i = 0; i < samples.length; i++)
    {
      float processedSample = processSample(samples[i], biQuad)
      write(processedSample);
    }
    

    Das ist momentan der Aufbau.

    Es geht auch wenn gain bei 0 ist. Dann gibt es im grundegenommen keinen Unterschied zur Original Datei.

    Wenn ich den Gain bspw.: auf -10 stelle, dann geht der Bass wegn so wie es sein soll...

    Aber wenn ich den Gain auf +1 oder +2 etc. stelle dann bekomme ich meines erachtens genau an den Stellen wo diese Frequenz auftritt immer nur ein Knacken...

    Also statt Bumm Bumm macht es Knack Knack...

    Ich hoffe ich konnte mein Problem gut Darstellen.

    Vorweg sei noch eine Sache gesagt:

    Ich Programmiere ein MediaCenter unter Android, dort gibt es auch einen Equalizer etc. aber der Funktionsumfang von denen ist einfach zu klein.

    Ich will so oder so die Zeitkritischen Ablaeufe ins native verschieben..

    Ich hoffe Ihr koennt mir helfen!!!

    Vielen Dank und schoenen Gruss



  • Dein Vorgehen schein schon richtig. Kommt darauf an wie du die Ausgabe gestaltest: nativ ueber Asio musst du IMO wirklich alles selber machen so wie du es beschrieben hast.
    Wenn du auf z.b. gstreamer aufsetzen kannst geht das recht komfortabel ueber plugins. Gstreamer hat auch schon einen parametrischen EQ, den man nur in die Playback-pipeline einhaengt und paramtrisiert.

    Fuer Dein derzeitiges Problem muessta man sich die Implementierung von 'processSample' anschauen. Gibt es keine Beispiel-Anwendung die die Benutzung zeigt? Ich wuerde mal suchen ob du ein "Referenzprojekt" findest.



  • Vielen Dank fuer deine Antwort!

    Ich habe auf stackoverflow einen Post geschrieben, so wie ich es implementiert habe...

    Vielleicht wirst du daraus ja schlau und koenntest mir ein paar Tipps geben...

    http://stackoverflow.com/questions/21414296/equalizer-biquad-filter-crackling

    Danke schon mal

    Gruss Patrick



  • hab mal auf den Satckoverflow post geantwortet: ich tip auf 'overflow' - kann aber auch falsch sein... Falls es das nicht ist schau ich auch gerne nochmal genauer hin.


Anmelden zum Antworten