Zjištění hlasitosti zvuku v C++ na Linuxu
26.2.2020
Pokud chceme v Linuxu ve vlastním programu zjistit aktuálně nastavenou úroveň hlasitosti zvuku výchozího výstupního zařízení, můžeme využít knihovny ALSA (Advanced Linux Sound Architecture), resp. jejího rozhraní v jazyce C.
Pro překlad a sestavení je třeba nainstalovat balíček libasound2-dev. V Debianu (a v další na něm založených distribucích) je ve standardním repositáři, tj.
su - apt install libasound2-dev
Následující jednoduchá ukázka kódu zjistí a vypíše aktuální úroveň hlasitosti v procentech a také hodnoty z nichž je vypočtena, tj. minimální, maximální a aktuální úroveň.
#include <stdlib.h> #include <stdio.h> #include <alsa/asoundlib.h> #include <alsa/mixer.h> int main(int argc, char const *argv[]) { const char* szcard = "default"; const char* szname = "Master"; long vmin; long vmax; long volume; snd_mixer_t* hmixer; snd_mixer_selem_id_t* selid; snd_mixer_elem_t* pelem; while(true) { if (0 != snd_mixer_open(&hmixer, 0)) break; if (0 != snd_mixer_attach(hmixer, szcard)) break; if (0 != snd_mixer_selem_register(hmixer, NULL, NULL)) break; if (0 != snd_mixer_load(hmixer)) break; snd_mixer_selem_id_alloca(&selid); if (NULL == selid) break; snd_mixer_selem_id_set_index(selid, 0); snd_mixer_selem_id_set_name(selid, szname); pelem = snd_mixer_find_selem(hmixer, selid); if (NULL == pelem) break; if (0 != snd_mixer_selem_get_playback_volume_range(pelem, &vmin, &vmax)) break; if (0 != snd_mixer_selem_get_playback_volume(pelem, SND_MIXER_SCHN_MONO, &volume)) break; printf("volume: %ld%c\n", volume * 100 / vmax, '%'); printf("volume: %ld (%ld - %ld)\n", volume, vmin, vmax); return EXIT_SUCCESS; } printf("Došlo k chybě..."); return EXIT_FAILURE; }
Kód přeložíme překladačem GCC následovně:
g++ get-sound-volume.cpp -g -Wall -lasound -oget-sound-volume
Nové články
Souborové operace na Linuxu v jazyce C
Využívejte Midnight Commander naplno
Procesor a jádra, běh na určeném jádru v C.
picom - kompozitor pro odlehčená Linuxová prostředí
Kontakt
739 219 991
live:radekchalupa_1