2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Qt编写带频谱的音乐播放器

Qt编写带频谱的音乐播放器

时间:2020-05-02 06:15:00

相关推荐

Qt编写带频谱的音乐播放器

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

可执行文件下载:/s/1JIjiCv800KPDZS9aSRPObQ

1:可获取整个声音文件采样值数据

2:可实时获取当前播放位置的采样值数据

3:可设置采样的步长和数量

4:可开始播放/暂停播放/停止播放

5:多线程处理,超流畅

6:可设置当前播放位置

7:可设置音量

#ifndef FMODTHREAD_H#define FMODTHREAD_H/*** fmod音乐播放类 作者:feiyangqingyun(QQ:517216493) -9-12* 1:可获取整个声音文件采样值数据* 2:可实时获取当前播放位置的采样值数据* 3:可设置采样的步长和数量* 4:可开始播放/暂停播放/停止播放* 5:多线程处理,超流畅* 6:可设置当前播放位置* 7:可设置音量* 参考文章:/fengyhack/article/details/43318575*/#include <QThread>class FMOD_SYSTEM;class FMOD_SOUND;class FMOD_CHANNEL;class FmodThread : public QThread{Q_OBJECTpublic: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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。