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文件
0
投稿

猜你喜欢

  • 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
  • 如何使用Index Server建立一个网站导航地图?

    2010-06-05 12:39:00
  • python pygame实现五子棋小游戏

    2021-10-31 13:39:23
  • python+Matplotlib 绘制带置信区间的折线图

    2022-04-29 06:23:40
  • 解决MSSQL下“不能在手动或分布事务方式下创建新的连接”的问题

    2008-07-15 12:48:00
  • Python实现图片批量加入水印代码实例

    2022-07-13 10:47:04
  • 智能录入表格[适合BS模式项目的录入页面]

    2008-03-09 19:02:00
  • 教你使用Python pypinyin库实现汉字转拼音

    2021-10-03 16:48:36
  • python读取csv文件示例(python操作csv)

    2023-02-28 23:12:02
  • asp之家 网络编程 m.aspxhome.com