基于alsa的音量控制代码

//头文件
#include <alsa/asoundlib.h>
//类定义
class Sound {
  public:
    
Sound();
    ~
Sound();
    
int sound_read();
    
void sound_write(int);
  private:
    
snd_mixer_t mixer;
    
snd_mixer_elem_t *pcm_element;
};

//初始化-----------------------------------------------------
Sound::Sound()
{
    
snd_mixer_open(&mixer0);
    
snd_mixer_attach(mixer"default");
    
snd_mixer_selem_register(mixerNULLNULL);
    
snd_mixer_load(mixer);
    
//找到Pcm对应的element,方法比较笨拙
    
pcm_element snd_mixer_first_elem(mixer);
    
pcm_element snd_mixer_elem_next(pcm_element);
    
pcm_element snd_mixer_elem_next(pcm_element);
    
//
    
long int ab;
    
long alsa_min_volalsa_max_vol;
    
///处理alsa1.0之前的bug,之后的可略去该部分代码
    
snd_mixer_selem_get_playback_volume(pcm_element,
                                        
SND_MIXER_SCHN_FRONT_LEFT, &a);
    
snd_mixer_selem_get_playback_volume(pcm_element,
                                        
SND_MIXER_SCHN_FRONT_RIGHT, &b);

    
snd_mixer_selem_get_playback_volume_range(pcm_element,
                                              &
alsa_min_vol,
                                              &
alsa_max_vol);
    
///设定音量范围
    
snd_mixer_selem_set_playback_volume_range(pcm_element0100);
    
}

//读音量值-----------------------------------------------------
int Sound::sound_read()
{
    
long lllr;
    
//处理事件
    
snd_mixer_handle_events(mixer);
    
//左声道
    
snd_mixer_selem_get_playback_volume(pcm_element,
                                        
SND_MIXER_SCHN_FRONT_LEFT, &ll);
    
//右声道
    
snd_mixer_selem_get_playback_volume(pcm_element,
                                        
SND_MIXER_SCHN_FRONT_RIGHT, &lr);
    return (
ll lr) >> 1;
}

//写入音量-----------------------------------------------------
void Sound::sound_write(int leftright)
{
    
//左音量
    
snd_mixer_selem_set_playback_volume(pcm_element,
                                        
SND_MIXER_SCHN_FRONT_LEFT,
                                        
leftright);
    
//右音量
    
snd_mixer_selem_set_playback_volume(pcm_element,
                                        
SND_MIXER_SCHN_FRONT_RIGHT,
                                        
leftright);
}

//退出-----------------------------------------------------
Sound::~Sound()
{
    
snd_mixer_close(mixer);
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值