QT之QMediaPlayer使用播放音频

简介

使用QMediaPlayer播放MP3格式音乐。

播放相关状态流程简述

操作m_pMediaPlayer->setMedia(); (初始化加载,为play())
状态:
__onMediaChanged QUrl(“qrc:/sounds/Sounds/Big.mp3”)
__onMediaStatusChanged QMediaPlayer::LoadingMedia
__onMediaStatusChanged QMediaPlayer::LoadedMedia

操作m_pMediaPlayer->play();
状态:
播放 __onMediaStatusChanged :QMediaPlayer::BufferedMedia
__onStateChanged :QMediaPlayer::PlayingStat

播完 __onMediaStatusChanged :QMediaPlayer::EndOfMedia
__onStateChanged :QMediaPlayer::StoppedState

操作m_pMediaPlayer->setMedia(); (已经开始play()) 会将播放器关闭,加载外后不会自动开启播放器
状态:
__onStateChanged :QMediaPlayer::StoppedState mediaState QMediaPlayer::BufferedMedia // 先暂停
__onMediaChanged QUrl(“qrc:/sounds/Sounds/HeartAlarmVoice.mp3”)
__onMediaStatusChanged :QMediaPlayer::LoadingMedia
__onMediaStatusChanged :QMediaPlayer::LoadedMedia

相关代码

QT       += core gui multimediawidgets

相关头文件

#include <QMediaPlayer>

播放类实例化

QMediaPlayer *m_pMediaPlayer;
m_pMediaPlayer = new QMediaPlayer();

播放相关

设置播放音乐

m_pMediaPlayer->setMedia(QUrl("qrc:/sounds/sample3s.mp3"));

设置音量

从0(静音)到100(全音量)。默认为100

m_pMediaPlayer->setVolume(nVolume);

播放或恢复播放当前源

m_pMediaPlayer->play();

暂停播放当前源

m_pMediaPlayer->pause()   

停止

m_pMediaPlayer->stop();

其它接口如下

设置静音

void setMuted(bool muted)

设置倍速播放

void setPlaybackRate(qreal rate)

设置播放列表

void setPlaylist(QMediaPlaylist *playlist)

设置播放位置

以媒体开始后的毫秒数为单位。 位置的周期性变化将用信号positionChanged()表示,更新间隔可以用QMediaObject的方法setNotifyInterval()设置。

void setPosition(qint64 position)

播放状态获取

建立状态改变捕获机制

connect(m_pMediaPlayer,&QMediaPlayer::stateChanged,this,&SoundPlayer::stateChanged);

槽函数

void SoundPlayer::stateChanged(QMediaPlayer::State state)
{// 播完 if(state == QMediaPlayer::StoppedState){//TODO}
}

效果如下
在这里插入图片描述

播放多首音乐

QT      +=multimedia
QT +=multimediawidgets

头文件

#include <QMediaPlayer>
#include <QMediaPlaylist>

在这里插入图片描述

使用示例

QMediaPlayer  *music = new QMediaPlayer(this);//初始化音乐QMediaPlaylist *playlist = new QMediaPlaylist(this);//初始化播放列表playlist->setPlaybackMode(QMediaPlaylist::Loop);//设置播放模式(顺序播放,单曲循环,随机播放等)playlist->addMedia(QUrl::fromLocalFile("D:/xx/yy/mm.mp3"));//添加歌曲,这里添加的是歌曲的路径playlist->addMedia(QUrl::fromLocalFile("D:/xx/yy/mm2.mp3"));//添加歌曲,这里添加的是歌曲的路径music->setPlaylist(playlist);  //设置播放列表
music->play();//播放歌曲

附上QMediaPlaylist常见用法
激活媒体内容从播放列表位置播放列表位置。

playlist->setCurrentIndex(1);

指定位置的插入方法

playlist->insertMedia(2,QMediaContent(QUrl::fromLocalFile("D:/xx/yy/mm3.mp3")));

精确地删除媒体方法

playlist->removeMedia(3);//删除位置索引为3的媒体对象
playlist->removeMedia(0,2);//删除位置索引为0,1,2的媒体对象;
playlist->clear();//清空列表

参考下面文章做了一些调整
https://blog.csdn.net/gcs_huishao/article/details/123874496?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522169012006416800186533266%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=169012006416800186533266&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-123874496-null-null.142v90control_2,239v3insert_chatgpt&utm_term=QMediaPlayer&spm=1018.2226.3001.4187

https://blog.csdn.net/qq_39838607/article/details/116885402?ops_request_misc=&request_id=&biz_id=102&utm_term=QMediaPlayer%20%E6%92%AD%E6%94%BE%E9%9F%B3%E4%B9%90%E9%9F%B3%E9%87%8F%E6%9C%80%E5%A4%A7%E5%80%BC&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-1-116885402.142v91control_2,239v3insert_chatgpt&spm=1018.2226.3001.4187

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

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

相关文章

【javaSE】初识Java

目录 Java是什么 Java语言发展简史 初识Java的main方法 运行Java程序 JDK、JRE、JVM之间的关系 Java中的标识符 Java是什么 Java是一种优秀的程序设计语言&#xff0c;它具有令人赏心悦目的语法和易于理解的语义. 不仅如此&#xff0c;Java还是一个有一系列计算机软件和规…

CHI中一致性状态简介

Coherence Protocol 各个状态描述&#xff08;只描述有意思的&#xff09;&#xff1b;I Invalid: UC Unique Clean: □ 当前cacheline可以直接修改&#xff0c;不用通知其他RN或HN; □ HNF来snoop时&#xff0c;数据可以返回给HNF, 也可以不返回&#xff1b; □ HNF来snoop…

clickhouse数据库里聚合函数any的用法

文章目录 需求场景any相关函数any函数anyHeavy函数介绍anyLast函数 生产使用 需求场景 进行分组聚合统计时&#xff0c;有几个字段也需要返回&#xff0c;但是不在聚合的需求里面。对于同一聚合条件的记录&#xff0c;这些字段的值&#xff0c;有可能会不同&#xff0c;但是这…

华为OD机考--食堂供餐--带答案

题目描述&#xff1a; 某公司员工食堂以盒饭方式供餐。为将员工取餐排队时间降低为0&#xff0c;食堂的供餐速度必须要足够快。现在需要根据以往员工取餐的统计信息&#xff0c;计算出一个刚好能达成排队时间为0的最低供餐速度。即&#xff0c;食堂在每个单位时间内必须至少做出…

Psim 2022仿真软件的安装--Psim电力仿真实战教程

文章目录 Psim 2022 仿真软件安装及使用教程软件介绍1.下载psim 2022安装软件&#xff0c;有需要的亲请联系作者。2.点击安装文件3.点击进行安装&#xff1a;4.安装完成&#xff0c;打开软件&#xff0c;开始仿真5.仿真模型介绍5.1.单相全控整流电路仿真5.2 三相PFC可控整流电路…

红黑树深入剖析【C++】

目录 一、红黑树概念 二、红黑树节点结构设计 三、插入操作 处理情况1 处理情况2 处理情况3 插入总结&#xff1a; 四、插入操作源码 五、红黑树验证 一、红黑树概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0…

Selenium+Java环境搭建(测试系列6)

目录 前言&#xff1a; 1.浏览器 1.1下载Chrome浏览器 1.2查看Chrome浏览器版本 1.3下载Chrome浏览器的驱动 2.配置系统环境变量path 3.验证是否成功 4.出现的问题 结束语&#xff1a; 前言&#xff1a; 这节中小编给大家讲解一下有关于Selenium Java环境的搭建&…

Docker 的数据管理 与 Dockerfile

目录 Docker 的数据管理容器互联&#xff08;使用centos镜像&#xff09;Docker 镜像的创建1&#xff0e;基于现有镜像创建2&#xff0e;基于本地模板创建3&#xff0e;基于Dockerfile 创建镜像加载原理 Dockerfile 操作常用的指令&#xff08;1&#xff09;FROM 镜像&#xff…

docker—springboot服务通信

文章目录 docker—springboot服务通信一、方式1、host 二、坑点末、参考资料 docker—springboot服务通信 一、方式 1、host 步骤&#xff1a; host文件增加域名解析&#xff1a; 127.0.0.1 rabbitmqapplication.yml&#xff1a; application.yml中&#xff0c;连接方式使用…

[STL]list使用介绍

[STL]list使用 注&#xff1a;本文测试环境是visual studio2019。 文章目录 [STL]list使用1. list介绍2. 构造函数3. 迭代器相关函数begin函数和end函数rbegin函数和rend函数 4. 容量相关函数empty函数size函数 5. 数据修改函数push_back函数和pop_back函数push_front函数和pop…

Python MySQL

pymysql 除了使用图形化工具以外&#xff0c;我们也可以使用编程语言来执行SQL从而操作数据库。 在Python中&#xff0c;使用第三方库&#xff1a;pymysql 来完成对MySQL数据库的操作。 安装&#xff1a; pip install pymysql 或在pycharm中搜索pymysql插件安装 创建到MySQ…

在CSDN学Golang云原生(Docker容器)

一&#xff0c;Doker 命令行操作 在Go语言中&#xff0c;可以通过调用Docker命令行工具来进行容器管理和操作。下面是一些基本的Docker命令行操作示例&#xff1a; 启动一个新容器 cmd : exec.Command("docker", "run", "-d", "nginx&qu…

C++(14):重载运算与类型转换

当运算符被用于类类型的对象时&#xff0c;允许我们为其指定新的含义&#xff1b;同时&#xff0c;也能自定义类类型之间的转换规则。和内置类型的转换一样&#xff0c;类类型转换隐式地将一种类型的对象转换成另一种我们所需类型的对象。 当运算符作用于类类型的运算对象时&a…

设计模式-策略模式

文章目录 策略模式 策略模式 策略模式是一种行为型设计模式&#xff0c;它允许在运行时动态改变对象的行为。在策略模式中&#xff0c;算法被封装在独立的策略类中&#xff0c;使得它们可以互换使用。下面是一个简单的例子&#xff1a; 假设我们有一个计算税收的系统&#xf…

2022年全国职业院校技能大赛高职组软件测试赛项赛题评分标准

任务 考查点 评分标准 评分细则 分值 任务一 环境搭建及系统部署 &#xff08;5分&#xff09; 环境搭建及系统部署包括搭建与配置测试环境&#xff0c;安装与部署应用系统等&#xff0c;对过程和结果进行截图&#xff0c;完成环境搭建及系统部署报告 1.测试环境搭建与…

小程序附件下载并预览功能

一、实现的功能&#xff1a; 1、word、excel、图片等实现下载并预览 2、打开文件后显示文件名称 二、代码&#xff1a; // 判断文件类型whatFileType(url) {let sr url.lastIndexOf("."); // 最后一次出现的位置let fileType url.substr(sr 1); // 截取url的…

超越传统测试:如何构建可靠的持续集成测试管道

超越传统测试&#xff1a;如何构建可靠的持续集成测试管道 引言 持续集成测试是现代软件开发中至关重要的一环&#xff0c;它可以帮助团队及时发现和解决代码问题&#xff0c;提高软件质量。然而&#xff0c;传统的测试方法往往存在效率低、容易出错等问题。本篇博客将介绍如…

Java接口通过token登录实现页面跳转到登录成功后的页面

首先&#xff0c;你需要在接口请求中将token作为参数传递给后端&#xff0c;后端需要对token进行验证并获取登录用户的信息。 在验证通过后&#xff0c;你可以将登录成功后的页面链接返回给前端&#xff0c;前端通过跳转到该链接来实现页面跳转。 以下是一个简单的Java代码演…

手机图片转pdf?两种方法介绍

手机图片转pdf&#xff1f;如今&#xff0c;随着生活的数字化&#xff0c;我们的手机中储存了大量的照片。但是&#xff0c;如果需要将这些照片转换成PDF格式&#xff0c;该怎么办呢&#xff1f;下面&#xff0c;小编就给大家介绍三种方法来实现这一目标。 第一种方法&#xff…

12页线性代数图解教程,github星标9.1k,适合小白

线性代数“困难户”注意&#xff0c;今天我给大家分享一个超适合小白的线性代数学习笔记&#xff0c;只有12页纸&#xff0c;一半都是图解&#xff0c;不用担心看不懂。 这份笔记名为《线性代数的艺术》&#xff0c;是日本学者Kenji Hiranabe基于Gilbert Strang教授的《每个人…