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还是一个有一系列计算机软件和规…

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…

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

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

手机图片转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教授的《每个人…

JS常用操作数组的方法整理

JavaScript提供了许多用于操作数组的方法。以下是其中一些常见的方法&#xff1a; 1. push() : 将一个或多个元素添加到数组的末尾&#xff0c;并返回新数组的长度。 2. pop() : 移除并返回数组的最后一个元素。 3. unshift() : 将一个或多个元素添加到数组的开头&#xff0…

Lambda表达式常见的Local variable must be final or effectively final原因及解决办法

目录 Local variable must be final or effectively final错误原因 解决办法按照要求定义为final&#xff08;不符合实情&#xff0c;很多时候是查库获取的变量值&#xff09;使用原子类存储变量&#xff0c;保证一致性AtomicReference常用原子类 其它 Local variable must be …

为什么要有虚拟内存?

操作系统是通过内存分段和内存分页的方式管理虚拟内存地址和物理内存地址之间的关系 内存分段 程序是由若干个逻辑分段组成的&#xff0c;代码分段、数据分段、栈段、堆段组成&#xff0c;不同的段有不同的属性&#xff0c;所以就用分段的形式分离开。 分段机制下的虚拟内存…

JVM理论(七)性能监控与调优

概述 性能优化的步骤 性能监控&#xff1a;就是通过以非强行或入侵方式收集或查看应用程序运行状态,包括如下问题 GC频繁CPU过载过高OOM内存泄漏死锁程序响应时间较长性能分析&#xff1a;通常在系统测试环境或者开发环境进行分析 通过查看程序日志以及GC日志,或者运用命令行工…

《零基础入门学习Python》第070讲:GUI的终极选择:Tkinter7

上节课我们介绍了Text组件的Indexs 索引和 Marks 标记&#xff0c;它们主要是用于定位&#xff0c;Marks 可以看做是特殊的 Indexs&#xff0c;但是它们又不是完全相同的&#xff0c;比如在默认情况下&#xff0c;你在Marks指定的位置中插入数据&#xff0c;Marks 的位置会自动…

yaml语法详解

#kv #对空格的严格要求十分高 #注入到我们的配置类中 #普通的keyvalue name: qinjiang#对象 student:name: qingjiangage: 3#行内写法 student1: {name: qinjiang,age: 3}#数组 pets:- cat- dog- pigpet: [cat,dog,pig]yaml可以给实体类赋值 person:name: kuangshenage: 19happ…

ERROR 1064 - You have an error in your SQL syntax;

ERROR 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near (/, 少个逗号吧&#xff0c;以前开始写SQL&#xff0c;特别是修改SQL的时候容易出现这样错误。 而且自己也知道在附近…

【深度学习】日常笔记15

训练集和测试集并不来⾃同⼀个分布。这就是所谓的分布偏移。 真实⻛险是从真实分布中抽取的所有数据的总体损失的预期&#xff0c;然⽽&#xff0c;这个数据总体通常是⽆法获得的。计算真实风险公式如下&#xff1a; 为概率密度函数 经验⻛险是训练数据的平均损失&#xff0c;⽤…

【MySQL主从复制】

目录 一、MySQL Replication 1.概述 2.优点 二、MySQL复制类型 1.异步复制&#xff08;Asynchronous repication&#xff09; 2.全同步复制&#xff08;Fully synchronous replication&#xff09; 3.半同步复制&#xff08;Semisynchronous replication&#xff09; 三…