生活随笔
收集整理的這篇文章主要介紹了
极简随机音乐播放器
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
極簡(jiǎn)隨機(jī)音樂(lè)播放器
說(shuō)明
主要功能:
1.音樂(lè)的在線播放
2.連接到了網(wǎng)易云音樂(lè)引擎
軟件架構(gòu):
播放器使用PyQt5編寫音樂(lè)接口來(lái)自于UomgAPI(https://api.uomg.com/), 連接到了網(wǎng)易云音樂(lè)引擎
主要技術(shù)路線:通過(guò)音樂(lè)引擎隨機(jī)獲取音樂(lè)采用PyQt5對(duì)音樂(lè)進(jìn)行播放通過(guò)窗體對(duì)音樂(lè)播放進(jìn)行控制
主體框架:pythonPyQt5requests
工作:
1.python窗體開(kāi)發(fā)、樣式調(diào)整
2.窗體音樂(lè)控制: 播放、下一首、進(jìn)度條展示等
3.調(diào)用音樂(lè)接口 ,發(fā)送 post 接口請(qǐng)求 獲取 音樂(lè)鏈接
4.調(diào)用PyQt5播放方法,播放音樂(lè)
5. 獲取音樂(lè)播放時(shí)長(zhǎng),編寫定時(shí)器,當(dāng)播放完畢,獲取下一個(gè)音樂(lè)的播放鏈接,然后進(jìn)行播放。
效果
部分代碼
完整代碼 下載 去這個(gè)鏈接
https://download.csdn.net/download/qq_35385687/85491514
from PyQt5
import QtWidgets
from PyQt5
import QtGui
from PyQt5
import QtCore
from PyQt5
.QtMultimedia
import QMediaContent
,QMediaPlayer
import qtawesome
as qta
import requests
,traceback
class Music(QtWidgets
.QMainWindow
):def __init__(self
):super().__init__
()self
.setFixedSize
(400,200)self
.setWindowTitle
("極簡(jiǎn)隨機(jī)音樂(lè)播放器")self
.init_ui
()self
.custom_style
()self
.playing
= False self
.player
= QMediaPlayer
(self
)self
.timer
= QtCore
.QTimer
()self
.timer
.setInterval
(1000)self
.timer
.start
()self
.timer
.timeout
.connect
(self
.check_music_status
)def custom_style(self
):self
.setStyleSheet
('''#main_widget{border-radius:5px;}#play_btn,#pervious_btn,#next_btn{border:none;}#play_btn:hover,#pervious_btn:hover,#next_btn:hover{background:gray;border-radius:5px;cursor:pointer;}''')self
.close_btn
.setStyleSheet
('''QPushButton{background:#F76677;border-radius:5px;}QPushButton:hover{background:red;}''')self
.status_label
.setStyleSheet
('''QLabel{background:#F7D674;border-radius:5px;}''')def init_ui(self
):self
.main_widget
= QtWidgets
.QWidget
()self
.main_widget
.setObjectName
("main_widget")self
.main_layout
= QtWidgets
.QGridLayout
()self
.main_widget
.setLayout
(self
.main_layout
)self
.title_lable
= QtWidgets
.QLabel
("極簡(jiǎn)隨機(jī)音樂(lè)播放器")self
.close_btn
= QtWidgets
.QPushButton
("") self
.close_btn
.clicked
.connect
(self
.close_btn_event
)self
.close_btn
.setFixedSize
(15,15)self
.status_label
= QtWidgets
.QLabel
("")self
.status_label
.setFixedSize
(15,15)play_icon
= qta
.icon
("fa.play-circle",)self
.play_btn
= QtWidgets
.QPushButton
(play_icon
,"")self
.play_btn
.setIconSize
(QtCore
.QSize
(80, 80))self
.play_btn
.setFixedSize
(82,82)self
.play_btn
.setObjectName
("play_btn")self
.play_btn
.clicked
.connect
(self
.play_music
)next_icon
= qta
.icon
("fa.play-circle-o")self
.next_btn
= QtWidgets
.QPushButton
(next_icon
,"")self
.next_btn
.setIconSize
(QtCore
.QSize
(80,80))self
.next_btn
.setFixedSize
(82,82)self
.next_btn
.setObjectName
("next_btn")self
.next_btn
.clicked
.connect
(self
.next_music
)self
.process_bar
= QtWidgets
.QProgressBar
()self
.process_value
= 0self
.process_bar
.setValue
(self
.process_value
)self
.process_bar
.setFixedHeight
(5)self
.process_bar
.setTextVisible
(False)self
.main_layout
.addWidget
(self
.close_btn
,0,0,1,1)self
.main_layout
.addWidget
(self
.title_lable
,0,1,1,1)self
.main_layout
.addWidget
(self
.status_label
,1,0,1,1)self
.main_layout
.addWidget
(self
.play_btn
, 1, 1, 1, 1)self
.main_layout
.addWidget
(self
.next_btn
, 1, 2, 1, 1)self
.main_layout
.addWidget
(self
.process_bar
,2,0,1,3)self
.setCentralWidget
(self
.main_widget
)self
.setWindowFlag
(QtCore
.Qt
.FramelessWindowHint
) def close_btn_event(self
):self
.close
()def mousePressEvent(self
, event
):if event
.button
() == QtCore
.Qt
.LeftButton
:self
.m_drag
= Trueself
.m_DragPosition
= event
.globalPos
() - self
.pos
()event
.accept
()self
.setCursor
(QtGui
.QCursor
(QtCore
.Qt
.OpenHandCursor
))def mouseMoveEvent(self
, QMouseEvent
):if QtCore
.Qt
.LeftButton
and self
.m_drag
:self
.move
(QMouseEvent
.globalPos
() - self
.m_DragPosition
)QMouseEvent
.accept
()def mouseReleaseEvent(self
, QMouseEvent
):self
.m_drag
= Falseself
.setCursor
(QtGui
.QCursor
(QtCore
.Qt
.ArrowCursor
))def play_music(self
):try:if self
.playing
is False:self
.playing
= True self
.play_btn
.setIcon
(qta
.icon
("fa.pause-circle")) player_status
= self
.player
.mediaStatus
() if player_status
== 6:self
.status_label
.setStyleSheet
('''QLabel{background:#6DDF6D;border-radius:5px;}''')self
.player
.play
()else:self
.next_music
()else:self
.status_label
.setStyleSheet
('''QLabel{background:#0099CC;border-radius:5px;}''')self
.playing
= Falseself
.play_btn
.setIcon
(qta
.icon
("fa.play-circle"))self
.player
.pause
()except Exception
as e
:print(repr(e
))def next_music(self
):try:self
.status_label
.setStyleSheet
('''QLabel{background:#F7D674;border-radius:5px;}''')self
.playing
= True self
.play_btn
.setIcon
(qta
.icon
("fa.pause-circle")) self
.process_value
= 0 self
.get_music_thread
= GetMusicThread
()self
.get_music_thread
.finished_signal
.connect
(self
.init_player
)self
.get_music_thread
.start
()except Exception
as e
:print(traceback
.print_exc
())def init_player(self
,url
):content
= QMediaContent
(QtCore
.QUrl
(url
))self
.player
.setMedia
(content
)self
.player
.setVolume
(50)self
.player
.play
()self
.duration
= self
.player
.duration
() self
.status_label
.setStyleSheet
('''QLabel{background:#6DDF6D;border-radius:5px;}''')self
.process_timer
= QtCore
.QTimer
()self
.process_timer
.setInterval
(1000)self
.process_timer
.start
()self
.process_timer
.timeout
.connect
(self
.process_timer_status
)def check_music_status(self
):player_status
= self
.player
.mediaStatus
()player_duration
= self
.player
.duration
()if player_status
== 7:self
.next_music
()if player_duration
> 0:self
.duration
= player_duration
def process_timer_status(self
):try:if self
.playing
is True:self
.process_value
+= (100 / (self
.duration
/1000))self
.process_bar
.setValue
(self
.process_value
)except Exception
as e
:print(repr(e
))
class GetMusicThread(QtCore
.QThread
):finished_signal
= QtCore
.pyqtSignal
(str)def __init__(self
,parent
=None):super().__init__
(parent
)def run(self
):reps
= requests
.post
("https://api.uomg.com/api/rand.music?format=json")file_url
= reps
.json
()['data']['url']self
.finished_signal
.emit
(file_url
)def main():import sysapp
= QtWidgets
.QApplication
(sys
.argv
)gui
= Music
()gui
.show
()sys
.exit
(app
.exec_
())if __name__
== '__main__':main
()
總結(jié)
以上是生活随笔為你收集整理的极简随机音乐播放器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。