void PCMPlayer::timerEvent(QTimerEvent *) { if (isPaused) { return; } if (pcmPlayerState == ePcmPlayer_pausingState) { audioOutput->suspend(); } if (pcmPlayerState == ePcmPlayer_playingState) { audioOutput->resume(); } if (pcmPlayerState == ePcmPlayer_stopingState) { PCMPlayerDebug("stoping!"); audioOutput->stop(); PCMPlayerDebug("stoping finished!"); } if (dataQueue->isQueueEmpty() && audioOutput->state() == QAudio::IdleState) { return; } qint64 dataFree = audioOutput->bytesFree(); if (dataFree >= dataQueue->getCurrentBufferSize() && !dataQueue->isQueueEmpty()) { QByteArray disposeData = dataQueue->dequeue(); //soundTrack dispose and volume dispose disposeData = disposeSoundTrack(disposeData); disposeData = disposeVolume(disposeData); qint64 writeSize = audioOutputIODevice->write(disposeData); writeTotalSize += writeSize; emit onBufferUsed(); // int *a = 0; // *a = 1; } float musicTime = getMusicTime(); PCMPlayerDebug("musicTime is: %f", musicTime); emit onMusicTime(musicTime); }
//加载歌曲列表 void LoadMusicThread::loadMusicList( const QString &filePath ) { //序号 QTableWidgetItem *rowItem = new QTableWidgetItem; rowItem->setTextAlignment(Qt::AlignCenter); rowItem->setFont(QFont("微软雅黑", 10)); //歌曲 QString fileName = QFileInfo(filePath).baseName(); QTableWidgetItem *fileNameItem = new QTableWidgetItem(fileName); fileNameItem->setTextAlignment(Qt::AlignCenter); fileNameItem->setFont(QFont("微软雅黑", 10)); //时间 WCHAR wFilePath[MAX_PATH]; astr_ustr(const_cast<char*>(filePath.toStdString().c_str()), wFilePath); unsigned long nMusicTime = getMusicTime(wFilePath); QTime time(0, nMusicTime / 60, nMusicTime % 60); QTableWidgetItem *timeItem = new QTableWidgetItem(time.toString("mm:ss")); timeItem->setTextAlignment(Qt::AlignCenter); timeItem->setFont(QFont("微软雅黑", 10)); //插入播放列表 int currentRows = m_TableWidget->rowCount();//返回列表中的行数 m_TableWidget->insertRow(currentRows);//从播放列表中的当前行插入 rowItem->setText(QString::number(currentRows + 1)); m_TableWidget->setItem(currentRows, 0, rowItem); m_TableWidget->setItem(currentRows, 1, fileNameItem); m_TableWidget->setItem(currentRows, 2, timeItem); //更改时间列间隔 if (currentRows + 1 <= 12) { m_TableWidget->horizontalHeader()->resizeSection(3, 80); } else { m_TableWidget->horizontalHeader()->resizeSection(3, 65); } //将音乐信息加入vector m_mapMusicRows->insert(make_pair(fileName, currentRows)); m_mapMusicFilePath->insert(make_pair(fileName, filePath)); //放入数据库 DBModule::insertLine(fileName, time.toString("mm:ss"), filePath); }