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

2023-10-29 00:28

本文主要是介绍037-第三代软件开发-系统音量设置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

头图

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

文章目录

  • 第三代软件开发-系统音量设置
    • 项目介绍
    • 系统音量设置
      • 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:rootwidth: 360height: 60visible: falsebackground: Rectangle{color:"#24272B"}RowLayout{anchors.centerIn: parentspacing: 20Button{width: 26height: 26checkable: truechecked:(slider_volume.value === 0) ? true : falsebackground: Image{anchors.centerIn: parentwidth: parent.checked ? 26 : 17height: 26source: 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_volumewidth: 250height: 20from: 0stepSize: 1to:100value: Setting.systemVolumebackground: Rectangle {x: slider_volume.leftPaddingy: slider_volume.topPadding + slider_volume.availableHeight / 2 - height / 2implicitWidth: 200implicitHeight: 4width: slider_volume.availableWidthheight: implicitHeightradius: 2color: "#bdbebf"Rectangle {width: slider_volume.visualPosition * parent.widthheight: parent.heightcolor: "#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 / 2implicitWidth: 26implicitHeight: 26radius: 13color: slider_volume.pressed ? "#f0f0f0" : "#f6f6f6"border.color: "#bdbebf"}onValueChanged:{Setting.systemVolume = value}}Text {font.pixelSize: 20color: "#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_LINUXif (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_LINUXsnd_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_WIN32return 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

这篇关于037-第三代软件开发-系统音量设置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/296993

相关文章

linux系统中java的cacerts的优先级详解

《linux系统中java的cacerts的优先级详解》文章讲解了Java信任库(cacerts)的优先级与管理方式,指出JDK自带的cacerts默认优先级更高,系统级cacerts需手动同步或显式... 目录Java 默认使用哪个?如何检查当前使用的信任库?简要了解Java的信任库总结了解 Java 信

Java实现为PDF设置背景色和背景图片

《Java实现为PDF设置背景色和背景图片》在日常的文档处理中,PDF格式因其稳定性和跨平台兼容性而广受欢迎,本文将深入探讨如何利用Spire.PDFforJava库,以简洁高效的方式为你的PDF文档... 目录库介绍与安装步骤Java 给 PDF 设置背景颜色Java 给 PDF 设置背景图片总结在日常的

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Oracle数据库在windows系统上重启步骤

《Oracle数据库在windows系统上重启步骤》有时候在服务中重启了oracle之后,数据库并不能正常访问,下面:本文主要介绍Oracle数据库在windows系统上重启的相关资料,文中通过代... oracle数据库在Windows上重启的方法我这里是使用oracle自带的sqlplus工具实现的方

python库pydantic数据验证和设置管理库的用途

《python库pydantic数据验证和设置管理库的用途》pydantic是一个用于数据验证和设置管理的Python库,它主要利用Python类型注解来定义数据模型的结构和验证规则,本文给大家介绍p... 目录主要特点和用途:Field数值验证参数总结pydantic 是一个让你能够 confidentl

Java利用Spire.XLS for Java设置Excel表格边框

《Java利用Spire.XLSforJava设置Excel表格边框》在日常的业务报表和数据处理中,Excel表格的美观性和可读性至关重要,本文将深入探讨如何利用Spire.XLSforJava库... 目录Spire.XLS for Java 简介与安装Maven 依赖配置手动安装 JAR 包核心API介

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo