生活随笔
收集整理的這篇文章主要介紹了
极简随机音乐播放器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
極簡隨機音樂播放器
說明
主要功能:
1.音樂的在線播放
2.連接到了網易云音樂引擎
軟件架構:
播放器使用PyQt5編寫音樂接口來自于UomgAPI(https://api.uomg.com/), 連接到了網易云音樂引擎
主要技術路線:通過音樂引擎隨機獲取音樂采用PyQt5對音樂進行播放通過窗體對音樂播放進行控制
主體框架:pythonPyQt5requests
工作:
1.python窗體開發、樣式調整
2.窗體音樂控制: 播放、下一首、進度條展示等
3.調用音樂接口 ,發送 post 接口請求 獲取 音樂鏈接
4.調用PyQt5播放方法,播放音樂
5. 獲取音樂播放時長,編寫定時器,當播放完畢,獲取下一個音樂的播放鏈接,然后進行播放。
效果
部分代碼
完整代碼 下載 去這個鏈接
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
("極簡隨機音樂播放器")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
("極簡隨機音樂播放器")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
()
總結
以上是生活随笔為你收集整理的极简随机音乐播放器的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。