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用法