Python调用系统底层API播放wav文件的方法
发布时间:2020-12-17 08:10:34 所属栏目:Python 来源:网络整理
导读:本篇章节讲解Python调用系统底层API播放wav文件的方法。供大家参考研究具体如下: 这里未使用其他库,只是使用 pywin32 调用系统底层 API 播放 wav 文件。 具体代码如下: # Our raison d'etre - playing soundsimport pywintypesimport structimp
本篇章节讲解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,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程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |