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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

极简随机音乐播放器

發(fā)布時(shí)間:2023/12/31 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 极简随机音乐播放器 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

極簡(jiǎn)隨機(jī)音樂(lè)播放器

    • 說(shuō)明
    • 效果
    • 部分代碼

說(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)行控制
    主體框架:
  • python
  • PyQt5
  • requests
    工作:
    1.python窗體開發(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

    # coding:utf-8 # 極簡(jiǎn)隨機(jī)音樂(lè)播放器from PyQt5 import QtWidgets from PyQt5 import QtGui from PyQt5 import QtCore from PyQt5.QtMultimedia import QMediaContent,QMediaPlayer # from PySide2 import QtWidgets # from PySide2 import QtGui # from PySide2 import QtCore # from PySide2.QtMultimedia import QMediaContent # from PySide2.QtMultimedia import QMediaPlayer import qtawesome as qta import requests,tracebackclass 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 # 播放狀態(tài)初始化為否self.player = QMediaPlayer(self)self.timer = QtCore.QTimer()self.timer.setInterval(1000)self.timer.start()self.timer.timeout.connect(self.check_music_status)# 設(shè)置樣式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;}''')# 初始化UI界面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)# 標(biāo)題self.title_lable = QtWidgets.QLabel("極簡(jiǎn)隨機(jī)音樂(lè)播放器")# 關(guān)閉按鈕self.close_btn = QtWidgets.QPushButton("") # 關(guān)閉按鈕self.close_btn.clicked.connect(self.close_btn_event)self.close_btn.setFixedSize(15,15)# 音樂(lè)狀態(tài)按鈕self.status_label = QtWidgets.QLabel("")# self.swith_btn.clicked.connect(self.swith_background)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)# 進(jìn)度條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.setWindowOpacity(0.9) # 設(shè)置窗口透明度# self.setAttribute(QtCore.Qt.WA_TranslucentBackground) # 設(shè)置窗口背景透明self.setWindowFlag(QtCore.Qt.FramelessWindowHint) # 隱藏邊框# 關(guān)閉程序def close_btn_event(self):self.close()# 鼠標(biāo)長(zhǎng)按事件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))# 鼠標(biāo)移動(dòng)事件def mouseMoveEvent(self, QMouseEvent):if QtCore.Qt.LeftButton and self.m_drag:self.move(QMouseEvent.globalPos() - self.m_DragPosition)QMouseEvent.accept()# 鼠標(biāo)釋放事件def mouseReleaseEvent(self, QMouseEvent):self.m_drag = Falseself.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))# 播放音樂(lè)def play_music(self):try:# 播放音樂(lè)if self.playing is False:self.playing = True # 設(shè)置播放狀態(tài)為是self.play_btn.setIcon(qta.icon("fa.pause-circle")) # 設(shè)置播放圖標(biāo)player_status = self.player.mediaStatus() # 獲取播放器狀態(tài)# print("當(dāng)前播放狀態(tài):",player_status)if player_status == 6:# 設(shè)置狀態(tài)標(biāo)簽為綠色self.status_label.setStyleSheet('''QLabel{background:#6DDF6D;border-radius:5px;}''')self.player.play()else:self.next_music()# 暫停音樂(lè)else:# 設(shè)置狀態(tài)為藍(lán)色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))# 下一首音樂(lè)def next_music(self):try:# 設(shè)置狀態(tài)為黃色self.status_label.setStyleSheet('''QLabel{background:#F7D674;border-radius:5px;}''')self.playing = True # 設(shè)置播放狀態(tài)為是self.play_btn.setIcon(qta.icon("fa.pause-circle")) # 修改播放圖標(biāo)self.process_value = 0 # 重置進(jìn)度值# 獲取網(wǎng)絡(luò)歌曲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())# 設(shè)置播放器def init_player(self,url):# print("獲取到音樂(lè)鏈接:",url)content = QMediaContent(QtCore.QUrl(url))self.player.setMedia(content)self.player.setVolume(50)self.player.play()self.duration = self.player.duration() # 音樂(lè)的時(shí)長(zhǎng)# 設(shè)置狀態(tài)為綠色self.status_label.setStyleSheet('''QLabel{background:#6DDF6D;border-radius:5px;}''')# 進(jìn)度條計(jì)時(shí)器self.process_timer = QtCore.QTimer()self.process_timer.setInterval(1000)self.process_timer.start()self.process_timer.timeout.connect(self.process_timer_status)# 定時(shí)器def check_music_status(self):player_status = self.player.mediaStatus()player_duration = self.player.duration()# print("音樂(lè)時(shí)間:",player_duration)# print("當(dāng)前播放器狀態(tài)",player_status)if player_status == 7:self.next_music()if player_duration > 0:self.duration = player_duration# 進(jìn)度條定時(shí)器def process_timer_status(self):try:if self.playing is True:self.process_value += (100 / (self.duration/1000))# print("當(dāng)前進(jìn)度:",self.process_value)self.process_bar.setValue(self.process_value)except Exception as e:print(repr(e))# 異步子線程獲取音樂(lè)鏈接 class GetMusicThread(QtCore.QThread):finished_signal = QtCore.pyqtSignal(str)# finished_signal = QtCore.Signal(str) # PySide2的使用方法def __init__(self,parent=None):super().__init__(parent)def run(self):reps = requests.post("https://api.uomg.com/api/rand.music?format=json")# print(reps.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)題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。