美文网首页
Python 播放音频

Python 播放音频

作者: 404d67ac8c12 | 来源:发表于2019-04-30 22:03 被阅读0次

    解决 Python 播放的方案很多,而且各个看上去好像都很有效。找一个合适你用的,还真有点难。mp3play、pymedia、pyaudio、pyglet、pygame,有些直接报错,有些只支持 Windows,最让我吐槽的是 pygame。

    选择 pygame

    经过各种测试,唯一让我还算满意的是 pygame,使用简单。但网上的例子就没一个完整的,导致播放音频时语速不正确 (让我各种抓狂)。音频语速不正确的原因是 pygame.mixer.init() 初始化使用了默认值,按照 mixer.init 参数说明 需要传入第一个参数 frequency (采样频率)值后解决问题,根据说明剩下三个参数采用默认就好。实例中使用了 music 模块 详情查看 mixter.music 说明文档

    import pygame, time 
    
    pygame.mixer.init(8640)                   # 初始化初混音器模块参数
    pygame.mixer.music.load("test.wav")       # 加载音频
    pygame.mixer.music.play()                 # 播放
    time.sleep(5)                             # 等待音频播放完成
    pygame.mixer.music.stop()                 # 播放完成
    

    一个最简单音频播放就完成了。

    获取采用频率和播放时长

    我使用的是 wav 格式的音频,所以我选择了 wave 库对音频文件进行解析,使用 pip install wave 进行安装,使用其它格式需要自己挑选解析库。

    import wave
    
    # 打开需要进行的文件
    fhandle = wave.open(test.wav, "rb")
    
    # 读取格式信息
    params = fhandle.getparams()
    # nchannels, sampwidth, framerate,  nframes, comptype,  compname
    #  声道数,     采样宽度,   采样频率,    采样点数,  压缩类型, 压缩类型的描述。
    
    # wave模块只支持非压缩的数据,因此可以忽略最后两个信息。 
    nchannels, sampwidth, framerate, nframes = params[:4]
    print(nchannels, sampwidth, framerate, nframes)
    playTime = nframes / float(framerate)    # 播放时长
    fhandle.close()
    

    上述代码完成了对采样频率和播放时间等信息的获取。可参考 https://blog.csdn.net/sinat_33588424/article/details/80239375https://docs.python.org/3/library/wave.html 了解 wave 的详细使用。

    完整的音频播放实例
    import pygame
    import wave
    import time
    
    fhandle = wave.open("test.wav", "rb")
    params = fhandle.getparams()
    nchannels, sampwidth, framerate, nframes = params[:4]
    fhandle.close()
    
    pygame.mixer.init(framerate)
    pygame.mixer.music.load("test.wav")
    pygame.mixer.music.play()
    playTime = nframes/float(framerate)
    time.sleep(playTime)
    pygame.mixer.music.stop()
    

    再也不用担心 wav 播放语速不正常的问题。

    Music 模块方法简要说明
    方法 说明
    pygame.mixer.music.load 加载音乐文件
    pygame.mixer.music.play 播放加载完成的音乐文件
    pygame.mixer.music.rewind 重新播放音频
    pygame.mixer.music.stop 停止播放
    pygame.mixer.music.pause 暂停播放
    pygame.mixer.music.unpause 回复播放
    pygame.mixer.music.fadeout 淡出
    pygame.mixer.music.set_volume 设置音量
    pygame.mixer.music.get_volume 获取音量
    pygame.mixer.music.get_busy 检查音乐是否正在播放
    pygame.mixer.music.set_pos 设置开始播放的位置
    pygame.mixer.music.get_pos 获取音乐已经播放的时间
    pygame.mixer.music.queue 将音乐文件放入待循环列表
    pygame.mixer.music.set_endevent 音乐播放完成时发送事件
    pygame.mixer.music.get_endevent 获取音乐播放完成发送的事件类型

    相关文章

      网友评论

          本文标题:Python 播放音频

          本文链接:https://www.haomeiwen.com/subject/dfwwiqtx.html