目录
一、madplay
1.madplay指令
2.mdaplay编程
二、mplayer
1.mplayer指令
2.mplayer编程
三、ALSA
1.ALSA简介
2.ALSA编程
一、madplay 1.madplay指令madplay是一个开源的音频播放器,可以播放各种音乐格式的音频文件。
Ubuntu中madplay的安装命令:
sudo apt-get update sudo apt-get install madplay
播放指令:
madplay 音频文件路径
参数介绍:
设置音量:-a -175 ~ +18(播放时按+/-调节)
显示播放的时间:-v
循环播放:-r
传入多个音频文件:
随机播放:-z
上一首/下一首:b/f
控制madplay播放命令
开始: madplay 音频文件路径 &
停止: killall -KILL madplay &
暂停: killall -STOP madplay &
继续: killall -CONT madplay &
2.mdaplay编程在Qt程序中启动进程(QProcess)播放madplay。
QProcess相关介绍:
start :启动
kill :停止
waitForFinished :等待结束
state:状态
excute(命令,参数):停止进程执行的内容等待执行完指定程序后继续执行原内容
ui布局:
musicplayer.h文件
#ifndef MUSICPLAYER_H
#define MUSICPLAYER_H
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MusicPlayer; }
QT_END_NAMESPACE
class MusicPlayer : public QWidget
{
Q_OBJECT
public:
MusicPlayer(QWidget *parent = nullptr);
~MusicPlayer();
private slots:
void on_pushButton_play_clicked();
void on_pushButton_cancel_clicked();
void on_pushButton_addmusic_clicked();
void on_pushButton_deletemusic_clicked();
void on_pushButton_clearmusic_clicked();
void on_pushButton_stop_cont_clicked();
void on_pushButton_prev_clicked();
void on_pushButton_next_clicked();
void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
private:
Ui::MusicPlayer *ui;
QProcess *p;
//记录正在播放的音乐
QString current_music;
};
#endif // MUSICPLAYER_H
musicplayer.cpp文件
#include "musicplayer.h"
#include "ui_musicplayer.h"
#include
MusicPlayer::MusicPlayer(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MusicPlayer)
{
ui->setupUi(this);
p = new QProcess(this);
}
MusicPlayer::~MusicPlayer()
{
if(p->state()==QProcess::Running){
p->kill();
p->waitForFinished();
}
delete ui;
}
//播放
void MusicPlayer::on_pushButton_play_clicked()
{
//只有没有运行才开始播放
if(p->state()==QProcess::Running){
p->kill();
p->waitForFinished();
}
QString cmd = QString("madplay");
QStringList args;//参数
current_music = ui->listWidget->currentItem()->text();
argspushButton_stop_cont->setEnabled(true);
}
//停止
void MusicPlayer::on_pushButton_cancel_clicked()
{
if(p->state()==QProcess::Running){
p->kill();
p->waitForFinished();
}
ui->pushButton_stop_cont->setText("暂停");
ui->pushButton_stop_cont->setEnabled(false);
}
//添加音乐
void MusicPlayer::on_pushButton_addmusic_clicked()
{
QStringList music_files = QFileDialog::getOpenFileNames(this,"选择音乐文件","/music","*.mp3 *.WAV");
//去重
for(int i=0;ilistWidget->count();i++){
for(int j=0;jlistWidget->item(i)->text()==music_files.at(j)){
music_files.removeAt(j);
break;
}
}
}
//如果无添加文件,直接返回
if(music_files.isEmpty())
return;
//添加到listWidget
ui->listWidget->addItems(music_files);
//定位
ui->listWidget->setCurrentRow(0);
}
//删除音乐
void MusicPlayer::on_pushButton_deletemusic_clicked()
{
int row = ui->listWidget->currentRow();
//取出一项
QListWidgetItem *item = ui->listWidget->takeItem(row);
//删除的是正在播放的歌曲,停止播放
if(item->text()==current_music){
on_pushButton_cancel_clicked();
}
if(item){
delete item;
}
}
//清空
void MusicPlayer::on_pushButton_clearmusic_clicked()
{
ui->listWidget->clear();
on_pushButton_cancel_clicked();
}
//暂停
void MusicPlayer::on_pushButton_stop_cont_clicked()
{
QString cmd = "killall";
QStringList args;
if(ui->pushButton_stop_cont->text()=="暂停"){
argslistWidget->currentRow();
if(row==ui->listWidget->count()-1)
row = 0;
else
row++;
ui->listWidget->setCurrentRow(row);
//播放下一首
on_pushButton_play_clicked();
}
void MusicPlayer::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
//只有没有运行才开始播放
if(p->state()==QProcess::Running){
p->kill();
p->waitForFinished();
}
QString cmd = QString("madplay");
QStringList args;//参数
current_music = item->text();
argspushButton_stop_cont->setEnabled(true);
}
二、mplayer
1.mplayer指令
mplayer是一个免费开源的视频播放器,视频播放器提供视频解码并播放的功能,支持各种常见格式的视频,用法和madplay类似。
使用指令:
mplayer 视频文件路径
参数:
-quiet : 输出变化信息
-slave :后台命令处理模式
-geometry :指定播放位置(开发板无效)
-zoom -x ** -y ## :指定播放分辨率
-af volume=xxx :设置音量(-200 ~ +60)
2.mplayer编程使用Qt界面控制mplayer,和控制madplay一样,唯一的区别是需要预留播放视频图像的区域。
ui布局
mymplayer.h
#ifndef MYMPLAYER_H
#define MYMPLAYER_H
#include
#include
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MyMplayer; }
QT_END_NAMESPACE
class MyMplayer : public QWidget
{
Q_OBJECT
public:
MyMplayer(QWidget *parent = nullptr);
~MyMplayer();
private slots:
void on_pushButton_addvideo_clicked();
void on_pushButton_deletevideo_clicked();
void on_pushButton_clearvideo_clicked();
void on_pushButton_play_clicked();
void on_pushButton_cancel_clicked();
void on_pushButton_stop_cont_clicked();
void on_pushButton_prev_clicked();
void on_pushButton_next_clicked();
void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
private:
Ui::MyMplayer *ui;
QProcess *p;
//记录正在播放的视频
QString current_video;
};
#endif // MYMPLAYER_H
mymplayer.cpp
#include "mymplayer.h"
#include "ui_mymplayer.h"
#include
#include
#include
MyMplayer::MyMplayer(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MyMplayer)
{
ui->setupUi(this);
p = new QProcess(this);
}
MyMplayer::~MyMplayer()
{
if(p->state()==QProcess::Running){
p->kill();
p->waitForFinished();
}
delete ui;
}
//添加视频
void MyMplayer::on_pushButton_addvideo_clicked()
{
QStringList video_files = QFileDialog::getOpenFileNames(this,"选择视频文件","/video","*.mp4 *.avi");
//去重
for(int i=0;ilistWidget->count();i++){
for(int j=0;jlistWidget->item(i)->text()==video_files.at(j)){
video_files.removeAt(j);
break;
}
}
}
//如果无添加文件,直接返回
if(video_files.isEmpty())
return;
//添加到listWidget
ui->listWidget->addItems(video_files);
//定位
ui->listWidget->setCurrentRow(0);
}
//删除视频
void MyMplayer::on_pushButton_deletevideo_clicked()
{
int row = ui->listWidget->currentRow();
//取出一项
QListWidgetItem *item = ui->listWidget->takeItem(row);
//删除的是正在播放的歌曲,停止播放
if(item->text()==current_video){
on_pushButton_cancel_clicked();
}
if(item){
delete item;
}
}
void MyMplayer::on_pushButton_clearvideo_clicked()
{
ui->listWidget->clear();
on_pushButton_cancel_clicked();
}
//播放
void MyMplayer::on_pushButton_play_clicked()
{
//只有没有运行才开始播放
if(p->state()==QProcess::Running){
p->kill();
p->waitForFinished();
}
QString cmd = QString("mplayer");
QStringList args;//参数
current_video = ui->listWidget->currentItem()->text();
argslistWidget->count()-1)
row = 0;
else
row++;
ui->listWidget->setCurrentRow(row);
//播放下一首
on_pushButton_play_clicked();
}
//双击播放
void MyMplayer::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
//只有没有运行才开始播放
if(p->state()==QProcess::Running){
p->kill();
p->waitForFinished();
}
QString cmd = QString("mplayer");
QStringList args;//参数
current_video = item->text();
args
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?