之前有个项目需要将音频文件的频谱显示出来,想了很多办法,后面发现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编写带频谱的音乐播放器的更多相关文章

  1. 基于Qt Phonon模块实现音乐播放器

    这次使用Qt实现的是一个本地音乐播放器,可以播放下载在计算机本地的音乐,提供了添加歌曲,歌曲列表,清空列表的功能.默认歌曲列表循环播放.音乐播放的实现主要依赖的是Qt 的多媒体框架phonon.该音乐 ...

  2. 基于Qt的开源音乐播放器(CZPlayer)

    CZPlayer CZPlayer是基于Qt开发的一款功能强大的音乐播放器,该播放器的论坛地址请点击here,目前CZPlayer已经是第四个版本了,历史版本也分别在我的github上, github ...

  3. 简单的音乐播放器(VS 2010 + Qt 4.8.5)

    昨天历经千辛万苦,配置好了VS 2010中的Qt环境(包括Qt for VS插件),今天决定浅浅地品味一下将两者结合进行编程的魅力. 上网查了一些资料,学习了一些基础知识,决定做一个简单的音乐播放器, ...

  4. Qt音乐播放器制作(一)Easy Player

    前几天忽然间认为,事到现在Qt的功底也有些基础了,为什么不试着自己做个玩意来玩玩呢?刚好在开源中国逛代码区的时候看到一个QKugou的项目,就想着做一个在线音乐播放器好了. 于是開始着手准备,忙活了一 ...

  5. html网页音乐播放器自带播放列表

    基于网页的音乐播放器demo  http://pan.baidu.com/s/1dDgm7HR 自己diy了一个手机端在线音乐播放器演示地址http://shanxi2014.com/zhuandiz ...

  6. Python调用Windows API函数编写录音机和音乐播放器

    功能描述: 1)使用tkinter设计程序界面: 2)调用Windows API函数实现录音机和音乐播放器. . 参考代码: ​ 运行界面: ​

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

    前言   在ubuntu上实现MPlayer播放器播放音乐.   Demo                Mplayer   MPlayer是一款开源多媒体播放器,以GNU通用公共许可证发布.此款软件 ...

  8. 单片AT89C2051 + SD卡 + 3310LCD = 音乐播放器

    http://www.amobbs.com/thread-4503884-1-1.html 这个小玩意,采用 ATMEL 的传统51MCU作主控制芯片,加上SD卡和显示屏,就可以作简单的音乐播放器了, ...

  9. 如何使用 pyqt 实现 Groove 音乐播放器

    前言 Win10 自带了一款很好用的音乐播放器 -- Groove 音乐,但是只能支持本地音乐的播放.2020年3月底到4月底,自己一直在学习 PyQt5,然后从 2020年5月开始,着手使用 PyQ ...

随机推荐

  1. 目标检测之2015iccv---objdetection 专题论文

    http://mp7.watson.ibm.com/ICCV2015/ObjectDetectionICCV2015.html

  2. Keystone中间件WSGI环境变量总结

    OpenStack keystonemiddleware接收前一个WSGI过滤器传来的WSGI环境信息,进行验证工作后传递给下一个中间件,本文探讨keystone中间件究竟有哪些WSGI环境变量. 说 ...

  3. ubuntu 14.04安装 DevStack的脚本配置文件——localrc

    本文ubuntu 14.04安装 DevStack的脚本配置文件——localrc,本文件名已经逐渐被取代,但是出于后向兼容性,使用该文件仍然可以为stack.sh安装脚本指定安装DevStack时的 ...

  4. fence-agents kvm 实验

    1, Method of installing fence-agents on linux: $ git clone https://github.com/ClusterLabs/fence-agen ...

  5. Linux入门基础教程之Linux下软件安装

    Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...

  6. log4net 日志配置及使用

    一.log4net按照不同的[LEVEL]级别输出到不同文件 <log4net> <!--错误日志:::记录错误日志--> <!--按日期分割日志文件 一天一个--> ...

  7. Windows 7 完美安装 Visual C++ 6.0

    http://wenku.baidu.com/link?url=UiwoH2l4H_IWK6y8JkVNg4slp8gkM_9qudihP0XD4MdMCwm-j1-vINWEjQE1aBCeP121 ...

  8. Unity打包IOS和Android以及之间的交互

    1.导出的Xcode工程 主要讲解Unity导出的Xcode工程的目录结构 2.导出的Android-Eclipse工程 主要讲解Unity导出的Android-Eclipse工程的目录结构 3.导出 ...

  9. PHP的五大阶段

    PHP程序员必须懂前端,后端,数据库,服务器.具体的学习顺序是: 第一阶段:扫盲.了解什么是B/S模式,原理上知道从浏览器输入一个url是如何获取到信息的流程.熟悉html,能快速地用div+css写 ...

  10. sublime text--你所不知道的12个秘密

    转自:http://blog.csdn.net/laokdidiao/article/details/51429404 package control安装: 第一种方法是在控制台中复制粘贴代码按回车, ...