Home  >  Article  >  Backend Development  >  Briefly describe how Python calls the system's underlying API to play wav files

Briefly describe how Python calls the system's underlying API to play wav files

巴扎黑
巴扎黑Original
2017-08-12 14:08:501647browse

This article mainly introduces the method of Python calling the system's underlying API to play wav files. It involves the related operating skills of Python using pywin32 to call the system's underlying API to read and play wav files. Friends in need can refer to the following

The example in this article describes how Python calls the underlying API of the system to play wav files. Share it with everyone for your reference, the details are as follows:

No other libraries are used here, but pywin32 is used to call the underlying API of the system to play wav files.

The specific code is as follows:


# 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(&#39;<4sl4s4slhhllhh4sl&#39;)
def wav_header_unpack(data):
  &#39;&#39;&#39;解包wav文件头信息&#39;&#39;&#39;
  (riff, riffsize, wave, fmt, fmtsize, format, nchannels, samplespersecond, \
  datarate, blockalign, bitspersample, data, datalength) = struct.unpack(&#39;<4sl4s4slhhllhh4sl&#39;, data)
  if riff != b&#39;RIFF&#39; or fmtsize != 16 or fmt != b&#39;fmt &#39; or data != b&#39;data&#39;:
    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, &#39;rb&#39;)
# 读取/解包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)

The above is the detailed content of Briefly describe how Python calls the system's underlying API to play wav files. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn