当前位置: 首页 > article >正文

Qt仿音乐播放器:媒体类

一、铺垫

我暂时只会音频系列的操作,我只能演示音频部分;但是QMediaPlayer是一个可以播放视频、音频的类;请同学们细读官方文档;

二、头文件

#include<QMediaPlayer>        头文件

#include<QMediaPlaylist>

三、演示 

我会先演示套路;再补充细节:

QMediaPlayer* player=new QMediaPlayer(this); //创建对象,并挂在对象树上
QMediaPlaylist* playList=new QMediaPlaylist(this);//创建对象,并挂在对象树上

//2.设置默认播放模式
playList->setPlaybackMode(QMediaPlaylist::Random);//设置播放回放模式为随机循环

//3.将播放列表设置到播放媒体对象中;
player->setPlaylist(playList);

细节:

QMediaPlayer:我愿意称之为是一个播放者

QMediaPlaylist:称之为播放列表

当将播放列表设置到播放者里时,播放者就是按照播放列表来依次播放内容

四、常用函数

请原谅我使用英文,允许我解释

1.软件是外国的,我翻译再牛逼,也是半吊子,带有我自己的个人色彩;

2.我行告诉诸位同学;都是从官方文档中找的,请诸君共勉;

3.1 播放者常用函数

QMediaPlayer* player=new QMediaPlayer(this); //创建播放者,并挂在对象树上

player->setVolume(20);        //设置默认音量大小-默认设置成20%

player->state()                      //获取播放者的状态;播放、暂停或停止状态

player->setMuted(bool);       //设置是否静音

play->play()                          //Start or resume playing the current source.音乐播放

player->pause()                   //Pause playing the current source.音乐停止

player->stop()                      //Stop playing, and reset the play position to the beginning

                                            //停止播放,并将播放位置重置为刚开始的位置;

player->setPlaylist(playList);//将播放列表设置到播放媒体对象中;

3.2 信号

[signal]QMediaPlayer::stateChanged(QMediaPlayer::State state)        //当播放者状态改变//时,发出信号;比如播放暂停,播放开始,播放停止,状态由一个变为另一个,信号发射

[signal]QMediaPlayer::durationChanged(qint64 duration)       //当媒体源的时间发生改变,发出信号实际就是你切歌时,两首歌曲时间改变,发出信号

[signal] void QMediaPlayer::positionChanged(qint64 position) //歌曲播放时,时间在变化

                //因为是二进制流,所以位置变化,发出信号;

[signal] void QMediaObject::metaDataAvailableChanged(bool available)//媒体源成功获取并

                //改变,发出信号;

 通过原数据抓取歌曲封面——这个这是绝了

//获取封面图,通过元数据来获取
QVariant coverimage = player->metaData("ThumbnailImage");//获取缩略图if(coverimage.isValid()){
QImage image=coverimage.value<QImage>();
ui->musicCover->setPixmap(QPixmap::fromImage(image));
currentPage->setMusicImage(QPixmap::fromImage(image));
}
else{
qDebug()<<"歌曲没有封面图";
//可以设置成默认的图片
QString path=":/image/rec/031.png";
ui->musicCover->setPixmap(path);
currentPage->setMusicImage(path);
}

3.3播放列表常用函数 

QMediaPlaylist* playList=new QMediaPlaylist(this);//创建对象,并挂在对象树上

playList->setPlaybackMode(QMediaPlaylist::Random);//设置播放回放模式为随机循环 playList->clear();//清空之前playlist中的歌曲

playList->addMedia(music.getMusicUrl());        //向播放列表中添加播放源的Url

playList->setCurrentIndex(index);//默认从第0首开始播放

playList->previous();//Return to the previous media content in playlist.上一曲

playList->next(const QMediaContent &content);//Advance to the next media content in                                                                                     //playlist.下一曲;

playList->playbackMode()//获取当前的播放模式;

3.4信号

[signal] void QMediaPlaylist::playbackModeChanged(QMediaPlaylist::PlaybackMode mode)

//播放模式发生改变时,发出信号;随机模式,循环模式,单曲循环模式

[signal] void QMediaPlaylist::currentIndexChanged(int position)//切换歌曲时,当前的索引会发生改变,,发出信号;

3.5addMedia();细节

那么如何往播放列表里填充数据呢?此类中有一个函数时addMedia();向播放列表中添加媒体源(所谓的添加媒体源;并不是真正的把二进制数据加载到内存;而是给了一个地址)

playList->addMedia(music.getMusicUrl());

 他有两个重载类型,一个是单纯的类,一个是填一个容器类;我们单讲第一个;

bool QMediaPlaylist::addMedia(const QMediaContent &content)

bool QMediaPlaylist::addMedia(const QList<QMediaContent> &items)

QMediaContent的构造函数

QMediaContent(const QUrl &url)       

 这就与我们前面所讲的QUrl连在一起;使用QUrl来构建QMediaContent,再构建QMediaPlaylist播放列表;


http://www.kler.cn/a/487511.html

相关文章:

  • PostgreSQL 18新特性之uuidv7函数
  • vue el-table 数据变化后,高度渲染问题
  • Flutter:打包apk,安卓版本更新(二)
  • imageio 图片转mp4 保存mp4
  • 比较procfs 、 sysctl和Netlink
  • SQL Server中可以通过扩展事件来自动抓取阻塞
  • 降噪去噪学习流程和算法分类总结
  • 6 分布式限流框架
  • 蓝桥杯 第十五届 研究生组 B题 召唤数学精灵
  • C# 使用iText 编辑PDF
  • Golang学习笔记_23——error补充
  • AI绘画:Midjourney和stable diffusion到底有什么区别?
  • 基于单片机的空调温度测试测控系统设计
  • es 单个节点cpu过高
  • EasyExcel(二)导出Excel表自动换行和样式设置
  • 大数据高级ACP学习笔记(3)
  • 腾讯云AI代码助手编程挑战赛-武器大师
  • 109周四复盘 (183)慢速
  • Spring AMQP-lazy队列
  • spring boot controller放到那一层
  • mysql连表查询报Illegal mix of collations (utf8mb4_general_ci,IMPLICIT)
  • stringRedisTemplate.execute执行lua脚本
  • TypeScript语言的数据结构
  • Mongodb基础sqL
  • 21天掌握javaweb-->第20天:项目总结与文档编写
  • MySQL —— 在CentOS9下安装MySQL