QT中制作音乐播放器

文章介绍了如何将MPlayer播放器移植到ARM开发板的/bin目录下,并设置了必要的权限。MPlayer是一款开源的多媒体播放器,支持多种操作系统和输出设备。文章详细阐述了MPlayer的基本使用,包括键盘控制和slave模式下的命令控制,提供了常用命令的示例。此外,还展示了一个基于Qt的GUI界面,用于控制MPlayer的播放、暂停、音量调节等操作。
摘要由CSDN通过智能技术生成

mplayer播放器下载

链接:https://pan.baidu.com/s/1Ln_Xyrn7uiUJWBnahTeQ2Q 
提取码:k86r

在ARM开发板平台 将编译好的mplayer播放器 移植到开发板的 根目录下 /bin 里面

[root@GEC6818 /bin]#chmod 777 mplayer //设置mplayer的权限

注:下载进开发板里的音乐也需要加权限

mplayer播放器介绍和基本使用

1、介绍

MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布。此款软件可在各主流操作系统使用,例如Linux和其他类Unix系统、Windows及Mac OS X系统。

MPlayer建基于命令行界面,在各操作系统也可选择安装不同的图形界面。mplayer的另一个大的特色是广泛的输出设备支持。它可以在X11、Xv、DGA、OpenGL、SVGAlib、fbdev、AAlib、DirectFB下工作,且能使用GGI和SDL和一些低级的硬件相关的驱动模式(比如Matrox、3Dfx和Radeon、Mach64、Permedia3)。MPlayer还支持通过硬件MPEG解码卡显示,如DVB 和DXR3与Hollywood+。

MPlayer的开发始于2000年。最初的作者是 Arpad Gereoffy。MPlayer最初的名字叫"MPlayer - The Movie Player for Linux",不过后来开发者们简称其为"MPlayer - The Movie Player",原因是MPlayer已经不仅可以用于Linux而可以在所有平台上运行。

基本使用方法

默认mplayer是从键盘上获得控制信息。mplayer另外提供了一种更为灵活的控制方式,用来进行播放控制——slave模式。

在slave模式下,MPlayer为后台运行其他程序,不再截获键盘事件,MPlayer会从标准输入读一个换行符(\n)分隔开的命令。

键盘控制方式

<- or ->                  后退/快进 10 秒

down or up            后退/快进 1 分钟

pgdown or pgup    后退/快进 10 分钟

< or >                    跳到播放列表中的前一个/后一个

p or SPACE          暂停播放(按任意键继续)

q or ESC              停止播放并退出程序

or -                       调整音频延迟增加/减少 0.1 秒

o                          循环 OSD 模式: 无/搜索条/搜索条加计时器

or /                       增加或减少 PCM 音量

x or z                   调整字幕延迟增加/减少 0.1 秒

r or t                    上/下调整字幕位置, 参见“-vf expand”

slave 命令后台处理模式

[root@GEC6818 ~]#mplayer -input cmdlist ---会打印出一份当前mplayer所支持的所有slave模式的命令

MPlayer 1.0rc2-4.5.1 (C) 2000-2007 MPlayer Team

CPU: ARM

seek                                 Float [Integer] ----快进 、快退

edl_mark

audio_delay                     Float [Integer]

speed_incr                       Float

speed_mult                      Float

speed_set                        Float

quit                                   [Integer]         退出

pause                                                     暂停、继续播放

frame_step

pt_step                            Integer [Integer]

pt_up_step                      Integer [Integer]

alt_src_step                    Integer

loop                                 Integer [Integer]

sub_delay                       Float [Integer]

sub_step                         Integer [Integer]

osd                                  [Integer]

osd_show_text                String [Integer] [Integer]

常用的命令:

loadfile string //参数string 为 歌曲名字。

volume 100 1//设置音量 中间的为音量的百分比

mute 1/0//静音开关

pause//暂停/取消暂停

get_time_length//返回值是播放文件的长度,以秒为单位。

seek value //向前查找到文件的位置播放 参数value为秒数。 比如 快进: "seek +10\n" 快退:"seek -10\n"

get_percent_pos//返回文件的百分比(0--100)

get_time_pos//打印出在文件的当前位置用秒表示,采用浮点数

volume <value> [abs] //增大/减小音量,或将其设置为<value>,如果[abs]不为零   get_file_name//打印出当前文件名

get_meta_album//打印出当前文件的'专辑'的元数据

get_meta_artist//打印出当前文件的'艺术家'的元数据

get_meta_comment//打印出当前文件的'评论'的元数据

get_meta_genre//打印出当前文件的'流派'的元数据

get_meta_title//打印出当前文件的'标题'的元数据

get_meta_year//打印出当前文件的'年份'的元数据

ARM多媒体的音乐播放

头文件

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
#include <QProcess>
#include <QListWidgetItem>
 
extern "C"{
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <unistd.h>
}
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
 
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
 
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
 
private slots:
    void on_btn_player_clicked();
    void on_btn_stop_clicked();
    void on_btn_add_clicked();
    void on_btn_next_clicked();
    void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
    void on_btn_prev_clicked();
    void on_btn_mute_clicked();
    void on_horizontalSlider_volume_sliderMoved(int position); 
    void on_horizontalSlider_seek_sliderMoved(int position);
    void on_btn_enterSeek_clicked();
    void on_btn_backSeek_clicked();
    void on_btn_pause_clicked();
 
     void onRecvData();
private:
    Ui::MainWindow *ui;
    QProcess *m_process;
 
    int index;
    int fifoFd;
};
#endif // MAINWINDOW_H

