之前有个项目需要将音频文件的频谱显示出来,想了很多办法,后面发现fmod这个好东西,还是跨平台的,就一个头文件+一个库文件就行,简单小巧功能强大,人家做的真牛逼。为了不卡住界面,采用了多线程处理。

可执行文件下载:https://pan.baidu.com/s/1JIjiCv800KPDZS9aSRPObQ

1:可获取整个声音文件采样值数据
2:可实时获取当前播放位置的采样值数据
3:可设置采样的步长和数量
4:可开始播放/暂停播放/停止播放
5:多线程处理,超流畅
6:可设置当前播放位置
7:可设置音量

  1. #ifndef FMODTHREAD_H
  2. #define FMODTHREAD_H
  3.  
  4. /**
  5. * fmod音乐播放类 作者:feiyangqingyun(QQ:517216493) 2017-9-12
  6. * 1:可获取整个声音文件采样值数据
  7. * 2:可实时获取当前播放位置的采样值数据
  8. * 3:可设置采样的步长和数量
  9. * 4:可开始播放/暂停播放/停止播放
  10. * 5:多线程处理,超流畅
  11. * 6:可设置当前播放位置
  12. * 7:可设置音量
  13. * 参考文章:http://blog.csdn.net/fengyhack/article/details/43318575
  14. */
  15.  
  16. #include <QThread>
  17.  
  18. class FMOD_SYSTEM;
  19. class FMOD_SOUND;
  20. class FMOD_CHANNEL;
  21.  
  22. class FmodThread : public QThread
  23. {
  24.     Q_OBJECT
  25. public:
  26.     explicit FmodThread(QObject *parent = 0);
  27.     ~FmodThread();
  28.  
  29. protected:
  30.     void run();
  31.  
  32. private:
  33.     bool stopped;           //停止线程标志位
  34.     bool isPlayWave;        //开始播放标志位
  35.     bool isPauseWave;       //暂停播放标志位
  36.     bool isStopWave;        //停止播放标志位
  37.     bool isReadWave;        //读取当前位置采样值标志位
  38.  
  39.     int step;               //采样值步长
  40.     int count;              //采样点总数
  41.     int interval;           //采样间隔
  42.     bool showWaveDataAll;   //是否显示总采样
  43.     QString fileName;       //当前声音文件
  44.  
  45.     FMOD_SYSTEM *system;    //fmod结构体
  46.     FMOD_SOUND *sound;      //播放声音对象
  47.     FMOD_CHANNEL *channel;  //播放声音通道
  48.  
  49. private slots:
  50.     //获取当前位置采样值数据
  51.     void readWaveData();
  52.     //获取所有采样值数据
  53.     void readWaveDataAll();
  54.  
  55.     //开始播放
  56.     void playWave();
  57.     //暂停播放
  58.     void pauseWave();
  59.     //停止播放
  60.     void stopWave();
  61.  
  62. signals:
  63.     //开始播放信号
  64.     void playStart();
  65.     //停止播放信号
  66.     void playStop();
  67.     //暂停播放信号
  68.     void playPause();
  69.  
  70.     //当前播放时长
  71.     void filePositionReceive(uint position, bool isPlay);
  72.     //总时长
  73.     void fileLengthReceive(uint length);
  74.     //音量大小
  75.     void fileVolumeReceive(int volume, bool mute);
  76.  
  77.     //当前声音正在播放位置采样值数据
  78.     void waveDataReceive(const QVector<float> &waveData);
  79.     //当前声音所有采样值数据
  80.     void waveDataAllReceive(const QVector<float> &waveData);
  81.  
  82. public slots:
  83.     //设置采样值步长
  84.     void setStep(int step);
  85.     //设置采样点总数
  86.     void setCount(int count);
  87.     //设置采样间隔
  88.     void setInterval(int interval);
  89.     //设置是否显示总采样
  90.     void setShowWaveDataAll(bool showWaveDataAll);
  91.     //设置要播放的声音文件
  92.     void setFileName(const QString &fileName);
  93.  
  94.     //播放
  95.     void play();
  96.     //暂停
  97.     void pause();
  98.     //停止
  99.     void stop();
  100.     //停止线程
  101.     void stopAll();
  102.  
  103.     //设置播放进度位置
  104.     void setPosition(int position);
  105.     //设置音量
  106.     void setVolume(int volume);
  107.     //设置静音
  108.     void setMute(bool mute);
  109.  
  110. };
  111.  
  112. #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. python程序的输入输出(acm的几个小程序)

    1,  A+B Problem : http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1000 #! ...

  2. hive 1.2 配置

    参考链接 http://www.cnblogs.com/yjmyzz/p/how-to-install-hive-1-2-0-on-mac.html

  3. 使用 SharpSvn 执行 svn 操作的Demo

    1. SharpSvn简介 SharpSvn.dll 是为.Net 2.0-4.0+ 应用提供的 Subversion Client API,更多详细介绍请见 https://sharpsvn.ope ...

  4. jenkins 如何处理windows batch command

    这两天一直被一个问题困扰. 在jenkins的windows batch command 测试好的,拿到bat文件中,再从Execute Windows Batch command 中调用这个bat, ...

  5. GetLastError结果列表

    程序执行出现错误,使用GetLastError可以初步得到错误的大致原因,方便程序员来分析,错误码对应含义总结如下,方便查看! MSDN System Error Codes: https://doc ...

  6. Go语言图形界面开发:Go版GTK

    https://www.cnblogs.com/tennysonsky/p/8433888.html package main import ( "os" "github ...

  7. [原]pomelo开发环境搭建

    pomelo基于nodejs服务器开源框架,比较牛逼的! 1.安装nodejs(官网下载地址) 安装python等 具体见官网说明 2.安装pomelo(见官方步骤)或者 http://blog.cs ...

  8. ASCII码与16进制的互相转换(表)

    所谓的ASCII和16进制都只是概念上的东西,在计算机中通通是二进制 转换应该是输出的转换,同样是一个数,在计算机内存中表示是一样的,只是输出不一样ASCII是针对字符的编码,几乎是键盘上的字符的编码 ...

  9. Java使用选择排序法对数组排序

    编写程序,实现将输入的字符串转换为一维数组,并使用选择排序法对数组进行排序. 思路如下: 点击"生成随机数"按钮,创建Random随机数对象: 使用JTextArea的setTex ...

  10. ios开发之--NSDictionary和NSData之间的互转/NSString和NSData之间的互转

    NSDictionary转NSData,代码如下: +(NSData*)returnDataWith:(NSDictionary*)dict { NSData *data = [NSJSONSeria ...