第三代软件开发-系统音量设置

简介: 欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资

头图

第三代软件开发-系统音量设置

[toc]

关键字: QtQmlvolume声音GPT

项目介绍

欢迎来到我们的 QML & C++ 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C++ 的强大功能,旨在开发出色的用户界面和高性能的后端逻辑。

在项目中,我们利用 QML 的声明式语法和可视化设计能力创建出现代化的用户界面。通过直观的编码和可重用的组件,我们能够迅速开发出丰富多样的界面效果和动画效果。同时,我们利用 QML 强大的集成能力,轻松将 C++ 的底层逻辑和数据模型集成到前端界面中。

在后端方面,我们使用 C++ 编写高性能的算法、数据处理和计算逻辑。C++ 是一种强大的编程语言,能够提供卓越的性能和可扩展性。我们的团队致力于优化代码,减少资源消耗,以确保我们的项目在各种平台和设备上都能够高效运行。

无论您是对 QML 和 C++ 开发感兴趣,还是需要我们为您构建复杂的用户界面和后端逻辑,我们都随时准备为您提供支持。请随时联系我们,让我们一同打造现代化、高性能的 QML & C++ 项目!

重要说明☝

☀该专栏在第三代软开发更新完将涨价

系统音量设置

先看下效果,重点在C++

QML 实现

音量调节的前端实现方式很简单,就是一个Slider 和一个按钮组成

import QtQuick 2.15
import QtQuick.Layouts 1.15                                             // 布局需要
import QtQuick.Controls 2.15
import XXXX 1.0
Popup
{
    id:root
    width: 360
    height: 60
    visible: false
    background: Rectangle
    {
        color:"#24272B"
    }
    RowLayout
    {
        anchors.centerIn: parent
        spacing: 20
        Button
        {
            width: 26
            height: 26
            checkable: true
            checked:(slider_volume.value === 0) ? true : false
            background: Image{
                anchors.centerIn: parent
                width: parent.checked ? 26 : 17
                height: 26
                source: parent.checked ? "qrc:/MainWindow/T_Resource/T_Image/MainWindow/jingyin.png" : "qrc:/MainWindow/T_Resource/T_Image/MainWindow/lb.png"
            }

            onClicked:
            {
                playSound.play()
                if(checked)
                {
                    slider_volume.value = 0;
                }
            }
        }
        Slider
        {
            id:slider_volume
            width: 250
            height: 20
            from: 0
            stepSize: 1
            to:100
            value: Setting.systemVolume
            background: Rectangle {
                x: slider_volume.leftPadding
                y: slider_volume.topPadding + slider_volume.availableHeight / 2 - height / 2
                implicitWidth: 200
                implicitHeight: 4
                width: slider_volume.availableWidth
                height: implicitHeight
                radius: 2
                color: "#bdbebf"

                Rectangle {
                    width: slider_volume.visualPosition * parent.width
                    height: parent.height
                    color: "#51A7DE"
                    radius: 2
                }
            }

            handle: Rectangle {
                x: slider_volume.leftPadding + slider_volume.visualPosition * (slider_volume.availableWidth - width)
                y: slider_volume.topPadding + slider_volume.availableHeight / 2 - height / 2
                implicitWidth: 26
                implicitHeight: 26
                radius: 13
                color: slider_volume.pressed ? "#f0f0f0" : "#f6f6f6"
                border.color: "#bdbebf"
            }

            onValueChanged:
            {
                Setting.systemVolume = value
            }

        }
        Text {
            font.pixelSize: 20
            color: "#56A8DC"
            text: Setting.systemVolume
        }
    }
}

C++ 实现

这里需要系统安装一个库,执行以下代码

sudo apt-get install libasound2-dev

要使用下面函数生效,需要包含头文件

#include "alsa/asoundlib.h"

设置音响实现代码:

/**
 * @brief XXXX::setSystemVolume
 * @param newSystemVolume
 * 设置系统音量
 */
void XXXX::setSystemVolume(int newSystemVolume)
{

#ifdef Q_OS_LINUX
    if (m_systemVolume == newSystemVolume)
        return;
    m_systemVolume = newSystemVolume;
    emit systemVolumeChanged();

    snd_mixer_t *handle;
    snd_mixer_open(&handle, 0);
    snd_mixer_attach(handle, "default");
    snd_mixer_selem_register(handle, NULL, NULL);
    snd_mixer_load(handle);
    snd_mixer_selem_id_t *sid;
    snd_mixer_selem_id_alloca(&sid);
    snd_mixer_selem_id_set_index(sid, 0);
    snd_mixer_selem_id_set_name(sid, "Master");
    snd_mixer_elem_t *elem = snd_mixer_find_selem(handle, sid);
    snd_mixer_selem_set_playback_volume_all(elem, m_systemVolume * (0xFFFF / 100));
    snd_mixer_close(handle);
#endif
}

