Qt之QMediaPlayer音频播放
@TOC
前言
Qt是一个流行的跨平台的GUI开发框架,也提供了许多常用功能的封装,其中包括音频播放功能。在这篇文章中,我将介绍Qt的QMediaPlayer类,以及如何使用它来播放音频文件。
如想看到更多内容,请点击链接:Qt高级编程系列文章
提示:以下是本篇文章正文内容,下面案例可供参考
QMediaPlayer简介
QMediaPlayer类是Qt中专门用于音频和视频播放的类。它可以播放以多种格式存储的音频文件,如MP3、WAV、OGG等。要使用QMediaPlayer类,您需要在您的Qt项目中包含#include <QMediaPlayer>
文件。
QMediaPlayer使用方法
在使用前我们需要保证我们是否安装了QMedia组件,我们可以打开Qt安装路径->MaintenanceTool…进行安装。
我们需要的头文件:
QT += multimedia--->在.pro中
#include <QMediaPlayer> --->在头文件/源文件中
申请对象:
player = new QMediaPlayer;
设置播放源:
一旦创建了QMediaPlayer对象,您就可以使用它来播放音频文件。请注意,要播放音频文件,您首先需要将文件的路径(绝对路径或相对路径)传递给QMediaPlayer对象。在此之后,您可以通过以下方式播放音频文件:
player->setMedia(QUrl::fromLocalFile(path));
设置音量:
默认值为100
范围为0~100
player->setVolume(n);
开始:
player->play();
暂停:
player->pause();
停止:
player->stop();
暂停和停止的区别:
- 暂停:下次播放时从暂停的位置开始播放‘
- 停止:下次播放时从0开始播放
获取音频总时长:
当我们选择文件play()后,他会发送durationChanged信号,标志着已经计算好了音频的总时长,参数为音频时长,单位为ms
connect(player,&QMediaPlayer::durationChanged,this,&MainWindow::onDrtChg);
void MainWindow::onDrtChg(qint64 drt)
{
int sec = drt/1000;
int min = sec/60;
sec = sec%60;//余数为秒
}
获取音频播放的时长:
connect(player,&QMediaPlayer::positionChanged,this,&MainWindow::onPstCha);
void MainWindow::onPstCha(qint64 pos)
{
int sec = pos/1000;
int min = sec/60;
sec = sec%60;//余数为秒
}
和获取总时长是一样的,只不过他每秒都会发送这个信号positionChanged,参数为现在的播放时间,单位为ms。
设置倍数:
player->setPlaybackRate(qreal rate);
此属性保存当前媒体的播放速率。
此值是应用于媒体标准播放速率的乘数。默认情况下,此值为 1.0,表示媒体正在以标准速度播放。高于 1.0 的值将增加播放率。可以设置小于零的值,并指示媒体将以标准配速的乘数倒带。
并非所有播放服务都支持更改播放速率。它是在快进或快退时定义音频和视频的状态和质量的框架。
具体使用我们后面会带大家写。
设置现在播放的地方:
单位为ms
player->setPosition(n);
QMediaPlayList使用方法
在日常的音频播放软件,都有一个歌曲列表,他允许我们上下切换歌曲,QMediaPlayList的功能就是这个。
申请对象:
playlist = new QMediaPlaylist;
添加播放源:
playlist->addMedia(QUrl("music.mp3"));
设置播放下标:
playlist->setCurrentIndex(1);
把QMediaPlayList设置进QMediaPlay中:
player->setPlaylist(playlist);
当需要上、下歌曲的时候,只需要先获取当前的index,然后++,取余count().
简单的mp3播放器
.ui:
槽函数大家根据自己的变量名来连接就可以了
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
player = new QMediaPlayer(this);
player->setPlaylist(MusicPath);
connect(player,&QMediaPlayer::durationChanged,this,&MainWindow::onDrtChg);
connect(player,&QMediaPlayer::positionChanged,this,&MainWindow::onPstCha);
}
//获取音频总时长
void MainWindow::onDrtChg(qint64 drt)
{
qDebug() << "onDrtChg(qint64 drt)" << drt;
ui->horizontalSlider_2->setMaximum(drt);
int sec = drt/1000;
int min = sec/60;
sec = sec%60;//余数为秒
drtTime = QString::asprintf("%d:%d",min,sec);
ui->label_2->setText(pstTime+QString("/")+drtTime);
}
//获取现在位置
void MainWindow::onPstCha(qint64 pos)
{
if(ui->horizontalSlider_2->isSliderDown())//当进度条被拖动时,退出,不进行下面的操作
return ;
ui->horizontalSlider_2->setSliderPosition(pos);
int sec = pos/1000;
int min = sec/60;
sec = sec%60;//余数为秒
pstTime = QString::asprintf("%d:%d",min,sec);
ui->label_2->setText(pstTime+QString("/")+drtTime);
qDebug() << ui->label_2->text();
}
MainWindow::~MainWindow()
{
delete ui;
}
//设置音量
void MainWindow::on_horizontalSlider_valueChanged(int value)
{
player->setVolume(value);
}
//选择文件
void MainWindow::on_pushButton_clicked()
{
QFileDialog f;
f.setAcceptMode(QFileDialog::AcceptOpen);
f.setNameFilter(tr("Music (*.mp3 *.wav)"));
if(f.exec() == QFileDialog::Accepted)
{
QStringList l = f.selectedFiles();
for(int i = 0;i<l.count();i++)
{
MusicPath.addMedia(l[i]);
player->setMedia(QUrl::fromLocalFile(l[i]));
ui->listWidget->addItem(QFileInfo(l[i]).fileName());
ui->label->setText(QFileInfo(l[i]).fileName());
}
MusicPath.next();
}
player->play();
}
//开启
void MainWindow::on_pushButton_2_clicked()
{
player->play();
}
//暂停
void MainWindow::on_pushButton_3_clicked()
{
player->pause();
}
//停止
void MainWindow::on_pushButton_4_clicked()
{
player->stop();
}
//下一曲
void MainWindow::on_pushButton_5_clicked()
{
MusicPath.next();
}
//上一曲
void MainWindow::on_pushButton_6_clicked()
{
MusicPath.previous();
}
//禁音按钮
void MainWindow::on_pushButton_7_clicked(bool checked)
{
if(checked)
{
player->setVolume(this->volum);
ui->horizontalSlider->setValue(this->volum);
}
else
{
this->volum = ui->horizontalSlider->value();
ui->horizontalSlider->setValue(0);
}
}
//当点击列表上的东西时播放
void MainWindow::on_listWidget_currentRowChanged(int currentRow)
{
playlist->setCurrentIndex(currentRow);
}
//设置位置
void MainWindow::on_horizontalSlider_2_valueChanged(int value)
{
player->setPosition(value);
}
mainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMediaPlayer>
#include <QFileDialog>
#include <QMediaPlaylist>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
QMediaPlayer *player;
QMediaPlaylist MusicPath;//歌曲路径列表
QString drtTime;//歌曲时长
QString pstTime;//播放位置
int volum;//音量
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
private slots:
void onDrtChg(qint64 drt);//歌曲时长
void onPstCha(qint64 pos);//播放位置
void on_horizontalSlider_valueChanged(int value);
void on_pushButton_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
void on_pushButton_7_clicked(bool checked);
void on_listWidget_currentRowChanged(int currentRow);
void on_horizontalSlider_2_valueChanged(int value);
};
#endif // MAINWINDOW_H
总结
Qt的QMediaPlayer类是播放音频文件的强大工具。您可以使用它轻松地播放多种格式的音频文件,并附加功能如音量调整和状态响应。在其中使用您的音频文件,使您的Qt应用程序更生动和更有趣!
- 点赞
- 收藏
- 关注作者
评论(0)