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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。