Delphi 音乐播放器,支持桌面歌词、换肤、换颜色、歌词自动下载,Win7下支持小窗口预览,有些功能未完全完成,就如调整音量(懒得搞,但是可以听了,只写了一次性播放列表没得循环的)。支持酷狗、QQ的动感歌词,以动感方式显示自己的实现方法,工程
刚刚看了下,已经有一个月没有写博客了,今天没事,用Qt做了一个很小的音频播放器。实现了基本功能,界面没有美化,难看的我都有点不忍心了。言归正传,说说体会和具体实现吧。
在Qt4的时候,Qt集成了一种作为音频方面的模块-phonon,而在Qt5实现后,Qt将phonon删除了,同时,又有了Qmediaplayer类来实现音频的播放。
1、定义两个类的指针,QMediaplayer和QMediaplayList指针,并将列表播放的模式设置为基本的循环模式。
playList=new QMediaPlaylist;
playList->setPlaybackMode(QMediaPlaylist::Loop);
player=new QMediaPlayer;
player->setPlaylist(playList);
2、打开文件,并将音频文件添加到播放列表里面
QString initialName=QDir::homePath();
QStringList pathList=QFileDialog::getOpenFileNames(this, tr("选择文件"), initialName, tr("*.mp3","*wmv"));
for(int i=0; i
{
QString path=QDir::toNativeSeparators(pathList.at(i));
if(!path.isEmpty())
{
playList->addMedia(QUrl::fromLocalFile(path));
QString fileName=path.split("\\").last();
ui->listWidget->addItem(fileName);
}
}
3、双击列表时可以播放
ui->label->setText( ui->listWidget->currentItem()->text() );
qDebug()<listWidget->currentIndex().row();
playList->setCurrentIndex( ui->listWidget->currentIndex().row() );
player->play();
ui->btn_start->setText(tr("PASUE") );
4、快进、和歌曲长度前言:在上文iOS录音实践中我们用到了AVAudioPlayer来播放本地音频文件。可是在实际应用中我们需要播放网络音频文件,那么在iOS中如何播放网络流媒体呢?就是使用AudioToolbox框架中的音频队列服务Audio Queue Services。本文将介绍第三方优秀开源框架FreeStr
//调节快进后,音乐播放也快进
void m_player::slot_setPosition(int value)
{
player->setPosition(value);
}
//调节快进
void m_player::slot_positionChanged(qint64 position)
{
ui->horizontalSlider->setValue(position);
}
//获取歌曲的长度,并设置长度
void m_player::slot_durationChanged(qint64 duration)
{
ui->horizontalSlider->setRange(0,duration);
}
5、播放和暂停
switch (player->state())
{
case QMediaPlayer::PlayingState:
player->pause();
break;
default:
player->play();
break;
}
6、创建右键菜单,可以选择播放模式
m_pContextMenu = new QAction(this);
m_pContextMenu->setSeparator(true);
addAction( ui->m_pActionCurrentItemInLoop);
addAction(ui->m_pActionLoop);
addAction(ui->m_pActionRandom);
addAction(ui->m_pActionSequential);
setContextMenuPolicy(Qt::ActionsContextMenu);
7、播放上一首和下一首
void m_player::on_btn_last_clicked()
{
int currentIndex=playList->currentIndex();
if(--currentIndex<0) currentIndex=0;
playList->setCurrentIndex(currentIndex);
player->play();
}
void m_player::on_btn_next_clicked()
{
int currentIndex=playList->currentIndex();
if(++currentIndex==playList->mediaCount()) currentIndex=0;
playList->setCurrentIndex(currentIndex);
player->play();
}
8、切歌后显示也要变化
QListWidgetItem *item = ui->listWidget->item(value);
item->setSelected(true);
ui->label->setText(item->text());