2011-07-22 19 views
24

ALSA mikserinin ana hacmini ayarlamak için basit bir C kodu örneği aradım ancak bu sözde yaygın işlem için basit bir şey bulamadım.ALSA ana birimini C kodundan ayarlayın

ALSA'yı tamamen bilmiyorum, bu yüzden kendi minimal örneklemimin yapılması zaman alacaktır. Birisi sağlayabilirse mutlu olurdum.

cevap

37

Aşağıdaki işlemler benim için. Parametre hacmi [0, 100] aralığında verilmelidir. Dikkat, hata işleme yoktur!

void SetAlsaMasterVolume(long volume) 
{ 
    long min, max; 
    snd_mixer_t *handle; 
    snd_mixer_selem_id_t *sid; 
    const char *card = "default"; 
    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, volume * max/100); 

    snd_mixer_close(handle); 
} 
+2

Altında hangi başlık dosyası vardır? –

+2

@JonathanHenson: #include . Sanırım daha azı olan belki de #include olabilir. – trenki

+0

teşekkürler! ihtiyacım olan buydu. –

0

Ayrıca bir C programından bir alsa cihazın sesini ayarlamak deneyin. Sesi ayarlayabilirim ama sadece dB'nin yüzdesi olarak. İlk önce ses aralığını alıyorum ve minimum 0 ve maksimum 67 değeri elde ediyorum. Ben dB değeri elde etmek için snd_mixer_selem_ask_playback_dB_vol işlevini kullanmaya çalıştığımda her zaman min ve maksimum değer için 67 elde ediyorum. Birisi aynı sorun var mı ve bir çözüm var mı ?!

long value = 0, min_vol=0, max_vol=0; 
    snd_mixer_selem_get_playback_volume_range(elem, &min, &max); 
    cout << "MIN == " << min << endl; // = 0 
    cout << "MAX == " << max << endl; // = 76 
    if (snd_mixer_selem_ask_playback_dB_vol(elem, min,1, &min_vol) != 0) 
    cout << "ERROR" << endl; 
    cout << "min_vol == " << min_vol <<endl; // = 76 
    if (snd_mixer_selem_ask_playback_dB_vol(elem, max,1, &max_vol) != 0) 
    cout << "ERROR" << endl; 
    cout << "max_vol == " << max_vol <<endl; // = 76 
İlgili konular