首页 > 编程 > Python > 正文

Python调用系统底层API播放wav文件的方法

2019-11-25 15:56:40
字体:
来源:转载
供稿:网友

本文实例讲述了Python调用系统底层API播放wav文件的方法。分享给大家供大家参考,具体如下:

这里未使用其他库,只是使用 pywin32 调用系统底层 API 播放 wav 文件。

具体代码如下:

# Our raison d'etre - playing soundsimport pywintypesimport structimport win32eventimport win32com.directsound.directsound as dsimport osWAV_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_CTRLPOSITIONNOTIFYsdesc.dwBufferBytes = sizesdesc.lpwfxFormat = wfxbuffer = 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程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表