QMediaplayer可以用于解析音频文件和视频文件,继承自QMediaObject,设计到的对象为QMediaContent。QMediaObject可以提供关于媒体内容的接入,通过URL进行初始化,同时也可以提供可以播放的媒体文件的列表,与QMediaplayer对象息息相关。使用QMediaplayer,除了需要添加必要的头文件之外,还需要在.pro(Qt的工程配置文件)添加QT += multimedia。下面解析有关QMediaplayer的相关知识。

  • Type Information

QMediaplayer中枚举了有关于在读取和播放文件是可能出现的状态,首先是错误信息

enum QMediaPlayer::Error

以及media player的状态(state)信息

enum QMediaPlayer::State

以及与state信息息息相关的status信息:

enum QMediaPlayer::MediaStatus

  • 相关信号和函数

当然了,在获取到媒体内容,需要进行播放或者进行播放时,获取状态信息的改变是必不可少的。这些包含了是否正在播放,是否暂定播放,是否已经播放完毕等。

因此需要及时的了解这些信息,因此会比较注意一些几组信号:

  • void positionChanged(qint64 position)
  •  void stateChanged(QMediaPlayer::State state)
  • void durationChanged(qint64 duration)
  • void metaDataAvailableChanged(bool available)

positionChanged信号监视着属性postiion,可读可写属性。可以通过改变position的位置,从而实现快进和后退的功能。durationChanged信号是记录持续时间

duration的变换,为可读属性。metaDavaAvailableChaned()信号。当QMediaplayer读入到媒体文件式,就会触犯这个信号。我们就可以以此信号,读入媒体文件的

相关信息。读入相关信息可以QVariant QMediaObject::metaData(const QString & key) const来实现。其中key的类型有:Author,Title等类型。因为太多,

不便全部列出。完整列表:QMediaMetaData Namespace

以上是有关以及以下将会介绍到的案例的基本知识点。下面是实现简易播放的实现。

#ifndef AUDIOPLAYER_H
#define AUDIOPLAYER_H#include <QWidget>
#include <QMediaPlayer>
QT_FORWARD_DECLARE_CLASS(QLabel)
QT_FORWARD_DECLARE_CLASS(QSlider)
QT_FORWARD_DECLARE_CLASS(QToolButton)
class denoiser;class audioplayer : public QWidget
{Q_OBJECT
public:explicit audioplayer(QWidget *parent = 0);signals:public slots:void openFile();void playFile(const QString& filePath);void togglePlayback();void seekForward();void seekBackward();private slots:void updateState(QMediaPlayer::State state);void updatePosition(qint64 position);void updateDuration(qint64 duration);void setPosition(int position);void updateInfo();private:void createWidgets();QMediaPlayer mediaPlayer;QToolButton *playButton;QToolButton *forwardToolButton;QToolButton  *backwardToolButton;QToolButton *openfileButton;QSlider *positionSlider;QLabel *positionLabel;QLabel *infoLabel;denoiser *denoiserWidget;
};#endif // AUDIOPLAYER_H

对头文件函数中函数功能的Descrption:

1-1、 功能按钮的函数的描述:

    void openFile();void playFile(const QString& filePath);void togglePlayback();void seekForward();void seekBackward();

第一个是实现文件打开,获取音频文件路径的功能。

第二个是通过获取的路径,播放文件的功能

第三个是实现暂停播放和继续播放的功能。

第四个是实现前进和后退的功能。

1-2、功能按钮的具体实现方式:

void audioplayer::openFile()
{const QStringList musicPaths = QStandardPaths::standardLocations(QStandardPaths::MusicLocation);const QString filePath =QFileDialog::getOpenFileName(this, tr("Open File"),musicPaths.isEmpty() ? QDir::homePath() : musicPaths.first(),tr("MP3 files (*.mp3);;All files (*.*)"));if (!filePath.isEmpty())playFile(filePath);
}void audioplayer::playFile(const QString &filePath)
{playButton->setEnabled(true);infoLabel->setText(QFileInfo(filePath).fileName());mediaPlayer.setMedia(QUrl::fromLocalFile(filePath));mediaPlayer.play();
}void audioplayer::togglePlayback()
{if (mediaPlayer.mediaStatus() == QMediaPlayer::NoMedia)openFile();else if (mediaPlayer.state() == QMediaPlayer::PlayingState)mediaPlayer.pause();elsemediaPlayer.play();
}void audioplayer::seekForward()
{positionSlider->triggerAction(QSlider::SliderPageStepAdd);
}void audioplayer::seekBackward()
{positionSlider->triggerAction(QSlider::SliderPageStepSub);
}

2-1、文件播放时信息的更新和获取

信息的获取和更新肯定是以事件驱动的方式进行的,那么在qt中,实现方式肯定就是信号与槽啦,因此定义了以下几组获取和更新信息的槽:

    void updateState(QMediaPlayer::State state);void updatePosition(qint64 position);void updateDuration(qint64 duration);void setPosition(int position);void updateInfo();

1、updateState是通过对媒体播放状态,即PlayingState以及PauseState和StopState对playButton设置不同的显示状态,即暂停图标和播放图标。

2、updatePosition是通过监视对媒体播放进度的监视,从而控制滑动条的显示状态和位置。

3、updataDuration是用来设置滑动条的范围的

4、setPosition是通过滑块拉动实现对音频文件播放进度的控制

5、upDateInfo是显示对媒体文件信息的获取和现实。

2-2 信息获取和更新的实现

