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

news2024/11/23 20:06:45
头图

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

文章目录

  • 第三代软件开发-系统音量设置
    • 项目介绍
    • 系统音量设置
      • QML 实现
      • C++ 实现
    • 总结一下

关键字: 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1145197.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++】类与对象 第二篇(构造函数,析构函数,拷贝构造,赋值重载)

目录 类的6个默认成员函数 初始化和清理 1.构造函数 2.析构函数 3.共同点 拷贝复制 1.拷贝构造 使用细节 2.赋值重载 运算符重载 < < > > ! 连续赋值 C入门 第一篇(C关键字&#xff0c; 命名空间&#xff0c;C输入&输出)-CSDN博客 C入门 第二篇( 引…

036-第三代软件开发-系统时间设置

第三代软件开发-系统时间设置 文章目录 第三代软件开发-系统时间设置项目介绍系统时间设置演示效果QML 实现小伙伴自创 TumblerQt 家 Tumbler C 端实现 总结一下 关键字&#xff1a; Qt、 Qml、 Time、 时间、 系统 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;…

用Python实现感知机学习算法及其对偶算法实验报告

实验目的 1.理解感知机学习算法的基本思想&#xff1a;感知机是一种简单的线性分类模型&#xff0c;其基本思想是通过不断调整权重&#xff0c;使得分类超平面能够将不同类别的样本正确分开。 2.掌握感知机学习算法的实现方法&#xff1a;感知机学习算法基于随机梯度下降法&am…

【斗罗二】霍雨浩迷惑审查,戴华斌故意挑衅,惨败者屈服下跪

【侵权联系删除】【文/郑尔巴金】 深度爆料&#xff0c;自《绝世唐门》宣布问世以来&#xff0c;其在国漫圈引发的关注和热议便如火如荼。作为《斗罗大陆》的续作&#xff0c;这部作品无疑继承了前作的荣光&#xff0c;甚至被无数粉丝期待着能再创辉煌。在各大社交媒体和国漫论…

前端移动web高级详细解析二

移动 Web 第二天 01-空间转换 空间转换简介 空间&#xff1a;是从坐标轴角度定义的 X 、Y 和 Z 三条坐标轴构成了一个立体空间&#xff0c;Z 轴位置与视线方向相同。 空间转换也叫 3D转换 属性&#xff1a;transform 平移 transform: translate3d(x, y, z); transform…

搞定蓝牙——第五篇(SMP)

搞定蓝牙——第五篇&#xff08;SMP&#xff09; 原理Security Manager(简称SM&#xff0c;不要想歪)秘钥配对秘钥生成特定秘钥分发原理总结 原理 Security Manager(简称SM&#xff0c;不要想歪) 按照前面的试验&#xff0c;两个设备可以通过ble通讯了&#xff0c;但是&#…

(a /b)*c的值

系列文章目录 进阶的卡莎C++_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(…

ETL工具Kettle

1 Kettle的基本概念 一个数据抽取过程&#xff0c;主要包括创建一个作业&#xff08;Job&#xff09;&#xff0c;每个作业由一个或多个作业项&#xff08;Job Entry&#xff09;和连接作业项的作业跳&#xff08;Job Hop&#xff09;组成。每个作业项可以是一个转换&#xff…

Cookie技术

Cookie中文名称为小型文本文件&#xff0c;指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地终端上的数据。 Cookie是由服务器端生成&#xff0c;发送给User-Agent&#xff08;—般是浏览器&#xff09;&#xff0c;浏览器会将Cookie的key/value保存到某个目录下的文…

wiresharak捕获DNS

DNS解析&#xff1a; 过滤项输入dns&#xff1a; dns查询报文 应答报文&#xff1a; 事务id相同&#xff0c;flag里 QR字段1&#xff0c;表示响应&#xff0c;answers rrs变成了2. 并且响应报文多了Answers 再具体一点&#xff0c;得到解析出的ip地址&#xff08;最底下的add…

【Linux】虚拟机安装Linux、客户端工具,MobaXterm的使用,Linux常用命令

目录 一&#xff0c;安装Linux的centos7版本 具体安装步骤&#xff1a; 二&#xff0c;Linux常见的命令&#xff1a; 三、安装客户端工具 1、介绍 2、安装MobaXterm 3、换源 四、拍照功能 一&#xff0c;安装Linux的centos7版本 介绍&#xff1a; 具体安装步骤&#…

PTA L1-8 静静的推荐

PTA L1-8 静静的推荐 分数 20 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 天梯赛结束后&#xff0c;某企业的人力资源部希望组委会能推荐一批优秀的学生&#xff0c;这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的&#xff1a; 只考虑得分不低于 175 …

软考系列(系统架构师)- 2012年系统架构师软考案例分析考点

试题一 软件架构&#xff08;架构风格对比、架构风格选取、架构设计过程&#xff09; 【问题1】&#xff08;12分&#xff09; 请用200字以内的文字解释什么是软件架构风格&#xff0c;并从集成开发环境与用户的交互方式、集成开发环境的扩展性、集成开发环境的数据管理三个方…

Anaconda下载和安装

1.概述 1&#xff09;包含conda&#xff1a;conda是一个环境管理器&#xff0c;其功能依靠conda包来实现&#xff0c;该环境管理器与pip类似。 2&#xff09;安装大量工具包&#xff1a;Anaconda会自动安装一个基本的python&#xff0c;该python的版本Anaconda的版本有关。该…

进程(详解)

进程 进程PCB进程的定义进程的组成进程模式进程的状态进程的运行进程的创建进程的结束孤儿进程僵尸进程僵尸进程的危害 进程的创建pidforkwait案例 进程 PCB 从操作系统理解进程概念-------先描述&#xff0c;后组织 为了使参与并发执行的程序能独立的运行&#xff0c;必须为之…

经常遇到的问题

一个前端经常会遇到的问题 例如&#xff0c;我想要在一个项目里&#xff0c;监听所有的fetch请求&#xff0c;应该怎么办&#xff1f;又或者说&#xff0c;我想用别人封装好的方法&#xff0c;但是在它之前&#xff0c;需要经过一层处理、判断&#xff0c;然后再看情况是否调用…

如何隐藏woocommerce 后台header,woocommerce-layout__header

如何隐藏woocommerce 后台header&#xff0c;woocommerce-layout__header WooCommerce |Products Store Activity| Inbox| Orders| Stock| Reviews| Notices| breadcrumbs 在 functions.php 里添加如下代码即可&#xff1a; // Disable WooCommerce Header in WordPress Admi…

开启CETOS 裸奔了一年的服务器开启firewall防火墙

记录一下关于firewall&#xff0c;博主非运维专家或服务器专家。 背景 客户有一台裸奔运行了一年多的系统有公网但发现没有开防火墙&#xff0c;iptables和firewall均是关闭状态&#xff0c;通过扫描发现很多漏洞。根据客户要求对端口进行重新梳理且关闭不必要或有潜在风险的…

kubeadmin部署k8s1.27.4

kubeadmin部署k8s1.27.4 环境介绍 IP主机名资源配置系统版本192.168.117.170k8s-master2c2g200gCentos7.9192.168.117.171k8s-node12c2g200gCentos7.9192.168.117.172k8s-node22c2g200gCentos7.9 编辑本地解析且修改主机名 三台主机都要做 vim /etc/hosts配置主机名 mast…

软考系列(系统架构师)- 2013年系统架构师软考案例分析考点

试题一 软件架构&#xff08;根据描述填表、ESB 定义和功能&#xff09; 【问题1】&#xff08;10分&#xff09; 服务建模是对Ramp Coordination信息系统进行集成的首要工作&#xff0c;公司的架构师首先对Ramp Coordination信息系统进行服务建模&#xff0c;识别出系统中的两…