在alsa编程中,要控制声卡首先要做好初始化工作,简单实例如下:
snd_mixer_t *mixerFd;
snd_mixer_elem_t *elem;
int result;
// 打开混音器
if ((result = snd_mixer_open( &mixerFd, 0)) < 0)
{
qWarning()<<"snd_mixer_open error"<< result;
mixerFd = NULL;
}
// Attach an HCTL to an opened mixer
if ((result = snd_mixer_attach( mixerFd, "default")) < 0)
{
qWarning()<<"snd_mixer_attach error"<< result;
snd_mixer_close(mixerFd);
mixerFd = NULL;
}
// 注册混音器
if ((result = snd_mixer_selem_register( mixerFd, NULL, NULL)) < 0)
{
qWarning()<<"snd_mixer_selem_register error"<
snd_mixer_close(mixerFd);
mixerFd = NULL;
}
// 加载混音器
if ((result = snd_mixer_load( mixerFd)) < 0)
{
qWarning()<<"snd_mixer_load error"<
snd_mixer_close(mixerFd);
mixerFd = NULL;
}
Ok, 到现在准备工作已经完成. 下面找到具体的混音器元素,就可以控制音量了, Alsa编程的确很简单.
// 遍历混音器元素
for(elem=snd_mixer_first_elem(mixerFd); elem; elem=snd_mixer_elem_next(elem))
{
if (snd_mixer_elem_get_type(elem) == SND_MIXER_ELEM_SIMPLE &&
snd_mixer_selem_is_active(elem)) // 找到可以用的, 激活的elem
{
if(QString(snd_mixer_selem_get_name(elem)) == "Master")
{
snd_mixer_selem_get_playback_volume_range(elem, &minVolume, &maxVolume);
snd_mixer_selem_set_playback_volume_all(elem, (long)50); // 设置音量为50
}
}
}
最后,要说明的是,在音量设置前, 需要检测对应的elem是否具有volume control, 具体方法:snd_mixer_selem_has_playback_volume(), 然后再配合音量设置方法snd_mixer_selem_set_playback_volume_all()进行音量控制, 当音量参数超出其范围时, 音量设置将失败.
阅读(4761) | 评论(0) | 转发(0) |