DAY10-音频播放

319 阅读2分钟

二.Qt的音频

image-20220826210702474

1.madplay

madplay是一个开源的音频播放器,可以播放各种音乐格式的音频文件。

Ubuntu中madplay的安装命令:
    sudo apt-get update
    sudo apt-get install madplay

madplay 音频文件路径

设置音量:-a -175 ~ +18(播放时按+/-调节)
显示播放的时间:-v
循环播放:-r
传入多个音频文件:
    随机播放:-z
    上一首/下一首:b/f

练习:

实现开发板和Ubuntu上音乐的播放

虚拟机网络配置:

1.设置为NAT共享模式
2.设置IP获取方式为自动

控制madplay播放命令

开始:
    madplay 音频文件路径 &
停止:
    killall -KILL madplay &
暂停:
    killall -STOP madplay &
继续:
    killall -CONT madplay &      

2.Qt中如何控制音频播放

(1)在Qt程序中启动进程(QProcess)播放madplay

成员函数:
    start -------- 启动
    kill --------- 停止
    waitForFinished ---------- 等待结束 
    state -------- 状态
    excute(命令,参数); -------- 停止进程执行的内容等待执行完指定程序后继续执行原内容  

练习:

实现Qt madplay的上一首和双击播放的功能

双击listWIdget信号 -------- itemDoubleClicked

3.Qt中的对媒体模块(开发板上没有)

(1)简介

QMediaPlayer是Qt预定义的播放多媒体文件的类,可以播放各类音视频文件,比如mp3,mp4,avi,WAV......,既可以播放单个文件,也可以和QMediaPlayerlist(播放列表)相结合,对一个播放列表进行播放。

多媒体相关的类属于多媒体模块,使用时需要在项目文件中手动添加,开发板没有该模块。

QT += multimedia

(2)QMediaPlayer类的介绍

1)设置播放的媒体/播放列表

//设置播放的媒体
[slot] void QMediaPlayer::setMedia(const QMediaContent &media, QIODevice *stream = nullptr);
//设置播放列表
void setPlaylist(QMediaPlaylist *playlist);

//播放列表需要设置播放模式,使用播放列表的成员函数设置

void setPlaybackMode(QMediaPlaylist::PlaybackMode mode);

2)播放,停止,暂停

play() ------- 播放
stop() ------- 停止
pause() ------ 暂停

练习:

完成下一首的功能

3)获取当前播放的媒体,设置音量,设置进度

//当前播放媒体
QMediaContent currentMedia() const;
//设置音量
void setVolume(int volume);
//设置进度
void setPosition(qint64 position);

信号:

1)状态改变

[signal] void QMediaPlayer::stateChanged(QMediaPlayer::State state);

image-20220826210722501

2)播放媒体改变

[signal] void QMediaPlayer::currentMediaChanged(const QMediaContent &media);

3)播放周期(总长度)改变

[signal] void QMediaPlayer::durationChanged(qint64 duration);              

4)播放进度改变

[signal] void QMediaPlayer::positionChanged(qint64 position);

(3)QMediaPlaylist介绍

成员函数:

1.添加媒体
    bool QMediaPlaylist::addMedia(const QMediaContent &content);
2.删除媒体
    bool QMediaPlaylist::removeMedia(int pos);
3.清空媒体
    bool QMediaPlaylist::clear();
4.设置当前媒体
    [slot] void QMediaPlaylist::setCurrentIndex(int playlistPosition);

作业:

1.完成音乐播放时显示当前播放时间

附加:2.将周期和进度显示为 mm:ss 的格式