Qt+MPlayer音乐播放器开发笔记(一):ubuntu上编译MPlayer以及Demo演示

若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/118713520
长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808
红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…(点击传送门)

Qt开发专栏:三方库开发技术

上一篇:没有了
下一篇:《Qt+MPlayer音乐播放器开发笔记(二):交叉编译MPlayer以及部署到开发板播放演示》


前言

  在ubuntu上实现MPlayer播放器播放音乐。


Demo

  在这里插入图片描述

  在这里插入图片描述

  在这里插入图片描述
  在这里插入图片描述
  在这里插入图片描述


Mplayer

  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而可以在所有平台上运行。

下载

  最新源码下载地址: http://mplayerhq.hu/design7/news-archive.html
  QQ群:1047134658(点击“文件”搜索“MPlayer”,群内与博文同步更新)


Ubuntu编译

步骤一:下载解压

tar xvf MPlayer-1.4.tar.xz

  在这里插入图片描述

步骤二:configure

cd MPlayer-1.4/
./configure

  在这里插入图片描述

./configure --yasm=’’

  在这里插入图片描述

步骤三:make,需要zlib库支撑,编译zlib库

make

  在这里插入图片描述

  需要编译zlib库,需要先编译,请参照博文《libzip开发笔记(二):libzip库介绍、ubuntu平台编译和工程模板》。

sudo ldconfig

步骤四:继续编译make

make

  在这里插入图片描述

步骤五:安装sudo make install

sudo make install

  在这里插入图片描述

步骤六:播放测试

  在这里插入图片描述
  (注意:若是虚拟机,虚拟机的音量和选用主机的声卡需要选择下)


Demo

Widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QMainWindow>
#include <QThread>
#include "MplayerManager.h"
#include <QFileDialog>namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = 0);~Widget();protected:void initControls();protected slots:void slot_durationChanged(int duration);void slot_positionChanged(int position);void slot_finished();void slot_mediaInfo(MplayerManager::MediaInfo mediaInfo);private slots:void on_pushButton_startPlay_clicked();void on_pushButton_stopPlay_clicked();void on_pushButton_pausePlay_clicked();void on_pushButton_resume_clicked();void on_horizontalSlider_sliderReleased();void on_horizontalSlider_valueChanged(int value);void on_pushButton_mute_clicked(bool checked);void on_horizontalSlider_position_sliderReleased();void on_horizontalSlider_position_sliderPressed();void on_pushButton_browserMplayer_clicked();void on_pushButton_defaultMplayer_clicked();void on_pushButton_browserMusic_clicked();private:Ui::Widget *ui;QThread *_pMplayerManagerThread;MplayerManager *_pMplayerManager;bool _sliderPositionPressed;
};#endif // WIDGET_H

Widget.cpp