源文件

#include "mainwindow.h"
#include "ui_mainwindow.h"
 
#include <QFileDialog>
#include <QDebug>
#include <QThread>
#include <QTime>
 
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
    //注意这里不要传递父指针,否则关闭会出现异常
    m_process = new QProcess;
    index = 0;
}
MainWindow::~MainWindow()
{
    ::close(fifoFd);
    delete m_process;
    delete ui;
}
//播放
void MainWindow::on_btn_player_clicked()
{
    //先停止当前音乐
    on_btn_stop_clicked();
 
 
    QString cmd = QString::fromLocal8Bit("mplayer  -slave -quiet  %1 &")
                        .arg(ui->listWidget->item(index)->text());
     m_process->start(cmd.toLocal8Bit().data());
 
     //get_time_length//返回值是播放文件的长度,以秒为单位   ANS_LENGTH=264.00
     m_process->write("get_time_length\n");
 
     connect(m_process,&QProcess::readyRead,this,&MainWindow::onRecvData);
}
//停止
void MainWindow::on_btn_stop_clicked()
{
    if(m_process->state() == QProcess::Running){
         m_process->kill();
    }
    m_process->waitForFinished();
}
//添加
void MainWindow::on_btn_add_clicked()
{
    QStringList lists = QFileDialog::getOpenFileNames(this,"add music","","music file (*.mp3)");
 
 
    for(int i=0; i<lists.size(); i++){
        QListWidgetItem *item = new QListWidgetItem;
        item->setIcon(QIcon(":/new/prefix1/pic/muic.png"));
        item->setText(lists.at(i).toLocal8Bit());
        ui->listWidget->addItem(item);
    }
}
 
//下一首
void MainWindow::on_btn_next_clicked()
{
    index = ++index % ui->listWidget->count();
 
 
    on_btn_player_clicked();
}
 
//上一首
void MainWindow::on_btn_prev_clicked()
{
    index = --index < 0 ? (ui->listWidget->count()-1) :index;
 
 
    on_btn_player_clicked();
}
 
//双击播放
void MainWindow::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
    index = ui->listWidget->currentRow();
 
    on_btn_player_clicked();
}
//静音
void MainWindow::on_btn_mute_clicked()
{
    m_process->write("mute\n");
}
//音量滑动条
void MainWindow::on_horizontalSlider_volume_sliderMoved(int position)
{
    ui->label_volumeValue->setText(QString::fromLocal8Bit("当前音量:%1").arg(position));
}
void MainWindow::onRecvData()
{
    QString data = m_process->readAll();
    qDebug()<<data;
    //ANS_LENGTH=264.00 获取文件时间长度
    if(data.contains("ANS_LENGTH")){
        //返回来的时间长度是浮点型,必须转成浮点型,如果转成int 会转换失败
        bool ok;
        double timeLength = data.remove("ANS_LENGTH=").remove("\n").toDouble(&ok);
        if(ok){
            QTime timeFormat(0,0,0);
            timeFormat = timeFormat.addSecs(timeLength);
            //显示时间长度
            ui->label_timeLength->setText(timeFormat.toString());
            //设置 时间长度滑动进度条的最大值
            ui->horizontalSlider_seek->setMaximum(timeLength);
        }else{
            qDebug()<<"string to double error";
        }
    }
}
//时间长度 滑动条
void MainWindow::on_horizontalSlider_seek_sliderMoved(int position)
{
    qDebug()<<"seek position:"<<position;
 
 
    //修改文件进度--自行扩展
}
//快进
void MainWindow::on_btn_enterSeek_clicked()
{
    m_process->write("seek +10\n");
}
//快退
void MainWindow::on_btn_backSeek_clicked()
{
    m_process->write("seek -10\n");
}
void MainWindow::on_btn_pause_clicked()
{
    m_process->write("pause\n");
}

1 关于 Easy Player: Easy Player 是由于个人兴趣而制作的一款基于Qt的在线音乐播放器 目前是第一个版本 并未进行足量优化 因此 在使用过程可能存在某些Bug 请谅解 2 功能介绍: 目前功能支持歌曲在线搜索 单曲循环(其他循环方式后期添加) 添加搜索结果到试听列表 下载音乐到本地 歌词同步显示 还不能同步滚动 3 使用方法: (1)首先 从按钮说起: 左边第一排:播放(暂停) 下一首 单曲循环 下载当前歌曲 歌词显示; 左边第二排:音量键 右边第一排:歌曲时间轴 (2)其次 搜索: “歌曲特征”输入关键词搜索 会呈现搜索结果在搜索列表 搜索列表右边的按钮表示添加歌曲到播放列表 (3)最后 播放列表: 在歌曲列表双击歌曲播放 右边的按钮表示下载歌曲 目前是下载完成之后才会提示 之后会做一个下载列表界面 4 其他 本来打算在下载的时候加入多线程 另外加一个数据库保存播放信息 但由于时间关系 并没有在这个版本加入 之后的版本会不断完善 欢迎大家下载测试和提意见 声明:代码仅供参考 请尊重原创 作者:Reyn 博客地址:http: blog csdn net jan5 reyn">1 关于 Easy Player: Easy Player 是由于个人兴趣而制作的一款基于Qt的在线音乐播放器 目前是第一个版本 并未进行足量优化 因此 在使用过程可能存在某些Bug 请谅解 2 功能介绍: 目前功能支持歌曲在线搜索 单曲 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值