前言:在折騰點歌播放器的時候,在網上看了很多用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()