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 相关文章推荐
将图片文件嵌入到wxpython代码中的实现方法
Aug 11 Python
python同时给两个收件人发送邮件的方法
Apr 30 Python
将Django框架和遗留的Web应用集成的方法
Jul 24 Python
怎样使用Python脚本日志功能
Aug 14 Python
Python实现的递归神经网络简单示例
Aug 11 Python
Python3解决棋盘覆盖问题的方法示例
Dec 07 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
Python BS4库的安装与使用详解
Aug 08 Python
在python中,使用scatter绘制散点图的实例
Jul 03 Python
python获取依赖包和安装依赖包教程
Feb 13 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
Python实现异步IO的示例
Nov 05 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动态规划解决0-1背包问题实例分析
2015/03/23 PHP
asp.net和php的区别点总结
2019/10/10 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
清空上传控件input file的值
2010/07/03 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
9种改善AngularJS性能的方法
2017/11/28 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
详解vue移动端项目代码拆分记录
2019/03/15 Javascript
ES6 Object方法扩展的应用实例分析
2019/06/25 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
Python中几个比较常见的名词解释
2015/07/04 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
2018/07/09 Python
Python Numpy库安装与基本操作示例
2019/01/08 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
在Python中使用K-Means聚类和PCA主成分分析进行图像压缩
2020/04/10 Python
通过实例解析python subprocess模块原理及用法
2020/10/10 Python
Python爬虫之Selenium下拉框处理的实现
2020/12/04 Python
优衣库澳大利亚官网:UNIQLO澳大利亚
2017/01/18 全球购物
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
SneakerStudio英国:最佳运动鞋商店
2019/05/22 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
工作表现评语
2014/01/19 职场文书
法学院方阵解说词
2014/01/29 职场文书
525心理活动总结
2014/07/04 职场文书
公司授权委托书范文
2014/09/21 职场文书
个人务虚会发言材料
2014/10/20 职场文书
运动会通讯稿300字
2015/07/20 职场文书
详解MySQL数据库千万级数据查询和存储
2021/05/18 MySQL
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS
Redis 异步机制
2022/05/15 Redis