qt 飞扬青云_Qt编写带频谱的音乐播放器
之前有個(gè)項(xiàng)目需要將音頻文件的頻譜顯示出來,想了很多辦法,后面發(fā)現(xiàn)fmod這個(gè)好東西,還是跨平臺(tái)的,就一個(gè)頭文件+一個(gè)庫文件就行,簡單小巧功能強(qiáng)大,人家做的真牛逼。為了不卡住界面,采用了多線程處理。
開源主頁:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
1:可獲取整個(gè)聲音文件采樣值數(shù)據(jù)
2:可實(shí)時(shí)獲取當(dāng)前播放位置的采樣值數(shù)據(jù)
3:可設(shè)置采樣的步長和數(shù)量
4:可開始播放/暫停播放/停止播放
5:多線程處理,超流暢
6:可設(shè)置當(dāng)前播放位置
7:可設(shè)置音量
#ifndef FMODTHREAD_H
#define FMODTHREAD_H
/**
* 1:可獲取整個(gè)聲音文件采樣值數(shù)據(jù)
* 2:可實(shí)時(shí)獲取當(dāng)前播放位置的采樣值數(shù)據(jù)
* 3:可設(shè)置采樣的步長和數(shù)量
* 4:可開始播放/暫停播放/停止播放
* 5:多線程處理,超流暢
* 6:可設(shè)置當(dāng)前播放位置
* 7:可設(shè)置音量
*/
#include
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;?????????? //停止線程標(biāo)志位
bool isPlayWave;????????//開始播放標(biāo)志位
bool isPauseWave;?????? //暫停播放標(biāo)志位
bool isStopWave;????????//停止播放標(biāo)志位
bool isReadWave;????????//讀取當(dāng)前位置采樣值標(biāo)志位
int step;?????????????? //采樣值步長
int count;??????????????//采樣點(diǎn)總數(shù)
int interval;?????????? //采樣間隔
bool showWaveDataAll;?? //是否顯示總采樣
QString fileName;?????? //當(dāng)前聲音文件
FMOD_SYSTEM *system;????//fmod結(jié)構(gòu)體
FMOD_SOUND *sound;??????//播放聲音對(duì)象
FMOD_CHANNEL *channel;??//播放聲音通道
private slots:
//獲取當(dāng)前位置采樣值數(shù)據(jù)
void readWaveData();
//獲取所有采樣值數(shù)據(jù)
void readWaveDataAll();
//開始播放
void playWave();
//暫停播放
void pauseWave();
//停止播放
void stopWave();
signals:
//開始播放信號(hào)
void playStart();
//停止播放信號(hào)
void playStop();
//暫停播放信號(hào)
void playPause();
//當(dāng)前播放時(shí)長
void filePositionReceive(uint position, bool isPlay);
//總時(shí)長
void fileLengthReceive(uint length);
//音量大小
void fileVolumeReceive(int volume, bool mute);
//當(dāng)前聲音正在播放位置采樣值數(shù)據(jù)
void waveDataReceive(const QVector &waveData);
//當(dāng)前聲音所有采樣值數(shù)據(jù)
void waveDataAllReceive(const QVector &waveData);
public slots:
//設(shè)置采樣值步長
void setStep(int step);
//設(shè)置采樣點(diǎn)總數(shù)
void setCount(int count);
//設(shè)置采樣間隔
void setInterval(int interval);
//設(shè)置是否顯示總采樣
void setShowWaveDataAll(bool showWaveDataAll);
//設(shè)置要播放的聲音文件
void setFileName(const QString &fileName);
//播放
void play();
//暫停
void pause();
//停止
void stop();
//停止線程
void stopAll();
//設(shè)置播放進(jìn)度位置
void setPosition(int position);
//設(shè)置音量
void setVolume(int volume);
//設(shè)置靜音
void setMute(bool mute);
};
#endif // FMODTHREAD_H
總結(jié)
以上是生活随笔為你收集整理的qt 飞扬青云_Qt编写带频谱的音乐播放器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql同表字段前4位复制_MySQL
- 下一篇: centos上如何装python_cen