简介
使用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