Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2766876
  • 博文数量: 505
  • 博客积分: 1552
  • 博客等级: 上尉
  • 技术积分: 2514
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-23 18:24
文章分类

全部博文(505)

文章存档

2019年(12)

2018年(15)

2017年(1)

2016年(17)

2015年(14)

2014年(93)

2013年(233)

2012年(108)

2011年(1)

2009年(11)

分类: LINUX

2014-03-14 19:04:34

在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()进行音量控制, 当音量参数超出其范围时, 音量设置将失败.
阅读(6718) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~