网站logo如何替换,阿里云安装网站,微信平台开发费用,成都网络公司有哪些之前有个项目需要将音频文件的频谱显示出来#xff0c;想了很多办法#xff0c;后面发现fmod这个好东西#xff0c;还是跨平台的#xff0c;就一个头文件一个库文件就行#xff0c;简单小巧功能强大#xff0c;人家做的真牛逼。为了不卡住界面#xff0c;采用了多线程处…之前有个项目需要将音频文件的频谱显示出来想了很多办法后面发现fmod这个好东西还是跨平台的就一个头文件一个库文件就行简单小巧功能强大人家做的真牛逼。为了不卡住界面采用了多线程处理。开源主页[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)1:可获取整个声音文件采样值数据2:可实时获取当前播放位置的采样值数据3:可设置采样的步长和数量4:可开始播放/暂停播放/停止播放5:多线程处理,超流畅6:可设置当前播放位置7:可设置音量#ifndef FMODTHREAD_H#define FMODTHREAD_H/*** 1:可获取整个声音文件采样值数据* 2:可实时获取当前播放位置的采样值数据* 3:可设置采样的步长和数量* 4:可开始播放/暂停播放/停止播放* 5:多线程处理,超流畅* 6:可设置当前播放位置* 7:可设置音量*/#include 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 waveData);//当前声音所有采样值数据void waveDataAllReceive(const QVector 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