Beispiel #1
0
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);
}