Qt编写带频谱的音乐播放器
之前有个项目需要将音频文件的频谱显示出来,想了很多办法,后面发现fmod这个好东西,还是跨平台的,就一个头文件+一个库文件就行,简单小巧功能强大,人家做的真牛逼。为了不卡住界面,采用了多线程处理。
可执行文件下载:https://pan.baidu.com/s/1JIjiCv800KPDZS9aSRPObQ
1:可获取整个声音文件采样值数据
2:可实时获取当前播放位置的采样值数据
3:可设置采样的步长和数量
4:可开始播放/暂停播放/停止播放
5:多线程处理,超流畅
6:可设置当前播放位置
7:可设置音量
- #ifndef FMODTHREAD_H
- #define FMODTHREAD_H
- /**
- * fmod音乐播放类 作者:feiyangqingyun(QQ:517216493) 2017-9-12
- * 1:可获取整个声音文件采样值数据
- * 2:可实时获取当前播放位置的采样值数据
- * 3:可设置采样的步长和数量
- * 4:可开始播放/暂停播放/停止播放
- * 5:多线程处理,超流畅
- * 6:可设置当前播放位置
- * 7:可设置音量
- * 参考文章:http://blog.csdn.net/fengyhack/article/details/43318575
- */
- #include <QThread>
- class FMOD_SYSTEM;
- class FMOD_SOUND;
- class FMOD_CHANNEL;
- class FmodThread : public QThread
- {
- Q_OBJECT
- public:
- explicit FmodThread(QObject *parent = 0);
- ~FmodThread();
- protected:
- void run();
- private:
- bool stopped; //停止线程标志位
- bool isPlayWave; //开始播放标志位
- bool isPauseWave; //暂停播放标志位
- bool isStopWave; //停止播放标志位
- bool isReadWave; //读取当前位置采样值标志位
- int step; //采样值步长
- int count; //采样点总数
- int interval; //采样间隔
- bool showWaveDataAll; //是否显示总采样
- QString fileName; //当前声音文件
- FMOD_SYSTEM *system; //fmod结构体
- FMOD_SOUND *sound; //播放声音对象
- FMOD_CHANNEL *channel; //播放声音通道
- private slots:
- //获取当前位置采样值数据
- void readWaveData();
- //获取所有采样值数据
- void readWaveDataAll();
- //开始播放
- void playWave();
- //暂停播放
- void pauseWave();
- //停止播放
- void stopWave();
- signals:
- //开始播放信号
- void playStart();
- //停止播放信号
- void playStop();
- //暂停播放信号
- void playPause();
- //当前播放时长
- void filePositionReceive(uint position, bool isPlay);
- //总时长
- void fileLengthReceive(uint length);
- //音量大小
- void fileVolumeReceive(int volume, bool mute);
- //当前声音正在播放位置采样值数据
- void waveDataReceive(const QVector<float> &waveData);
- //当前声音所有采样值数据
- void waveDataAllReceive(const QVector<float> &waveData);
- public slots:
- //设置采样值步长
- void setStep(int step);
- //设置采样点总数
- void setCount(int count);
- //设置采样间隔
- void setInterval(int interval);
- //设置是否显示总采样
- void setShowWaveDataAll(bool showWaveDataAll);
- //设置要播放的声音文件
- void setFileName(const QString &fileName);
- //播放
- void play();
- //暂停
- void pause();
- //停止
- void stop();
- //停止线程
- void stopAll();
- //设置播放进度位置
- void setPosition(int position);
- //设置音量
- void setVolume(int volume);
- //设置静音
- void setMute(bool mute);
- };
- #endif // FMODTHREAD_H
Qt编写带频谱的音乐播放器的更多相关文章
- 基于Qt Phonon模块实现音乐播放器
这次使用Qt实现的是一个本地音乐播放器,可以播放下载在计算机本地的音乐,提供了添加歌曲,歌曲列表,清空列表的功能.默认歌曲列表循环播放.音乐播放的实现主要依赖的是Qt 的多媒体框架phonon.该音乐 ...
- 基于Qt的开源音乐播放器(CZPlayer)
CZPlayer CZPlayer是基于Qt开发的一款功能强大的音乐播放器,该播放器的论坛地址请点击here,目前CZPlayer已经是第四个版本了,历史版本也分别在我的github上, github ...
- 简单的音乐播放器(VS 2010 + Qt 4.8.5)
昨天历经千辛万苦,配置好了VS 2010中的Qt环境(包括Qt for VS插件),今天决定浅浅地品味一下将两者结合进行编程的魅力. 上网查了一些资料,学习了一些基础知识,决定做一个简单的音乐播放器, ...
- Qt音乐播放器制作(一)Easy Player
前几天忽然间认为,事到现在Qt的功底也有些基础了,为什么不试着自己做个玩意来玩玩呢?刚好在开源中国逛代码区的时候看到一个QKugou的项目,就想着做一个在线音乐播放器好了. 于是開始着手准备,忙活了一 ...
- html网页音乐播放器自带播放列表
基于网页的音乐播放器demo http://pan.baidu.com/s/1dDgm7HR 自己diy了一个手机端在线音乐播放器演示地址http://shanxi2014.com/zhuandiz ...
- Python调用Windows API函数编写录音机和音乐播放器
功能描述: 1)使用tkinter设计程序界面: 2)调用Windows API函数实现录音机和音乐播放器. . 参考代码: 运行界面:
- Qt+MPlayer音乐播放器开发笔记(一):ubuntu上编译MPlayer以及Demo演示
前言 在ubuntu上实现MPlayer播放器播放音乐. Demo Mplayer MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布.此款软件 ...
- 单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器
http://www.amobbs.com/thread-4503884-1-1.html 这个小玩意,采用 ATMEL 的传统51MCU作主控制芯片,加上SD卡和显示屏,就可以作简单的音乐播放器了, ...
- 如何使用 pyqt 实现 Groove 音乐播放器
前言 Win10 自带了一款很好用的音乐播放器 -- Groove 音乐,但是只能支持本地音乐的播放.2020年3月底到4月底,自己一直在学习 PyQt5,然后从 2020年5月开始,着手使用 PyQ ...
随机推荐
- python程序的输入输出(acm的几个小程序)
1, A+B Problem : http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1000 #! ...
- hive 1.2 配置
参考链接 http://www.cnblogs.com/yjmyzz/p/how-to-install-hive-1-2-0-on-mac.html
- 使用 SharpSvn 执行 svn 操作的Demo
1. SharpSvn简介 SharpSvn.dll 是为.Net 2.0-4.0+ 应用提供的 Subversion Client API,更多详细介绍请见 https://sharpsvn.ope ...
- jenkins 如何处理windows batch command
这两天一直被一个问题困扰. 在jenkins的windows batch command 测试好的,拿到bat文件中,再从Execute Windows Batch command 中调用这个bat, ...
- GetLastError结果列表
程序执行出现错误,使用GetLastError可以初步得到错误的大致原因,方便程序员来分析,错误码对应含义总结如下,方便查看! MSDN System Error Codes: https://doc ...
- Go语言图形界面开发:Go版GTK
https://www.cnblogs.com/tennysonsky/p/8433888.html package main import ( "os" "github ...
- [原]pomelo开发环境搭建
pomelo基于nodejs服务器开源框架,比较牛逼的! 1.安装nodejs(官网下载地址) 安装python等 具体见官网说明 2.安装pomelo(见官方步骤)或者 http://blog.cs ...
- ASCII码与16进制的互相转换(表)
所谓的ASCII和16进制都只是概念上的东西,在计算机中通通是二进制 转换应该是输出的转换,同样是一个数,在计算机内存中表示是一样的,只是输出不一样ASCII是针对字符的编码,几乎是键盘上的字符的编码 ...
- Java使用选择排序法对数组排序
编写程序,实现将输入的字符串转换为一维数组,并使用选择排序法对数组进行排序. 思路如下: 点击"生成随机数"按钮,创建Random随机数对象: 使用JTextArea的setTex ...
- ios开发之--NSDictionary和NSData之间的互转/NSString和NSData之间的互转
NSDictionary转NSData,代码如下: +(NSData*)returnDataWith:(NSDictionary*)dict { NSData *data = [NSJSONSeria ...