Python 播放音频

解决 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 获取音乐播放完成发送的事件类型
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 230,501评论 6 544
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 99,673评论 3 429
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 178,610评论 0 383
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,939评论 1 318
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,668评论 6 412
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 56,004评论 1 329
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 44,001评论 3 449
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 43,173评论 0 290
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,705评论 1 336
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,426评论 3 359
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,656评论 1 374
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 39,139评论 5 364
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,833评论 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 35,247评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,580评论 1 295
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 52,371评论 3 400
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,621评论 2 380

推荐阅读更多精彩内容

  • 传入音频文件字节码即可播放音频
    sixiyizai阅读 4,723评论 0 1
  • 语音文件 PCM 我们在音频处理的时候经常会接触到PCM数据:它是模拟音频信号经模数转换(A/D变换)直接形成的二...
    周周_hey阅读 11,607评论 3 5
  • 香比昨淡,枝上芳华稀,花瓣点点落地。海棠白,刺玫黄,晚樱惹人迷。看频,却无语。 可知落红有无情,流水...
    心待月阅读 348评论 3 8
  • 今天中午去上了一趟特殊的课,给49个三年级的小朋友讲非暴力沟通,带小朋友真是一件有挑战的事情呀。 主题是《班级感受...
    红梅Honey阅读 225评论 0 0
  • 亲子日记第108天 星期四 晴 早起包的水饺,大宝说还是很硬,吃了两个,满牙上的韭菜很多,抓紧漱口再刷牙,...
    吉祥_0486阅读 84评论 0 0