当前位置: 首页 > article >正文

Qt在线音乐播放器

效果图片展示

1. 本地音乐播放和暂停

2. 在线音乐搜索播放

3. 通过拖动进度条改变播放进度

 1.实现播放

private:Ui::Widget *ui;QMediaPlayer *player;   //播放者QString musicpath;      //本地音乐路径bool isplay=false;      //bool类型的播放判断变量
#include <QMediaPlayer>

Qt播放音乐时要添加播放者,需要添加QMediaPlayer这个头文件,还需要在要得在项目文件(.pro)中加入:QT += multimedia network。QString对象用于保存需要打开的本地文件路径。bool变量用于判断歌曲是否正在播放,将用在播放函数中。

2.读取本地音乐文件

通过QFileDialog 打开需要播放的歌单文件,并将其加入到·播放列表中。

void Widget::readMusicfile()
{musicpath = QFileDialog::getExistingDirectory();QDir dir(musicpath);QStringList nameFileters;nameFileters<<"*.mp3";QStringList files=dir.entryList(nameFileters,QDir::Files|QDir::Readable,QDir::Name);musiclist->addItems(files);musiclist->sortItems();currentmusic->setText(musiclist->item(0)->text());player->setMedia(QUrl::fromLocalFile(musicpath+'/'+musiclist->item(0)->text()));player->setVolume(50);currentvolume->setText("50");volumeprogress->setSliderPosition(50);player->stop();
}

3.音乐播放和暂停

音乐的播放和暂停通过同一个控件来控制,利用bool变量来判断当前音乐是否处在播放状态。

void Widget::playpause_clicked()
{if(isplay){this->player->pause();this->isplay=false;}else{this->player->play();this->isplay=true;}
}

4.通过滑杆来调节播放进度

通过滑杆的位置来计算出播放的时间进度,并显示出来。

void Widget::player_positionChanged(qint64 position)
{if(this->timeprogress->isSliderDown()){return;}timeprogress->setSliderPosition(position);int secs=position/1000;int mins=secs/60;secs=secs%60;this->currenttime->setText(QString::asprintf("%02d:%02d",mins,secs));if(player->position()==player->duration() && player->position()!=0 && player->duration()!=0){nextsong_clicked();}
}

 5.进度条的总长度

void Widget::player_durationChanged(qint64 duration)
{timeprogress->setMaximum(duration);int secs=duration/1000;int mins=secs/60;secs=secs%60;this->durationstime->setText(QString::asprintf("%02d:%02d",mins,secs));
}

6.上一首和下一首

void Widget::lastsong_clicked()
{int currentrow=musiclist->currentRow();int rowcout=musiclist->count();musiclist->setCurrentRow((currentrow-1+rowcout)%rowcout);
}void Widget::nextsong_clicked()
{int currentrow=musiclist->currentRow();int rowcount=musiclist->count();musiclist->setCurrentRow((currentrow+1)%rowcount);
}

7.音量调节

void Widget::volumeprogress_valueChanged(int value)
{player->setVolume(value);currentvolume->setText(QString::asprintf("%d",value));
}

8.音乐播放列表

创建了一个QListWidget对象来展示歌单播放,可以点击歌单上的歌曲进行切换播放。

void Widget::musiclist_Changed(int currentrow)
{currentmusic->setText(musiclist->item(currentrow)->text());player->setMedia(QUrl::fromLocalFile(musicpath+'/'+musiclist->item(currentrow)->text()));player->setVolume(volumeprogress->value());player->play();this->isplay=true;
}

9.在线歌曲搜索

这里采用通过http访问搜索的方式,访问的是网易云api。

void Widget::search_clicked()
{QNetworkRequest request;request.setUrl(QString("http://iwxyi.com:3000/search?keywords=%0").arg(song->text()));request.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-www-form-urlencoded; charset=UTF-8");request.setHeader(QNetworkRequest::UserAgentHeader, "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36");http_acc->get(request);
}void Widget::recv_ack(QNetworkReply *r)
{data=r->readAll();QJsonParseError err;QJsonDocument json=QJsonDocument::fromJson(data,&err);if(err.error!=QJsonParseError::NoError){qDebug()<<"err"<<err.errorString();return;}QJsonObject object=json.object();QStringList keys=object.keys();if(keys.contains("result")){QJsonObject result=object["result"].toObject();QStringList rkeys=result.keys();if(result.contains("songs")){QJsonArray arr=result["songs"].toArray();for(auto i:arr){QJsonObject object_1=i.toObject();musicId=object_1["id"].toInt();music_duration=object_1["duration"].toInt();musicname=object_1["name"].toString();mId=object_1["mvId"].toInt();a=mId;QStringList artistsKeys = object.keys();if(artistsKeys.contains("artists")){QJsonArray artistsArray = object["artists"].toArray();for(auto j : artistsArray){QJsonObject object_2 = j.toObject();singername = object_2["name"].toString();         // 歌手名}}if(artistsKeys.contains("album")){QJsonObject aObject = object["album"].toObject();aName = aObject["name"].toString();            // 专辑名}qDebug()<<"音乐ID:"+QString::number(musicId);qDebug()<<"音乐名:"+musicname;qDebug()<<"歌手名:"+singername;qDebug()<<"总时长:"+QString::number(music_duration);qDebug()<<"专辑名:"+aName;qDebug()<<"mv的id:"+QString::number(mId);}}}
}

10.在线音乐播放

void Widget::onlinePlay()
{musiclist->hide();QString url;url=QString("https://music.163.com/song/media/outer/url?id=%0").arg(musicId);playlist->addMedia(QUrl(url));player->setPlaylist(playlist);                     //将playlist设置为当前播放列表player->setMedia(playlist);player->play();player->setVolume(50);currentvolume->setText("50");volumeprogress->setSliderPosition(50);currentmusic->setText(musicname);}

源码链接:

(4条消息) 基于Qt实现的在线音乐播放器-嵌入式文档类资源-CSDN文库https://download.csdn.net/download/qq_45367445/86394844?spm=1001.2014.3001.5503

http://www.lryc.cn/news/2415839.html

相关文章:

  • 《Spring视频教程》(p2)
  • domodal返回值问题
  • 【芯核架构】听你说你很了解ARM?
  • winrar4.0 注册码 key
  • Spring定时任务的几种实现
  • 心灵指南 刘墉 第三辑 肯定自己 笔记
  • 传说中的800句记7000词
  • 如何汉化vs2010、VS015、vs2017、VS019、v2022
  • 杂记
  • 缓存溢出
  • Linux USB 驱动实验
  • 用户行为分析
  • CodeGear Delphi 2007 for Win32 专业版下载地址及安装、破解方法
  • VBScript基础,变量,函数,流程
  • android布局layout,Android布局(layout)
  • Vmware17.5.1安装CentOS-Stream-9 【超超详细图文安装教程】
  • Django项目实战----接入第三方QQ登录绑定用户
  • 站外SEO应该怎么做?
  • 华为ct3100在entware上安装debian环境且在debian中安装samba过程
  • Blog主流程序整理(转)
  • Ubuntu7.04安装全实录
  • 3ds Max 2019: Advanced Materials 3ds Max 2019:材质高级教程 Lynda课程中文字幕
  • 数据库原理实验二 数据库管理 实验报告
  • 2007年度全国国际旅行社100强名单
  • wpe使用方法(详细)(--新加秒10图)(10号继续可用)
  • 黑莓9520拆机过程
  • 吴宗宪主持妙语
  • 处理器架构 (十四) arm1176 微架构下 各芯片的不同
  • Behance 大神推荐2019 年所有设计领域的最新趋势!
  • 试用 smartdraw 2010 方便快捷的图表工具