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