pygame.mixer音频播放

1、介绍

pygame.mixer模块是一个第三方模块,广泛应用于音频播放控制业务。

2、示例

def m():
    pygame.mixer.init()
    # 加载待播放音频
    pygame.mixer.music.load('data/abc.wav')
    # 播放
    pygame.mixer.music.play()
    # 阻塞线程等待播放
    while pygame.mixer.music.get_busy():
        # 等待1/n秒,n即设置的值
        pygame.time.Clock().tick(2)
        print('进度条(毫秒):%s' % str(pygame.mixer.music.get_pos()))

3、使用

pygame.mixer.init()
  • 程序中如果想要使用pygame.mixer模块的功能,需要进行初始化
  • 全局调用一次即可
pygame.mixer.music.load(filename)
  • 加载音频文件,支持相对路径设置,支持多种音频文件格式,包括.wav和.mp3等
  • pygame.mixer同一时间只支持加载和播放一个音频,调用load函数,会覆盖上一个音频信息
  • 如果正在播放中,调用load函数,会自动结束音频播放,再进行加载
def play(loops=0, start=0.0, fade_ms=0)
pygame.mixer.music.play()
  • 播放音频文件
  • loops表示音频的循环次数,为0或者1时都表示单次循环,为-1时表示一直循环
  • start表示从指定的音频跳过时长为多少的部分开始播放,单位是秒,float类型。
    • 为0时表示不进行跳过
    • 为负数时相当于设置为0
    • 设置超出最大音频长度时,会报异常
    • 测试时发现某些mp3可以播放,但是start指定无效
  • 如果loops表示多次播放,start仅作用于首次播放,其后是完整播放音频
  • start设置超出音频长度时会报错
  • fade_ms,使音乐从 0 音量开始,并在给定时间逐渐变满音量。即淡入效果
get_busy() -> bool
  • 判断pygame.mixer是否正在播放音频
pygame.mixer.music.get_pos()
  • 返回int类型,表示播放进度,单位毫秒。注意其是实际播放的长度,不包括play函数设置start参数部分
  • 如果一个音频播放完毕,或者直接使用stop关闭后,获取进度的值为-1
pygame.time.Clock().tick(2)
  • 休眠1/2秒,等价于time.sleep(0.5) 
pygame.mixer.music.stop()
  • 停止播放音频
pygame.mixer.music.pause()
  • 暂停播放音频
pygame.mixer.music.unpause()
  • 解除暂停,继续播放音频
pygame.mixer.music.unload()
  • 卸载加载的音频
  • 如果不执行该方法,那么pygame.mixer无论是播放过程中还是播放结束,都会占用加载的音频文件。另一种处理方法是load其它的音频文件
  • 当指定音频文件被占用时,无法进行其它操作,比如os.remove删除,或者pyaudio的export导出操作,都会报文件拒绝操作

4、获取音频长度

a = pygame.mixer.Sound("data/abc.wav")
print("length",a.get_length())
  • 获取到的是一个float数值

 

posted @ 2023-11-05 13:38  挖洞404  阅读(155)  评论(0编辑  收藏  举报