Maison > Article > développement back-end > Méthode Python pour lire des fichiers wav (appelant l'API sous-jacente du système)
Cet article présente principalement la méthode par laquelle Python appelle l'API sous-jacente du système pour lire les fichiers wav. Il implique les compétences opérationnelles associées de Python utilisant pywin32 pour appeler l'API sous-jacente du système pour lire et lire les fichiers wav. Les amis dans le besoin peuvent se référer à eux. it
L'exemple de cet article décrit comment Python appelle l'API sous-jacente du système pour lire les fichiers wav. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Aucune autre bibliothèque n'est utilisée ici, mais pywin32 est utilisé pour appeler l'API sous-jacente du système pour lire les fichiers wav.
Le code spécifique est le suivant :
# 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, 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)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!