使用alsa库函数调节音量和开关声音

使用alsa库函数调节音量,代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <alsa/asoundlib.h>
#define card        "default"
#define selem_name  "PCM"
int main(int argc,char**argv) {
    snd_mixer_t *handle;
    snd_mixer_selem_id_t *sid;
    // const char *card = "hw:2";
    // const char *selem_name = "Line Out";
    long volume = atoi(argv[1]); // Assuming range is 0-63 and 50% is around 31. Adjust as needed.

    int err = snd_mixer_open(&handle, 0);
    if (err < 0) {
        fprintf(stderr, "Error opening mixer: %s\n", snd_strerror(err));
        return -1;
    }

    err = snd_mixer_attach(handle, card);
    if (err < 0) {
        fprintf(stderr, "Error attaching mixer to card: %s\n", snd_strerror(err));
        snd_mixer_close(handle);
        return -1;
    }

    err = snd_mixer_selem_register(handle, NULL, NULL);
    if (err < 0) {
        fprintf(stderr, "Error registering mixer elements: %s\n", snd_strerror(err));
        snd_mixer_close(handle);
        return -1;
    }

    err = snd_mixer_load(handle);
    if (err < 0) {
        fprintf(stderr, "Error loading mixer: %s\n", snd_strerror(err));
        snd_mixer_close(handle);
        return -1;
    }

    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);
    if (elem == NULL) {
        fprintf(stderr, "Could not find element: %s\n", selem_name);
        snd_mixer_close(handle);
        return -1;
    }

    err = snd_mixer_selem_set_playback_volume_all(elem, volume);
    if (err < 0) {
        fprintf(stderr, "Error setting volume: %s\n", snd_strerror(err));
        snd_mixer_close(handle);
        return -1;
    }
      err = snd_mixer_selem_set_playback_switch_all(elem,atoi(argv[1]));
      if (err < 0) {
        fprintf(stderr, "Error setting volume: %s\n", snd_strerror(err));
        snd_mixer_close(handle);
        return -1;
    }

    snd_mixer_close(handle);

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hqb_newfarmer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值