python 使用pygame 或者pyqt5 播放音樂


前言:在折騰點歌播放器的時候,在網上看了很多用python 播放音樂的相關介紹,瞎折騰了許久,最后在自己在編程過程中使用了pygame或pyqt5播放音樂。為了給后來者提供經驗,簡單記錄下代碼,當然還有其他的播放音頻的方法可自行探索

聲明:這二者都是在用過的,復制研究研究就可以用(方便吧),python版本:3.7.8 編譯器:VScode

參考資料:
https://www.cnblogs.com/Sunny-John/p/12637976.html 使用Python播放mp3格式音頻
https://blog.csdn.net/qq_41871957/article/details/96710379 獲取MP3歌曲時長
https://www.cnblogs.com/chan7/p/5801953.html Python 用pygame模塊播放MP3
https://www.cnblogs.com/liquancai/p/13236974.html pygame 的聲音播放
https://www.jianshu.com/p/917b2ea7f719 pyqt5音頻播放
https://blog.csdn.net/Dontla/article/details/105251700 python PyQt5.QtWidgets.QApplication類(sys.argv)(app應用對象類)
https://blog.csdn.net/hu694028833/article/details/80977302 PyQt5多線程
https://maicss.gitbook.io/pyqt5-chinese-tutoral/ PyQt中文翻譯
https://blog.csdn.net/weixin_30627381/article/details/94979459 PyQt5多線程之音樂播放器(代碼實例)
https://blog.csdn.net/zhaoyun_zzz/article/details/90290552 QT學習之QMediaPlayer(重要)

import pygame
from mutagen.mp3 import MP3 # 這里需要安裝配套的庫
import time

def pygame_():

    song_path = '.\music.mp3'
    audio = MP3(song_path) # 獲取音樂的播放時長
    pygame.mixer.init()    # 初始化音頻部分
    pygame.mixer.music.load(song_path) # 載入音樂,支持ogg、mp3等格式不過,MP3 並不是所有的系統都支持(Linux 默認就不支持 MP3 播放)
    pygame.mixer.music.play()          # 播放start
    time.sleep(int(audio.info.length)) # 注意:一定需要設置time.sleep,否則程序在一瞬間跑完

# 其他相關命令---------------------------------------------------------------------------
'''
    pygame.mixer.music.stop() # 音樂停止
    pygame.mixer.music.rewind() # 重新播放
    pygame.mixer.music.pause() # 暫停播放
    pygame.mixer.music.unpause() # 取消暫停
    pyagme.mixer.music.get_pos() # 獲取當前播放了多長時間
    pygame.mixer.music.get_busy() # 判斷是否在播放音樂,返回1為正在播放
    pygame.mixer.music.set_volume(value) # 設置音量,音量value的范圍為0.0到1.0
    pygame.mixer.music.fadeout(time) # 用來進行淡出,在time毫秒的時間內音量由初始值漸變為0,最后停止播放
    pygame.mixer.music.set_endevent(pygame.USEREVENT + 1) # 在音樂播放完成時,用事件的方式通知用戶程序,設置當音樂播放完成時發送pygame.USEREVENT+1事件給用戶程序
    pygame.mixer.music.queue(filename) # 使用指定下一個要播放的音樂文件,當前的音樂播放完成后自動開始播放指定的下一個。一次只能指定一個等待播放的音樂文件
    pygame.mixer.music.play(loops=0, start=0.0) 
    # 其中 loops 表示循環次數,如果設置為 -1 ,表示不停的循環播放,如果 loops 為 5 ,則播放 5+1=6 次;start 表示從音樂文件的哪一秒開始播放,設置為 0 表示從開始完整播放
'''
    # 注pygame還可以使用sound 對象來播放音樂,但是必須是 WAV 或者 OGG 文件
    hello_sound = pygame.mixer.Sound("hello.ogg")		# 建立 Sound 對象
    hello_sound.play()					        # 聲音播放一次
    
    # play(loop, maxtime) ,loop 是重復的次數(取1是兩次,注意是重復的次數,而不是播放的次數),-1 意味着無限循環;maxtime 是指多少毫秒后結束
    # 若不使用任何參數調用,意味着把這個聲音播放一次。一旦 play() 方法調用成功,就會返回一個 Channel 對象,否則返回一個 None

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5 import QtMultimedia
import sys

# 播放mp3------------------------------------------------------------------
app = QtWidgets.QApplication(sys.argv)
path = '.\music.mp3' # 音樂文件路徑
url = QtCore.QUrl.fromLocalFile(path)
# 👆支持音樂url或本地地址
# 注:url 路徑無法使用雙引號的url地址,單引號可以(不要問我為什么,我也想知道)
# 如果你有雙引號的url地址,建議這么寫 path = path[1:-1]

content = QtMultimedia.QMediaContent(url)  # 加載音樂
player = QtMultimedia.QMediaPlayer()       # 創建 QMediaPlayer控件
player.setMedia(content)                   # 關聯 QMediaPlayer控件與音樂地址
player.setVolume(80)                       # 設置播放音量 0~100
player.play()                              # 播放
sys.exit(app.exec())                        

# 播放wav音頻---------------------------------------------------------------

app = QtWidgets.QApplication(sys.argv)
sound_file = 'triggers/waves/nock.wav'
sound = QtMultimedia.QSound(sound_file)
sound.play()
sys.exit(app.exec())

# 播放無壓縮的音頻文件(如wav文件)---------------------------------------------

app = QtWidgets.QApplication(sys.argv)
sound_file = 'test.wav'
sound = QtMultimedia.QSoundEffect()
sound.setSource(QtCore.QUrl.fromLocalFile(sound_file))
sound.setLoopCount(QtMultimedia.QSoundEffect.Infinite)
sound.setVolume(100)
sound.play()
app.exec()

# 播放PCM音頻(裸流)文件,最強大的方式--------------------------------------

app = QtWidgets.QApplication(sys.argv)
format = QtMultimedia.QAudioFormat()
format.setChannelCount(1)
format.setSampleRate(1000)
format.setSampleSize(8)
format.setCodec("audio/pcm")
format.setByteOrder(QtMultimedia.QAudioFormat.LittleEndian)
format.setSampleType(QtMultimedia.QAudioFormat.UnSignedInt)
output = QtMultimedia.QAudioOutput(format)

rfile = QtCore.QFile()
rfile.setFileName("../test/19147_160913105347.adpcm")
rfile.open(QtCore.QIODevice.ReadOnly)
output.start(rfile)
app.exec()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM