void AlsaPMO::SetVolume(int32 left, int32 right) { int err; snd_mixer_t *pMixer; err = snd_mixer_open(&pMixer, m_iCard, 0); if (err < 0) return; if (m_iChannel >= 0) { err = snd_mixer_group_read(pMixer, &m_group); if (err < 0) return; left = (int)((double)(m_group.max - m_group.min) * (double)left * 0.01) + m_group.min; right = (int)((double)(m_group.max - m_group.min) * (double)right * 0.01) + m_group.min; for (int chn = 0; chn <= SND_MIXER_CHN_LAST; chn++) { if (!(m_group.channels & (1<<chn))) continue; if (chn == 0) m_group.volume.values[chn] = left; else if (chn == 1) m_group.volume.values[chn] = right; else m_group.volume.values[chn] = (left + right) / 2; } snd_mixer_group_write(pMixer, &m_group); } snd_mixer_close(pMixer); }
void setVolume(int level) { int volume; snd_mixer_t *mixer_handle; if (snd_mixer_open (&mixer_handle, card, device) < 0) { slogf( _SLOG_SETCODE(_SLOGC_AUDIO, 0), _SLOG_CRITICAL, "Unable to open mixer\n"); return; } snd_mixer_group_read(mixer_handle, &group); volume = (float)(group.max - group.min) * ( level / 100.0) + group.min; if (group.channels & SND_MIXER_CHN_MASK_FRONT_LEFT) group.volume.names.front_left = volume; if (group.channels & SND_MIXER_CHN_MASK_REAR_LEFT) group.volume.names.rear_left = volume; if (group.channels & SND_MIXER_CHN_MASK_FRONT_CENTER) group.volume.names.front_center = volume; if (group.channels & SND_MIXER_CHN_MASK_FRONT_RIGHT) group.volume.names.front_right = volume; if (group.channels & SND_MIXER_CHN_MASK_REAR_RIGHT) group.volume.names.rear_right = volume; if (group.channels & SND_MIXER_CHN_MASK_WOOFER) group.volume.names.woofer = volume; snd_mixer_group_write(mixer_handle, &group); snd_mixer_close (mixer_handle); }
static void alsa_mute_mic(audio_desc_t ad) { snd_mixer_gid_t mic; snd_mixer_group_t group; snd_mixer_t *CurMixer = 0; snd_mixer_open(&CurMixer, ad, 0); /* assume mixer 0 */ memset(&mic, 0, sizeof(mic)); strcpy(mic.name, SND_MIXER_IN_MIC); memset(&group, 0, sizeof(group)); group.gid = mic; snd_mixer_group_read(CurMixer, &group); group.mute = SND_MIXER_CHN_MASK_STEREO; snd_mixer_group_write(CurMixer, &group); snd_mixer_close(CurMixer); }