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


相关推荐: 微信小程序 配置文件详细介绍  JavaScript中的标签模板是什么_它如何扩展字符串功能  如何利用DOS批处理实现定时关机操作详解  Laravel如何处理和验证JSON类型的数据库字段  php 三元运算符实例详细介绍  香港服务器网站卡顿?如何解决网络延迟与负载问题?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  如何在橙子建站上传落地页?操作指南详解  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  如何在IIS服务器上快速部署高效网站?  Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解  佐糖AI抠图怎样调整抠图精度_佐糖AI精度调整与放大细化操作【攻略】  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  如何用PHP快速搭建高效网站?分步指南  nginx修改上传文件大小限制的方法  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  Laravel如何为API生成Swagger或OpenAPI文档  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】  Laravel storage目录权限问题_Laravel文件写入权限设置  JavaScript如何实现错误处理_try...catch如何捕获异常?  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  如何快速辨别茅台真假?关键步骤解析  在线制作视频网站免费,都有哪些好的动漫网站?  如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  网站建设保证美观性,需要考虑的几点问题!  Laravel如何升级到最新版本?(升级指南和步骤)  如何用PHP快速搭建CMS系统?  如何挑选最适合建站的高性能VPS主机?  b2c电商网站制作流程,b2c水平综合的电商平台?  奇安信“盘古石”团队突破 iOS 26.1 提权  javascript基本数据类型及类型检测常用方法小结  Android自定义控件实现温度旋转按钮效果  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  如何在云服务器上快速搭建个人网站?  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  英语简历制作免费网站推荐,如何将简历翻译成英文?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  zabbix利用python脚本发送报警邮件的方法  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  如何在Windows服务器上快速搭建网站?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  linux写shell需要注意的问题(必看)  Laravel如何使用withoutEvents方法临时禁用模型事件  高端云建站费用究竟需要多少预算?  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  大连网站制作公司哪家好一点,大连买房网站哪个好?  Laravel怎么上传文件_Laravel图片上传及存储配置  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】