void audioplayer::updateState(QMediaPlayer::State state)
{if (state == QMediaPlayer::PlayingState) {playButton->setToolTip(tr("Pause"));playButton->setIcon(QIcon(":/images/pause.png"));} else {playButton->setToolTip(tr("Play"));playButton->setIcon(QIcon(":/images/play.png"));}
}void audioplayer::updateDuration(qint64 duration)
{positionSlider->setRange(0,duration);positionSlider->setEnabled(duration>0);positionSlider->setPageStep(duration/10);
}void audioplayer::updatePosition(qint64 position)
{positionSlider->setValue(position);QTime duration(0, position / 60000, qRound((position % 60000) / 1000.0));positionLabel->setText(duration.toString(tr("mm:ss")));
}void audioplayer::setPosition(int position)
{if (qAbs(mediaPlayer.position() - position) > 99)mediaPlayer.setPosition(position);
}
void audioplayer::updateInfo()
{QStringList info;QString author = mediaPlayer.metaData("Author").toString();if (!author.isEmpty())info += author;QString title = mediaPlayer.metaData("Title").toString();if (!title.isEmpty())info += title;if (!info.isEmpty())infoLabel->setText(info.join(tr(" - ")));
}

以上是所有代码的实现方式和具体讲解,需要完整的代码的,可以去点击打开链接进行下载。实现效果如图:

QMediaplayer详解以及简易音乐播放实现相关推荐

  1. Qt使用QMediaplayer实现视频播放和简易音乐播放

    QMediaplayer可以用于解析音频文件和视频文件,继承自QMediaObject,设计到的对象为QMediaContent.QMediaObject可以提供关于媒体内容的接入,通过URL进行初始 ...

  2. PyQt5实现简易音乐播放器

    PyQt5实现简易音乐播放器 环境 vscode python 3.10.0 PyQt5 5.15.4 功能目标 能够读取本地的音乐文件,并实现播放的开关.曲目的切换和音量的加减 具体实现 新建一个文 ...

  3. JavaScript + Audio API自制简易音乐播放器(详细完整版、小白都能看懂)

    JavaScript + Audio API自制简易音乐播放器(详细完整版) ** 音乐播放器的功能清单如下: ** 1.点击暂停按钮,歌曲暂停 2.点击播放按钮,歌曲播放 3.单曲循环与取消单曲循环 ...

  4. html实现简易音乐播放器

    目标: 使用vue.js导包的形式做一个简单的音乐播放器,新手也很容易看懂. 内容: 1. 使用了flex实现响应式布局: 2. 使用min-width防止字体被压缩: 3. 使用computed计算 ...

  5. Android Studio简易音乐播放器设计作业

    Android Studio简易音乐播放器设计作业 实验成功展示 实验代码 MainActivity.java XML文件 class文件 利用BroadcastReceiver模拟音乐播放器,实现播 ...

  6. 单片机音乐播放器课程设计C语言,单片机课程设计简易音乐播放器

    单片机课程设计简易音乐播放器 论文题目:简易音乐播放器所属系部:电子工程系 指导教师: 学生姓名: 学 号: 专 业: 电子信息工程技术 题目: 简易音乐播放器任务与要求:本设计以 MCS-51 系列 ...

  7. 【毕业设计】28-基于单片机的音乐播放器简易音乐播放器设计(原理图+源代码+仿真工程+答辩PPT+答辩论文)

    typora-root-url: ./ [毕业设计]28-基于单片机的音乐播放器简易音乐播放器设计(原理图+源代码+仿真工程+答辩PPT+答辩论文) 文章目录 typora-root-url: ./ ...

  8. 【微信小程序】简易音乐播放器,进度条拖拉、音乐的播放与暂停

    小程序简易音乐播放器实现 粗糙的页面设计: wxml部分: <view class="test"><view class="img">& ...

  9. 利用Broadcast及相关组件实现简易音乐播放器功能

    目录 前言 项目源码 准备工作 代码编写 页面布局 Service类的创建 主函数的编写 项目心得 前言 在Andriod Studio中使用Broadcast实现了简易音乐播放器的功能.可以进行播放 ...

最新文章

  1. Bable实现由ES6转译为ES5
  2. 结构体与共用体(联合体)
  3. 2012禁用ip隧道 win_Windows 7下关闭IPV6隧道的技巧方法
  4. Android 隐藏环形进度条,Android环形进度条
  5. 自然语言处理--中文文本向量化counterVectorizer()
  6. 谷歌浏览器设置护眼模式,全黑主题
  7. iphone之参数知识(一)
  8. python实现对遥感影像经纬度获取并实现海陆分离
  9. 四年程序员的常用工具清单
  10. 《Google Android 开发入门与实战》
  11. 用java做出聊天工具
  12. Java实现 LeetCode 502 IPO(LeetCode:我疯起来连自己都卖)
  13. 如何在Windows系统中设置Python程序定时运行
  14. 启明星辰:安全管理平台(SOC)
  15. 市场暴跌“祸害”DeFi,市场完善之后将更具抵抗力 | 分析
  16. 【四面体数】 直角三棱锥
  17. springcloud学习——zookeerper
  18. 软件测试实验室质量监督计划,试验室质量监督计划
  19. oracle votedisk ocr,asm如何更换ocr和votedisk到新存储 – OracleBlog
  20. PROUSBV9智能门锁注册教程

热门文章

  1. mysql辅助索引非叶子节点_Mysql的聚集索引与辅助索引
  2. Java 七参数计算
  3. html中图片鼠标滑动的效果,JS DOM实现鼠标滑动图片效果
  4. 4 书写规则
  5. 【1235. 规划兼职工作】
  6. 27个最佳Beaver Builder主题和模板(2020)
  7. 视频编码第一节:H.265/HEVC原理——入门
  8. python增删改查mysql_python之mysql的增删改查
  9. Snipe IT资产管理系统(phpstudy_pro)搭建笔记
  10. 基于OpenCV双边滤波器的人脸美化 .