python 本地音樂播放器制作過程

制作這個播放器的目的是為了將下載下來的mp3文件進行隨機或是順序的播放。選擇需要播放的音樂的路徑,選擇播放方式,經過測試可以完美的播放本地音樂。

【閱讀全文】

在開始之前介紹一個免費下載mp3音樂的網站,有需要的可以下載自己喜歡的音樂。當然有各大音樂平臺會員的大佬就不需要了。

http://music.y444.cn/#/

缺少音樂素材的可以去免費下載即可,準備好音樂素材后將其放到一個文件夾下面即可。

在應用實現(xiàn)過程中,總共使用了下面這些庫,特別需要注意的是這個庫playsound使用的版本是1.3.0,聽說其他版本在播放音樂時可能存在問題。也可以將播放音樂的部分換成其他的實現(xiàn)方式。

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys

from QCandyUi import CandyWindow

import random, os
from playsound import playsound

最先實現(xiàn)的是播放音樂的業(yè)務邏輯,這里是采用pyqt5自帶的QThread線程來實現(xiàn)的,目的是將播放音樂的部分作為一個子線程來運行,防止與UI界面的主線程產生阻塞。

實現(xiàn)子線程的部分是一樣的范式,一般情況下按照這種范式實現(xiàn),屢試不爽。在前面的UI桌面應用中幾乎都是使用這種方式來實現(xiàn)多線程的。

class PlayThread(QThread):
    finished = pyqtSignal(bool)

    def __init__(self, parent=None):
        super(PlayThread, self).__init__(parent)
        self.parent = parent
        self.working = True

    def __del__(self):
        self.working = False
        self.wait()

    def run(self):
        music_files = os.listdir(self.parent.music_file_path.text())
        print(music_files)
        for index in range(0, len(music_files) - 1):
            if self.parent.play_type_selected.currentText() == '隨機播放':
                index = random.randint(0, len(music_files) - 1)
            print(index)
            playsound(os.path.join(self.parent.music_file_path.text(), music_files[index]))
        self.finished.emit(True)

音樂播放的業(yè)務邏輯實現(xiàn)完成了,接下來來實現(xiàn)UI界面的部分。應用就是簡單的設計了一下不是很復雜。

file

pyqt5的UI界面的實現(xiàn)方式主要是組件的布局和槽函數(shù)的引用,下面是UI界面布局及各個槽函數(shù)的初始化及引用。以及如何界面的主線程中調用子線程的使用。

class MusicUI(QWidget):
    def __init__(self):
        super(MusicUI, self).__init__()
        self.init_ui()
    def init_ui(self):
        self.setWindowTitle('本地音樂播放器  公眾號:[Python 集中營]')
        self.setWindowIcon(QIcon('音樂.ico'))

        self.setFixedWidth(500)
        self.setFixedHeight(100)

        hbox1 = QHBoxLayout()
        self.music_file_path = QLineEdit()
        self.music_file_path.setReadOnly(True)

        self.music_file_btn = QPushButton()
        self.music_file_btn.setText('路徑')
        self.music_file_btn.clicked.connect(self.music_file_btn_click)

        hbox1.addWidget(self.music_file_path)
        hbox1.addWidget(self.music_file_btn)

        hbox2 = QHBoxLayout()

        self.play_type_selected = QComboBox()
        self.play_type_selected.addItem('隨機播放')
        self.play_type_selected.addItem('順序播放')

        self.start_btn = QPushButton()
        self.start_btn.setText('開始播放')
        self.start_btn.clicked.connect(self.start_btn_click)

        hbox2.addWidget(self.play_type_selected)
        hbox2.addWidget(self.start_btn)

        vbox = QVBoxLayout()
        vbox.addLayout(hbox1)
        vbox.addLayout(hbox2)

        self.thread_ = PlayThread(self)
        self.thread_.finished.connect(self.finished)

        self.setLayout(vbox)

    def music_file_btn_click(self):
        dir = QFileDialog.getExistingDirectory(self, "選擇文件夾", os.getcwd())
        self.music_file_path.setText(dir)

    def start_btn_click(self):
        self.start_btn.setEnabled(False)
        self.thread_.start()

    def finished(self,finished):
        if finished is True:
            self.start_btn.setEnabled(True)

# 最后,使用mian函數(shù)將界面布局的整個過程加入到主體循環(huán)中就大功告成了。
if __name__ == '__main__':

    app = QApplication(sys.argv)
    w = CandyWindow.createWindow(MusicUI(), theme='blue', title='本地音樂播放器  公眾號:[Python 集中營]',
                                 ico_path='音樂.ico')
    w.show()
    sys.exit(app.exec_())

完整源代碼已經保存在百度網盤上面,將上述代碼塊全部copy到開發(fā)中運行即可,或者在公眾號內回復'1002'獲取下載鏈接直接下載.py文件到開發(fā)工具運行也是可以的。

創(chuàng)作不易,歡迎大家積極提問,有python相關的問題請留言,看到即回復,感謝大家一直的支持!

【往期精彩】

自動化工具:PyAutoGUI的鼠標與鍵盤控制,解放雙手的利器!

來自程序猿的生日蛋糕你見過嗎?

懶人python操作,代碼中永遠只需要導入一個庫...

自動化辦公:手機號碼提取器,使用正則表達式輕松提取文本文件中的手機號碼...

剛剛發(fā)現(xiàn)的可視化動態(tài)圖庫ipyvizzu,太好看了!

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 序言 清明時節(jié)雪紛紛鄙人生性畏寒冷宅臥室中空寂聊如何解遂寫此音樂播放的大體結構 正題 整體的框架 項目地址:htt...
    buzuibugui閱讀 869評論 2 0
  • 本文將引導大家做一個音樂播放器,在做這個Android開發(fā)實例的過程中,能夠幫助大家進一步熟悉和掌握學過的List...
    kingZXY2009閱讀 3,226評論 1 5
  • 最近一直在做音頻播放器的改版重構,開發(fā)測試到最后發(fā)布用時差不多要一個月,功能上可能并不是很多,跟大多數(shù)音樂播放器一...
    大馮宇宙閱讀 6,079評論 1 2
  • 本人初學Android,最近做了一個實現(xiàn)安卓簡單音樂播放功能的播放器,收獲不少,于是便記錄下來自己的思路與知識總結...
    落日柳風閱讀 19,466評論 2 41
  • 相信大家不想再去了解那些本地音樂的了 其實網絡獲取音樂也沒有那么復雜 你只需要有一個自己uri所謂的網址 但必須只...
    WangYouHu閱讀 2,639評論 0 4

友情鏈接更多精彩內容