Python调用系统底层API播放wav文件的方法
作者:罗兵 时间:2021-10-02 06:54:13
本文实例讲述了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程序设计有所帮助。
来源:http://www.cnblogs.com/hhh5460/p/5856950.html
标签:Python,wav文件
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python 利用jinja2模板生成html代码实例
2023-11-19 18:56:41
Python中星号的五种用法小结
2022-12-06 16:17:23
深入学习python的yield和generator
2022-01-15 05:00:28
CSS绝对定位在宽屏分辨率下错位
2009-07-28 12:24:00
如何在django中运行scrapy框架
2021-01-16 21:26:54
Python中类的初始化特殊方法
2021-05-26 14:50:01
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
2023-11-23 11:35:00
详解Python装饰器之@property
2021-06-25 15:55:45
Django 解决distinct无法去除重复数据的问题
2023-02-09 22:13:22
模仿MSN消息提示的效果
2013-07-02 06:22:28
详解python中的线程与线程池
2022-02-02 18:27:19
python基础编程小实例之计算圆的面积
2023-06-07 06:33:14
![](https://img.aspxhome.com/file/2023/4/99414_0s.png)
如何使用Index Server建立一个网站导航地图?
2010-06-05 12:39:00
python pygame实现五子棋小游戏
2021-10-31 13:39:23
python+Matplotlib 绘制带置信区间的折线图
2022-04-29 06:23:40
![](https://img.aspxhome.com/file/2023/0/80390_0s.jpg)
解决MSSQL下“不能在手动或分布事务方式下创建新的连接”的问题
2008-07-15 12:48:00
Python实现图片批量加入水印代码实例
2022-07-13 10:47:04
![](https://img.aspxhome.com/file/2023/9/107179_0s.jpg)
智能录入表格[适合BS模式项目的录入页面]
2008-03-09 19:02:00
教你使用Python pypinyin库实现汉字转拼音
2021-10-03 16:48:36
![](https://img.aspxhome.com/file/2023/1/109341_0s.png)
python读取csv文件示例(python操作csv)
2023-02-28 23:12:02