#include "Widget.h"
#include "ui_Widget.h"
#include "MplayerManager.h"#include <QDebug>
#define LOG qDebug()<<__FILE__<<__LINE__Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget),_pMplayerManagerThread(0),_pMplayerManager(0),_sliderPositionPressed(false)
{ui->setupUi(this);QString version = "v1.0.0";setWindowTitle(QString("mplayer播放器 %1 (长沙红胖子网络科技有限公司 QQ:21497936 微信:yangsir198808 公司网址: hpzwl.blog.csdn.net)").arg(version));// 初始化modbus线程_pMplayerManagerThread = new QThread();_pMplayerManager = new MplayerManager();_pMplayerManager->moveToThread(_pMplayerManagerThread);QObject::connect(_pMplayerManagerThread, SIGNAL(started()),_pMplayerManager, SLOT(slot_start()));connect(_pMplayerManager, SIGNAL(signal_durationChanged(int)),this, SLOT(slot_durationChanged(int)));connect(_pMplayerManager, SIGNAL(signal_positionChanged(int)),this, SLOT(slot_positionChanged(int)));connect(_pMplayerManager, SIGNAL(signal_mediaInfo(MplayerManager::MediaInfo)),this, SLOT(slot_mediaInfo(MplayerManager::MediaInfo)));connect(_pMplayerManager, SIGNAL(signal_finished()),this, SLOT(slot_finished()));_pMplayerManagerThread->start();initControls();
}Widget::~Widget()
{delete ui;
}void Widget::initControls()
{ui->horizontalSlider->setMinimum(0);ui->horizontalSlider->setMaximum(100);ui->horizontalSlider->setValue(100);ui->label_volume->setText("100");
}void Widget::slot_durationChanged(int duration)
{LOG << duration;ui->label_duration->setText(QString("%1%2:%3%4").arg(duration / 60 / 10).arg(duration / 60 % 10).arg(duration % 60 / 10).arg(duration % 10));ui->horizontalSlider_position->setMinimum(0);ui->horizontalSlider_position->setMaximum(duration);
}void Widget::slot_positionChanged(int position)
{ui->label_position->setText(QString("%1%2:%3%4").arg(position / 60 / 10).arg(position / 60 % 10).arg(position % 60 / 10).arg(position % 10));if(!_sliderPositionPressed){ui->horizontalSlider_position->setValue(position);}
}void Widget::slot_finished()
{ui->label_position->setText("00:00");
}void Widget::slot_mediaInfo(MplayerManager::MediaInfo mediaInfo)
{ui->label_title->setText(mediaInfo.title);ui->label_album->setText(mediaInfo.album);ui->label_year->setText(mediaInfo.year);ui->label_artist->setText(mediaInfo.artist);ui->label_genre->setText(mediaInfo.genre);ui->label_comment->setText(mediaInfo.comment);
}void Widget::on_pushButton_startPlay_clicked()
{_pMplayerManager->startPlay();
}void Widget::on_pushButton_stopPlay_clicked()
{_pMplayerManager->stopPlay();
}void Widget::on_pushButton_pausePlay_clicked()
{_pMplayerManager->pausePlay();
}void Widget::on_pushButton_resume_clicked()
{_pMplayerManager->resumePlay();
}void Widget::on_horizontalSlider_sliderReleased()
{_pMplayerManager->setVolume(ui->horizontalSlider->value());
}void Widget::on_horizontalSlider_valueChanged(int value)
{ui->label_volume->setText(QString("%1").arg(value));
}void Widget::on_pushButton_mute_clicked(bool checked)
{_pMplayerManager->setMute(checked);
}void Widget::on_horizontalSlider_position_sliderReleased()
{_sliderPositionPressed = false;_pMplayerManager->setPosition(ui->horizontalSlider_position->value());
}void Widget::on_horizontalSlider_position_sliderPressed()
{_sliderPositionPressed = true;
}void Widget::on_pushButton_browserMplayer_clicked()
{_pMplayerManager->setMplayerPath(ui->lineEdit_mplayer->text());
}void Widget::on_pushButton_defaultMplayer_clicked()
{ui->lineEdit_mplayer->setText("mplayer");
}void Widget::on_pushButton_browserMusic_clicked()
{QString dir = ui->lineEdit_music->text();dir = dir.mid(0, dir.lastIndexOf("/"));QString filePath = QFileDialog::getOpenFileName(0,"open",dir,"AAC(*.aac)"";;MP3(*.mp3)"";;WAV(*.wav)"";;WMA(*.wma)");if(filePath.isEmpty()){return;}ui->lineEdit_music->setText(filePath);_pMplayerManager->setFilePath(filePath);
}

MplayerManager.h

#ifndef MPLAYERMANAGER_H
#define MPLAYERMANAGER_H/************************************************************\* 控件名称: mplayer管理类* 控件描述:*          使用slave模式控制mplayer播放音乐,基础模块实现单曲播放* 控件功能:*          1.音乐播放器播放音乐的基础操作*          2.可以获取歌曲的相关专辑,作者,年代,评论,流派等信息* 著作权信息*      作者:红胖子(AAA红模仿)*      公司:长沙红胖子网络科技有限公司*      网址:hpzwl.blog.csdn.net*      联系方式:QQ(21497936) 微信(yangsir198808) 电话(15173255813)* 版本信息*       日期             版本           描述*   2021年07月12日      v1.0.0        基础模板
\************************************************************/#include <QObject>
#include <QThread>
#include <QProcess>
#include <QtMath>
#include <QTextCodec>class MplayerManager : public QObject
{Q_OBJECT
public:enum PLAY_STATE {                   // 播放状态PLAY_STATE_STOP = 0x00,         // 未播放,停止播放PLAY_STATE_PLAY,                // 正在播放PLAY_STATE_PAUSE                // 暂停播放};struct MediaInfo {                  // 多媒体信息MediaInfo() {}QString title;                  // 标题QString artist;                 // 艺术家QString album;                  // 专辑QString year;                   // 年代QString comment;                // 评论QString genre;                  // 流派};public:explicit MplayerManager(QObject *parent = 0);~MplayerManager();public:QString getMplayerPath()    const;      // 获取播放器路径(运行则可调用)QString getFilePath()       const;      // 获取当前播放文件路径bool getMute()              const;      // 获取是否静音int getVolume()             const;      // 获取音量int getPosition()           const;      // 获取当前位置public:void setMplayerPath(const QString &mplayerPath);    // 设置播放器路径void setFilePath(const QString &filePath);          // 设置播放文件void setMute(bool mute);                            // 设置静音void setVolume(int volume);                         // 设置音量(0~100)void setPosition(int position);                     // 设置当前播放位置signals:void signal_stateChanged(PLAY_STATE playState);     // 播放器播放状态信号void signal_durationChanged(int duration);          // 播放歌曲长度变换信号void signal_positionChanged(int value);             // 播放器歌曲位置比变换,1s一次void signal_finished();                             // 播放完成信号void signal_mediaInfo(MplayerManager::MediaInfo mediaInfo);     // 播放歌曲时,获取的各种元信息public:void startPlay(QString filePath);       // 播放指定歌曲(调用后,或发送消息给播放线程,// 以下4个函数同样,本质调用了slo_xxxxvoid startPlay();                       // 播放歌曲void pausePlay();                       // 暂停播放void resumePlay();                      // 恢复播放void stopPlay();                        // 停止播放public slots:void slot_start();                      // 线程开启(需要外部管理QThread)void slot_stop();                       // 线程停止void slot_startPlay();                  // 开始播放void slot_pausePlay();                  // 暂停播放void slot_resumePlay();                 // 恢复播放void slot_stopPlay();                   // 停止播放void slot_setPosition(int position);    // 设置位置void slot_setVolume(int volume);        // 设置音量void slot_setMute(bool mute);           // 设置静音void slot_getCurrentPosition();         // 获取当前位置(调用后,会强制立即抛出当前播放位置信号)protected slots:void slot_readyRead();void slot_finished(int exitCode, QProcess::ExitStatus exitStatus);protected:void timerEvent(QTimerEvent *event);private:bool _runnig;                   // 是否运行QProcess *_pProcess;            // 进程控制QTextCodec *_pTextCodec;        // 编码private:QString _filePath;              // 播放文件路径QString _mplayerPath;           // mplayer执行程序private:PLAY_STATE _playState;          // 当前播放状态int _position;                  // 当前播放位置,单位sbool _mute;                     // 是否静音int _volume;                    // 当前音量0~100int _duration;                  // 当前歌曲的长度,单位sint _timerId;                   // 定时器,获取当前播放时间MediaInfo _mediaInfo;           // 播放歌曲时候的媒体信息
};#endif // MPLAYERMANAGER_H

工程模板

  mplayerDemo_基础模板_v1.0.0.rar


上一篇:没有了
下一篇:《Qt+MPlayer音乐播放器开发笔记(二):交叉编译MPlayer以及部署到开发板播放演示》


若该文为原创文章,转载请注明原文出处
本文章博客地址:https://hpzwl.blog.csdn.net/article/details/118713520

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/58015.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android音乐播放器频谱图控件

先上效果图&#xff1a; 先通过测量获取view的宽高&#xff0c;然后将宽分为12份&#xff0c;11份为11个条形柱&#xff0c;剩余一份在分为10份作为条形柱之间的间距 Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMe…

Virtual Piano 自动播放乐谱

钢琴按键分布 钢琴 一共88个键&#xff0c;52个白键&#xff0c;36个黑键。 从左到右按音区分&#xff0c;可分为 低音区&#xff1a;不完整的大二字组、大字一组、大字组&#xff1b; 中音区&#xff1a;小字组、小字一组、小字二组&#xff1b; 高音区&#xff1a;小字三…

Qt开发音乐播放器时,频谱显示控件的详细绘制(好思路)

总第46篇 本文详细梳理了在Qt框架制作音乐播放器的过程中,频谱显示的绘制过程。 在开发音乐播放器的时候,需要将音频数据转换成对应的频谱显示,我们可以采用fmod 第三方库来处理,即通过fomd获取音频数据对应的频谱数据,再在项目中对数据进行绘制即可,这样使工程高度解耦,…

用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐

一、前言 QMediaplayer可以用于解析音频文件和视频文件&#xff0c;继承自QMediaObject&#xff0c;涉及到的对象为QMediaContent。QMediaObject可以提供关于媒体内容的接入&#xff0c;通过URL进行初始化&#xff0c;同时也可以提供可以播放的媒体文件的列表&#xff0c;与QM…

基于Qt的音乐播放器(一)添加音频文件,播放音乐,更新进度条

2020博客之星年度总评选进行中&#xff1a;请为74号的狗子投上宝贵的一票&#xff01; 我的投票地址&#xff1a;点击为我投票 文章目录 1.实现音频文件对话框(QFileDialog类)2.实现音乐播放&#xff08;QMediaPlayer类/QMediaPlaylist类&#xff09;3.实现进度条更新以及文件…

基于QT的音乐播放器频谱实现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、官方文档分析二、实现步骤1. 捕获原始音频数字信号2. 读取音频数据3. 计算FFT4. 项目源码目录5. 实际效果 总结 前言 网上的很多音乐播放器频谱实现&#…

A40i使用笔记:使用QT调用aplay播放wav音频/混音

一、前言 在linux当中播放音乐的方式有很多种&#xff0c;我使用的A40i核心板&#xff0c;是 aplay 指令&#xff0c;是 alsa 的一个指令&#xff0c;也就是说需要先安装有 alsa&#xff0c;使用其他arm开发板的小伙伴可以先自行安装alsa之后在进入正文&#xff0c;这里我没实…

音频频谱显示-基于fmod设计音乐播放器并动态显示频谱图(二)

音频频谱显示-显示音频文件静态频谱图(一) https://blog.csdn.net/xiaolong1126626497/article/details/126971535 音频频谱显示-基于fmod设计音乐播放器并动态显示频谱图(二) https://blog.csdn.net/xiaolong1126626497/article/details/126973994 一、前言 在做音乐播…

QT音乐播放器2:切歌,暂停继续合一

1、实现切歌&#xff0c;循环播放 mainwindow.h private slots:void on_nextBt_clicked();void on_frontBt_clicked();在mainwindow.cpp中 MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow){//切歌存储歌单列表QFileInfoList infolist …

用Qt写一个简单的音乐播放器(四):歌曲浏览、上一曲、下一曲

一、前言 在用Qt写一个简单的音乐播放器&#xff08;一&#xff09;&#xff1a;使用QMediaPlayer播放音乐中&#xff0c;我们已经知道如何去使用QMediaPlayer播放音乐。 在用Qt写一个简单的音乐播放器&#xff08;二&#xff09;&#xff1a;增加界面&#xff08;开始和暂停音…

如何使用Guitar Pro在乐谱播放时切换效果器音色?

如何使用Guitar Pro在乐谱播放时切换效果器音色&#xff1f; 关键词&#xff1a;吉他谱 Guitar Pro是一款专注于多种乐器谱制作和播放的高效电脑系统软件&#xff0c;我们使用它可以完成非常多的乐谱操作&#xff0c;如乐队排练、和弦学习等适用于高手和新手的功能都不在话下…

qt 频谱 音乐播放器

先看效果 录制_2022_08_11_14_37_25_628 在网上找了一圈&#xff0c; 好多人写的资料敝竹自珍&#xff0c;还要收费真是无语。还有些需要用第三方库&#xff0c;真是没有必要。qt可以直接实现这些功能 音乐播放器的实现我就不贴了&#xff0c; 网上好多例子&#xff0c;我主要…

功能扩展——邮件发送、网页注册

邮件收发 转自这位大佬 电子邮件 要在网络上实现邮件功能&#xff0c;必须要有专门的邮件服务器。 这些邮件服务器类似于现实生活中的邮局&#xff0c;它主要负责接收用户投递过来的邮件&#xff0c;并把邮件投递到邮件接收者的电子邮箱中。 SMTP服务器地址:一般是smtp.xxx…

网站注册邮件发送功能实现

摘抄自狂神笔记 电子邮件 要在网络上实现邮件功能&#xff0c;必须要有专门的邮件服务器。 这些邮件服务器类似于现实生活中的邮局&#xff0c;它主要负责接收用户投递过来的邮件&#xff0c;并把邮件投递到邮件接收者的电子邮箱中。 SMTP服务器地址&#xff1a;一般是 smtp…

阿里巴巴国际站获得商品详情 API 调用分享(销量、详情图片、宝贝链接)

item_get-获得商品详情 alibaba.item_get 调用代码分享 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; import java.nio.charset.Charset; imp…

利用用户搜索词生成商品标题信息——阿里巴巴IDST

今天介绍的论文是阿里IDST在2018年AAAI上发表的paper《A Multi-task Learning Approach for Improving Product Title Compression with User Search Log Data》。 其应用背景是&#xff0c;现在越来越多的用户开始习惯于使用手机、PAD等移动端进行网购行为&#xff0c;而这些移…

【阿里巴巴国际站API接口】商品详情接口,代码封装系列

为了进行电商平台 alibaba 的API开发&#xff0c;首先我们需要做下面几件事情。 1&#xff09;开发者注册一个账号 2&#xff09;然后为每个alibaba应用注册一个应用程序键&#xff08;App Key) 。 3&#xff09;下载 alibaba API的SDK并掌握基本的API基础知识和调用 4&#xf…

通过 Python 封装关键词搜索阿里巴巴商品api接口

以下是使用 Python 封装关键词搜索阿里巴巴商品列表数据的步骤&#xff1a; 使用 requests 库向阿里巴巴搜索接口发送 HTTP 请求&#xff0c;可以使用 GET 或 POST 方法&#xff0c;请求参数中应包含搜索关键词、每页展示数量、当前页码等信息。 解析返回的 response 中的 HTM…

中英文在线语音转文字的方法

今天小编就来给大家分享一个中英文在线翻译的方法&#xff0c;小编这个来给大家分享一个这样很好用的方法&#xff01; 操作方法&#xff1a; 使用工具&#xff1a;录音转文字助手 第一步&#xff1a;如果将手机录音转成文字的话需要使用一个工具&#xff1a;录音转文字助手&a…

实现语音转文字功能

解决方案 最近要实现语音转文字接口&#xff0c;具体需求是录制语音后再聊天室实时显示文字&#xff1a; 目前腾讯有三种解决方案&#xff1a; 实时语音识别使用场景是一边录语音&#xff0c;一遍转文字&#xff0c;实时性较高&#xff1b;一句话识别是对60s内的语音文…