Python调用系统底层API播放wav文件的方法


Posted in Python onAugust 11, 2017

本文实例讲述了Python调用系统底层API播放wav文件的方法。分享给大家供大家参考,具体如下:

这里未使用其他库,只是使用 pywin32 调用系统底层 API 播放 wav 文件。

具体代码如下:

# Our raison d'etre - playing sounds
import pywintypes
import struct
import win32event
import win32com.directsound.directsound as ds
import os
WAV_HEADER_SIZE = struct.calcsize('<4sl4s4slhhllhh4sl')
def wav_header_unpack(data):
  '''解包wav文件头信息'''
  (riff, riffsize, wave, fmt, fmtsize, format, nchannels, samplespersecond, \
  datarate, blockalign, bitspersample, data, datalength) = struct.unpack('<4sl4s4slhhllhh4sl', data)
  if riff != b'RIFF' or fmtsize != 16 or fmt != b'fmt ' or data != b'data':
    raise ValueError
  wfx = pywintypes.WAVEFORMATEX()
  wfx.wFormatTag = format
  wfx.nChannels = nchannels
  wfx.nSamplesPerSec = samplespersecond
  wfx.nAvgBytesPerSec = datarate
  wfx.nBlockAlign = blockalign
  wfx.wBitsPerSample = bitspersample
  return wfx, datalength
# 播放wav文件,直到结束
sound_file = "音效-足球观众的欢呼声.wav"
fname = os.path.join(os.path.dirname(__file__), sound_file)
f = open(fname, 'rb')
# 读取/解包wav文件头
hdr = f.read(WAV_HEADER_SIZE)
wfx, size = wav_header_unpack(hdr)
d = ds.DirectSoundCreate(None, None)
d.SetCooperativeLevel(None, ds.DSSCL_PRIORITY)
sdesc = ds.DSBUFFERDESC()
sdesc.dwFlags = ds.DSBCAPS_STICKYFOCUS | ds.DSBCAPS_CTRLPOSITIONNOTIFY
sdesc.dwBufferBytes = size
sdesc.lpwfxFormat = wfx
buffer = d.CreateSoundBuffer(sdesc, None)
event = win32event.CreateEvent(None, 0, 0, None)
notify = buffer.QueryInterface(ds.IID_IDirectSoundNotify)
notify.SetNotificationPositions((ds.DSBPN_OFFSETSTOP, event))
buffer.Update(0, f.read(size))
buffer.Play(0)
win32event.WaitForSingleObject(event, -1)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
python xml解析实例详解
Nov 14 Python
python 二分查找和快速排序实例详解
Oct 13 Python
django 2.0更新的10条注意事项总结
Jan 05 Python
Python使用Selenium模块模拟浏览器抓取斗鱼直播间信息示例
Jul 18 Python
由Python编写的MySQL管理工具代码实例
Apr 09 Python
Python 实现Serial 与STM32J进行串口通讯
Dec 18 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
完美解决keras保存好的model不能成功加载问题
Jun 11 Python
python 深度学习中的4种激活函数
Sep 18 Python
selenium与xpath之获取指定位置的元素的实现
Jan 26 Python
Django 导出 Excel 代码的实例详解
Aug 11 #Python
python技能之数据导出excel的实例代码
Aug 11 #Python
利用标准库fractions模块让Python支持分数类型的方法详解
Aug 11 #Python
Python对字符串实现去重操作的方法示例
Aug 11 #Python
python中模块查找的原理与方法详解
Aug 11 #Python
python利用lxml读写xml格式的文件
Aug 10 #Python
Python编程实现及时获取新邮件的方法示例
Aug 10 #Python
You might like
高亮度显示php源代码
2006/10/09 PHP
PHP4之COOKIE支持详解
2006/10/09 PHP
php返回相对时间(如:20分钟前,3天前)的方法
2015/04/14 PHP
js各种验证文本框输入格式(正则表达式)
2010/10/22 Javascript
腾讯UED 漂亮的提示信息效果代码
2011/09/12 Javascript
JS/FLASH实现复制代码到剪贴板(兼容所有浏览器)
2013/05/27 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
2016/03/11 Javascript
简介EasyUI datagrid editor combogrid搜索框的实现
2016/04/01 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
浅谈Vue CLI 3结合Lerna进行UI框架设计
2019/04/14 Javascript
jQuery 查找元素操作实例小结
2019/10/02 jQuery
在Vue中使用HOC模式的实现
2020/08/23 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
JavaScript实现原型封装轮播图
2020/12/27 Javascript
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
python清除字符串里非字母字符的方法
2015/07/02 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
详解pyinstaller selenium python3 chrome打包问题
2019/10/18 Python
django框架forms组件用法实例详解
2019/12/10 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
python pyqtgraph 保存图片到本地的实例
2020/03/14 Python
Python如何使用PIL Image制作GIF图片
2020/05/16 Python
HTML5微信播放全屏问题的解决方法
2017/03/09 HTML / CSS
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
决定成败的关键——创业计划书
2014/01/24 职场文书
家长学校实施方案
2014/03/15 职场文书
大学生安全责任书
2014/07/25 职场文书
委托书的格式
2014/08/01 职场文书
规范化管理年活动总结
2014/08/29 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
就业指导讲座心得体会
2016/01/15 职场文书
Django展示可视化图表的多种方式
2021/04/08 Python
pandas DataFrame.shift()函数的具体使用
2021/05/24 Python