简述Python如何调用系统底层API播放wav文件


本文摘自php中文网,作者巴扎黑,侵删。

这篇文章主要介绍了Python调用系统底层API播放wav文件的方法,涉及Python使用pywin32调用系统底层API读取与播放wav文件的相关操作技巧,需要的朋友可以参考下

本文实例讲述了Python调用系统底层API播放wav文件的方法。分享给大家供大家参考,具体如下:

这里未使用其他库,只是使用 pywin32 调用系统底层 API 播放 wav 文件。

具体代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

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

以上就是简述Python如何调用系统底层API播放wav文件的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Python怎么读取文件内容

Python画图的两种方法

Python怎么把列表转换为集合

Python 网络爬虫--关于简单的模拟登录

Python怎么分析数据

Python面向对象之类和实例

Python md5与sha1加密算法的详细介绍

Python动态爬虫的实例分享

Python中怎么删除列表中的元素

Python以太坊虚拟机实现py-evm的内容介绍

更多相关阅读请进入《Python》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...