设置第一步是不是我们得获取系统音量,代码如下:

/**
 * @brief XXXX::getVolume
 * @return
 * 获取系统音量
 */
int XXXX::getVolume()
{
#ifdef Q_OS_LINUX
    snd_mixer_t *handle;
    snd_mixer_selem_id_t *sid;
    snd_mixer_elem_t *elem;
    long volume;
    snd_mixer_open(&handle, 0);
    snd_mixer_attach(handle, "default");
    snd_mixer_selem_register(handle, NULL, NULL);
    snd_mixer_load(handle);
    snd_mixer_selem_id_alloca(&sid);
    snd_mixer_selem_id_set_index(sid, 0);
    snd_mixer_selem_id_set_name(sid, "Master");
    elem = snd_mixer_find_selem(handle, sid);
    snd_mixer_selem_get_playback_volume(elem, SND_MIXER_SCHN_MONO, &volume);
    snd_mixer_close(handle);
    return volume/(0xFFFF / 100);
#endif

#ifdef Q_OS_WIN32
    return 0;
#endif

}

总结一下

如上所述,这段代码不具备普遍性,仅仅适用于Linux,是通过snd_mixer库来实现系统音量的调节。其实也想过使用指令实现,不过没有发现好用的。也问过GPT,不过答案也不理想,和我上面的原理也基本一样。

要在Ubuntu中设置系统音量,您可以使用以下命令:

  1. 调整音量大小:

    • amixer set Master <volume>:将音量设置为指定的值。例如,amixer set Master 50%将音量设置为50%。
    • amixer set Master <volume>%:将音量设置为百分比。例如,amixer set Master 80%将音量设置为80%。
    • amixer set Master <volume>+/-<increment>:增加或减少音量。例如,amixer set Master 5%+将音量增加5%,amixer set Master 5%-将音量减少5%。
  2. 静音和取消静音:

    • amixer set Master mute:将音频静音。
    • amixer set Master unmute:取消音频静音。

请注意,这些命令将直接调整系统的主音量控制器。但请确保您具有适当的权限来执行这些操作。

另一个版本的GPT

要在Ubuntu上设置系统音量,你可以使用amixer命令。以下是一些常用的指令:

  1. 查看当前的音量状态:

    amixer get Master
    
  2. 将音量设置为特定百分比(例如50%):

    amixer set Master 50%
    
  3. 增加音量:

    amixer set Master 5%+
    
  4. 减小音量:

    amixer set Master 5%-
    

请注意,这些命令会更改系统的主音量。你也可以使用其他工具,如pactlalsamixer来调整音量。


博客签名2021

相关文章
|
C# C++
创建目标类型对象在C#7.3中不可用,请使用9.0或更高的语言版本
创建目标类型对象在C#7.3中不可用,请使用9.0或更高的语言版本
2449 0
创建目标类型对象在C#7.3中不可用,请使用9.0或更高的语言版本
|
存储 缓存 弹性计算
解读大模型时代的数据加速:性能、稳定性与一致性一个都不能少
本文探讨了在大模型时代,如何在数据加速中平衡性能、稳定性和一致性,通过阿里云ACK Fluid的实例,详细解析了优化策略与最佳实践,旨在帮助用户高效应对数据管理挑战。
|
安全 数据安全/隐私保护
【GitHub】2FA认证(双重身份验证)
【GitHub】2FA认证(双重身份验证)
1376 6
如何随机切换代理IP以避免被封禁?
如何随机切换代理IP以避免被封禁?
363 1
|
存储 Linux 数据安全/隐私保护
AccessData AD1镜像格式完全剖析
流行的数字取证工具FTK Imager创造了一种逻辑镜像格式,在取证界广泛使用,但鲜少有人对其格式进行研究。
1245 4
AccessData AD1镜像格式完全剖析
利用ffmpeg命令从摄像机抓拍一张图片
利用ffmpeg命令从摄像机抓拍一张图片
483 1
|
负载均衡 监控 容灾
系统频繁崩溃,如何考虑系统的稳定性和可扩展性?
最近网传互联网应用信息系统频繁崩溃,语雀崩完淘宝崩,淘宝崩完滴滴崩,随着业务的发展和技术的进步,对于信息系统的要求也越来越高。信息应用系统为了满足不断增长的用户和业务需求,提高系统的稳定性和扩展性至关重要。
778 1
|
存储 算法 C++
【C++ map结构 】std::map 和 std::unordered_map 在使用上的差异
【C++ map结构 】std::map 和 std::unordered_map 在使用上的差异
384 0

热门文章

最新文章