@TOC
前言
Qt是一个流行的跨平台的GUI开发框架,也提供了许多常用功能的封装,其中包括音频播放功能。在这篇文章中,我将介绍Qt的QMediaPlayer类,以及如何使用它来播放音频文件。
如想看到更多内容,请点击链接:Qt高级编程系列文章
提示:以下是本篇文章正文内容,下面案例可供参考
QMediaPlayer简介
QMediaPlayer类是Qt中专门用于音频和视频播放的类。它可以播放以多种格式存储的音频文件,如MP3、WAV、OGG等。要使用QMediaPlayer类,您需要在您的Qt项目中包含#include
QMediaPlayer使用方法
在使用前我们需要保证我们是否安装了QMedia组件,我们可以打开Qt安装路径->MaintenanceTool…进行安装。
我们需要的头文件:
QT += multimedia--->在.pro中
#include
申请对象:
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
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 { 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 #include #include #include 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应用程序更生动和更有趣!