Python调用系统底层API播放wav文件的方法
发布时间 - 2026-01-11 02:45:08 点击率:次本文实例讲述了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文件与目录操作技巧汇总》、《Python文本文件操作技巧汇总》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
# Python
# 播放
# wav文件
# Python音频操作工具PyAudio上手教程详解
# 利用python提取wav文件的mfcc方法
# python使用wxPython打开并播放wav文件的方法
# 使用Python标准库中的wave模块绘制乐谱的简单教程
# python调用pyaudio使用麦克风录制wav声音文件的教程
# 操作技巧
# 进阶
# 相关内容
# 感兴趣
# 数据结构
# 给大家
# 更多关于
# 所述
# 程序设计
# 使用技巧
# 文本文件
# 讲述了
# data
# wav_header_unpack
# riff
# wave
# riffsize
# calcsize
# WAV_HEADER_SIZE
# lt
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
郑州企业网站制作公司,郑州招聘网站有哪些?
潮流网站制作头像软件下载,适合母子的网名有哪些?
b2c电商网站制作流程,b2c水平综合的电商平台?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
如何用AI帮你把自己的生活经历写成一个有趣的故事?
文字头像制作网站推荐软件,醒图能自动配文字吗?
长沙企业网站制作哪家好,长沙水业集团官方网站?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
JavaScript常见的五种数组去重的方式
浅谈Javascript中的Label语句
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
音响网站制作视频教程,隆霸音响官方网站?
JS实现鼠标移上去显示图片或微信二维码
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
如何在景安服务器上快速搭建个人网站?
宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何快速生成专业多端适配建站电话?
如何在景安云服务器上绑定域名并配置虚拟主机?
如何在IIS服务器上快速部署高效网站?
Laravel怎么实现微信登录_Laravel Socialite第三方登录集成
jquery插件bootstrapValidator表单验证详解
动图在线制作网站有哪些,滑动动图图集怎么做?
如何在七牛云存储上搭建网站并设置自定义域名?
悟空浏览器如何设置小说背景色_悟空浏览器背景色设置【方法】
如何用PHP快速搭建高效网站?分步指南
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
如何制作一个表白网站视频,关于勇敢表白的小标题?
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
java获取注册ip实例
北京网站制作的公司有哪些,北京白云观官方网站?
Linux虚拟化技术教程_KVMQEMU虚拟机安装与调优
北京的网站制作公司有哪些,哪个视频网站最好?
PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】
使用C语言编写圣诞表白程序
高防服务器租用首荐平台,企业级优惠套餐快速部署
个人网站制作流程图片大全,个人网站如何注销?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
如何在局域网内绑定自建网站域名?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
Laravel怎么判断请求类型_Laravel Request isMethod用法

