📄 wavplay.cpp
字号:
#include "wavplay.h"WavePlay::WavePlay(int bufSize, QString deviceName):QObject(){ sndFd = open((const char *)deviceName, O_WRONLY); place = sizeof(WH); buffer = NULL; fileSize = 0; bufferSize = bufSize; wavFd = -1; playState = 0;}WavePlay::~WavePlay(){ if(buffer) munmap(buffer, fileSize); if(sndFd) close(sndFd); if(wavFd >= 0) close(wavFd);}void WavePlay::readWaveHead(){ pHead = (WH *)buffer;}void WavePlay::soundCardCtl(){ int tmp; ioctl(sndFd, SNDCTL_DSP_RESET) ; //soundcard init tmp = pHead->bits; ioctl(sndFd, SNDCTL_DSP_SETFMT, (char *)&tmp); //set sound format tmp = pHead->channel; ioctl(sndFd, SNDCTL_DSP_CHANNELS, (char *)&tmp);//set channel tmp = pHead->rate; ioctl(sndFd, SNDCTL_DSP_SPEED, (char *)&tmp); //set sound bps}void WavePlay::openSound(QString fName){ fileName = fName; if(fileName == QString("") || ! QFile::exists(fileName)) return; if(fileName.right(4) != QString(".wav")) return; wavFd = open((const char *)fileName, O_RDWR); QFile *f = new QFile(fileName); fileSize = f->size(); buffer = (unsigned char *)mmap(0, fileSize, PROT_READ | PROT_WRITE, MAP_SHARED, wavFd, 0); free(f); place = sizeof(WH); readWaveHead(); soundCardCtl();}void WavePlay::closeSound(){}void WavePlay::play(){ while(place < fileSize) { if(playState == 0) { place += write(sndFd, buffer + place, bufferSize); emit placeChanged(100 * (place - sizeof(WH)) / (fileSize - sizeof(WH))); }else if(playState == 1) { closeSound(); return; }else if(playState == 2) { QTimer::singleShot(200, this, SLOT(play())); } }}void WavePlay::pause(){ playState = 2;}void WavePlay::stop(){ playState = 1;}void WavePlay::forward(){}void WavePlay::backward(){}void WavePlay::setPlace(){}//int main(int argc, char *argv[])//{// WavePlay wp;// wp.openSound(argv[1]);// qDebug("ssssssssssssssss");// wp.play();// qDebug("ssssssssssssssss");// wp.stop();//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -