日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于Qt编写的在线音乐播放器

發布時間:2023/12/10 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于Qt编写的在线音乐播放器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

思路: Qt中提供了音視頻播放的類,類中提供了很多播放類的接口供我們調用,基本可以實現一個完整播放器的所有功能,由于想要實現的是支持在線搜索和播放的,所以要先解決音頻的來源,再進行ui界面的設計,最后將背后的功能實現。

?一,調用網易云API

如果想自己寫服務器作為音樂播放的來源的話比較難實現,所以就調用網易云音樂的API,用特定的請求數據格式獲得數據后進行解析后就可以得到音樂的 Url? 格式,再通過Qt提供的在線播放類播放即可。?

網易云音樂提供了這樣一個 API 用于公共請求使用:? ?https://music.cyrilstudio.top

成功進入后我們點擊查看文檔?

?點擊開始使用:

?點擊使用指南可以查看該API提供了哪些基本功能,并提供了不同的功能調用的方法

?以搜索歌曲為例,請求資源的格式為 :https://music.cyrilstudio.top/search?keywords=歌曲名稱

?我們先以他提供的例子將 Url 進行驗證,如果得到如下的格式說明正確

?這是對方服務器接收你的請求后返回的 json 格式的文本,使用 http://json.cn? ?進行翻譯,查看是否包含所需要的信息,我們將 json 格式的文本全部復制到這個網頁中進行解析,得到如下信息

?id 是音樂ID ,可以唯一標識一首音樂,其他的還有歌曲名,歌手名,歌曲時長等信息都在里面,需要將其解析出來。

二,使用Qt中的 QNetworkAccessManager 類發送和接收數據

?QNetworkAccessManager 也被稱為網絡大管家類,是因為所有和網絡相關的接口都是圍繞QNetworkAccessManager創造出來的對象,并且一個應用程序只要有一個QNetworkAccessManager對象即可該類控制著應用程序發送請求和接受回復。該類也承載著一切公共的配置以及所發請求的設置,還包含了代理配置、緩存配置、以及相對應的各種信號,reply(應答)信號可以用來監視網絡活動。所以我們可以通過這一個對象完成信息的收發。具體實現如下:

QNetworkAccessManager* http_acc = new QNetworkAccessManager; //定義并實例化一個網絡管家 QString str;str=QString("https://music.cyrilstudio.top/search?keywords=海闊天空"); //將請求格式作為字符串保存QNetworkRequest request; //定義一個請求對象request.setUrl(QString(str)); //將請求格式設置給請求對象http_acc->get(request); //請求

這樣對方的服務器就會接收到正確的請求,之后便會將你所請求的內容以 json 格式發送過來,先通過接收函數接收對方發送的 json 文本后再進行解析。

當然Qt 也提供了接收信息的類? ?QNetworkReply? ,通過定義一個接收對象,將內容全部讀取出來

QNetworkReply* r; //定義一個接收信息對象 QByteArray searchInfo= r->readAll(); //全部讀取

?三,解析json文本

?1,先將收到的信息提取后轉換為 json 文件對象,并檢查內容是否符合 json 語法。

searchInfo = r->readAll(); // 讀取全部信息QJsonParseError err; //錯誤信息對象QJsonDocument json_recv = QJsonDocument::fromJson(searchInfo,&err);//將json文本轉換為 json 文件對象if(err.error != QJsonParseError::NoError) //判斷是否符合語法{qDebug() <<"搜索歌曲Json獲取格式錯誤"<< err.errorString();return;}

2,如果語法合法后,我們就要檢查是否有我們想要的信息,并對各個信息的 key 值作為解析條件提取出來。?

QJsonObject totalObject = json_recv.object(); QStringList keys = totalObject.keys(); // 列出json里所有的keyif(keys.contains("result")) //如果有結果{ //在 json 文本中 {}花括號里面是QJsonObject對象, []方括號里面是QJsonArrayQJsonObject resultObject = totalObject["result"].toObject(); //就將帶 result 的內容提取后轉換為對象QStringList resultKeys = resultObject.keys(); //保存所有keyif(resultKeys.contains("songs")) //如果 key 為songs ,代表找到了歌曲{QJsonArray array = resultObject["songs"].toArray();for(auto i : array) //開始獲取歌曲中的信息{QJsonObject object = i.toObject();musicId = object["id"].toInt(); // 音樂idmusicDuration = object["duration"].toInt(); // 音樂長度musicName = object["name"].toString(); // 音樂名mvId = object["mvid"].toInt(); // mvidQStringList artistsKeys = object.keys();if(artistsKeys.contains("artists")) //如果result中包含了 artists{QJsonArray artistsArray = object["artists"].toArray(); //將 artist 的內容提取后保存for(auto j : artistsArray) {QJsonObject object2 = j.toObject();singerName = object2["name"].toString(); // 歌手名}}if(artistsKeys.contains("album")) //包含了專輯{QJsonObject albumObjct = object["album"].toObject();albumName = albumObjct["name"].toString(); // 專輯名} // qDebug()<<"音樂ID:"+QString::number(musicId); // qDebug()<<"音樂名:"+musicName; // qDebug()<<"歌手名:"+singerName; // qDebug()<<"總時長:"+QString::number(musicDuration); // qDebug()<<"專輯名:"+albumName; // qDebug()<<"mv的id:"+QString::number(mvId);emit searchFinal(number,musicId,mvId,musicName,singerName,albumName,musicDuration); //發射信號number+=1; }}number = 0;}

四,播放 url 歌曲?

?我們進行打印調試一下是否真正得到了想要的信息,以 《鼓樓》這首歌作為關鍵字進行搜索為例

?發現已經得到了我們想要的信息,所以接下來我們將獲取的音樂ID 以一定的Url 格式進行搜索進行驗證,?http:// https://music.163.com/song/media/outer/url?id=音樂ID

有了這個Url 之后我們就可以播放音樂了,如下:

QMediaPlayer *player=new QMediaPlayer; //播放對象QMediaPlayerlist playerlist=new QMediaPlayerlist; //播放列表對象QString url; //保存urlurl=QString("https://music.163.com/song/media/outer/url?id=%0").arg(musicId); //將音樂ID作為格式輸入到url中playlist->addMedia(QUrl(url)); //添加一音樂到播放列表中player->setMedia(playlist); //將列表設置到播放器中player->play(); //播放

?這樣就可以聽到自己想要聽的音樂了,這就完成了播放器的主干,其余的功能可以慢慢查看Qt中的幫助進行補充。

自己做好的簡易播放器如下,中間的空白部分功能還未完全添加

?1,搜索(在線播放)

?2,本地播放,選擇想播放的歌曲(可以選擇很多),點擊播放即可

注:源碼在我的資源中?

總結

以上是生活随笔為你收集整理的基于Qt编写的在线音乐播放器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。