Python调用系统底层API播放wav文件的方法
本文实例讲述了Python调用系统底层API播放wav文件的方法。分享给大家供大家参考,具体如下:
这里未使用其他库,只是使用pywin32调用系统底层API播放wav文件。
具体代码如下:
#Ourraisond'etre-playingsounds
importpywintypes
importstruct
importwin32event
importwin32com.directsound.directsoundasds
importos
WAV_HEADER_SIZE=struct.calcsize('<4sl4s4slhhllhh4sl')
defwav_header_unpack(data):
'''解包wav文件头信息'''
(riff,riffsize,wave,fmt,fmtsize,format,nchannels,samplespersecond,\
datarate,blockalign,bitspersample,data,datalength)=struct.unpack('<4sl4s4slhhllhh4sl',data)
ifriff!=b'RIFF'orfmtsize!=16orfmt!=b'fmt'ordata!=b'data':
raiseValueError
wfx=pywintypes.WAVEFORMATEX()
wfx.wFormatTag=format
wfx.nChannels=nchannels
wfx.nSamplesPerSec=samplespersecond
wfx.nAvgBytesPerSec=datarate
wfx.nBlockAlign=blockalign
wfx.wBitsPerSample=bitspersample
returnwfx,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程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。