WAV Player - Lautstärke ändern



  • Hallo,

    ich lerne seit einigen Monat C++ unter Linux.
    Hauptsächlich baue ich am VDR.
    Mit dem Standard C++ komme ich schon klar.

    Nebenbei mache ich testweise einen WAV-Player.

    Problem zurzeit ist.
    Ich kann WAV absielen jedoch nicht die Lautstärke ändern.

    Bislang habe ich die Lautstärke so geändert:

    void setvolume(long volume)
    {
        long min, max;
        snd_mixer_t *handle;
        snd_mixer_selem_id_t *sid;
        const char *card = "hw:1";
        const char *selem_name = "Master";
    
        snd_mixer_open(&handle, 0);
        snd_mixer_attach(handle, card);
        snd_mixer_selem_register(handle, NULL, NULL);
        snd_mixer_load(handle);
    
        snd_mixer_selem_id_alloca(&sid);
        snd_mixer_selem_id_set_index(sid, 0);
        snd_mixer_selem_id_set_name(sid, selem_name);
        snd_mixer_elem_t* elem = snd_mixer_find_selem(handle, sid);
    
        snd_mixer_selem_get_playback_volume_range(elem, &min, &max);
        snd_mixer_selem_set_playback_volume_all(elem,(int)(volume*((max-min)/100.0))+min);
    
        snd_mixer_close(handle);
    }
    

    Diese Lösung passt nicht weil ich dann ja den Master von der Karte ändere.

    Gibt es eine Möglichkeit die Lautstärke per Software runterzuregelen.
    Also wie z.B. beim VLC oder WindowsMediaplayer. Wo dann ein Regler geschoben wird?

    Ich würde dann mit +/- arbeiten.

    Mich wundert das es nicht so einfach ist. Das zu realisieren! Warum eigentlich?

    man kann doch bestimmt sowas machen:

    WAVbuff = setVolume(WAVbuff, WAVsize, volume[0-100])

    oder sehe ich das Falsch?

    Wäre dankbar für eure Hilfe.

    lg



  • Irgnendwo liest Du ja die Samples aus der WAV-Datei. Multipliziere einfach jedes Sample mit einem Faktor der die gewünschte Lautstärke repräsentiert. Erst danach schickst Du dann die Samples an die Soundkarte.



  • Hi Tachyon,

    danke für deine Rückmeldung.

    Werde ich probieren.

    Der Hintergrund ist einfach der, das ich den Testplayer für den Test geschrieben habe. Ich will dem Plugin für die SetTopBoxen die Möglichkeit geben. Die Volume per Software zu regelen.

    Merke aber das es keine wav Daten sind *nicht drauf geachtet* also muss ich mir was anderes einfallen lassen.

    Oder kann man generell bei Audiobuffern das selbe machen?

    lg


Anmelden zum Antworten