Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Methode zum Abspielen von WAV-Dateien (Aufruf der zugrunde liegenden API des Systems)

Python-Methode zum Abspielen von WAV-Dateien (Aufruf der zugrunde liegenden API des Systems)

黄舟
黄舟Original
2017-08-11 14:02:171801Durchsuche

In diesem Artikel wird hauptsächlich die Methode vorgestellt, mit der Python die zugrunde liegende API des Systems zum Abspielen von WAV-Dateien aufruft. Dazu gehört die Verwendung von Python, um die zugrunde liegende API des Systems zum Lesen und Abspielen von WAV-Dateien aufzurufen it

Das Beispiel in diesem Artikel beschreibt, wie Python die zugrunde liegende API des Systems aufruft, um WAV-Dateien abzuspielen. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Hier werden keine anderen Bibliotheken verwendet, aber pywin32 wird verwendet, um die zugrunde liegende API des Systems aufzurufen, um WAV-Dateien abzuspielen.

Der spezifische Code lautet wie folgt:


# 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)

Das obige ist der detaillierte Inhalt vonPython-Methode zum Abspielen von WAV-Dateien (Aufruf der zugrunde liegenden API des Systems). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn