zoukankan      html  css  js  c++  java
  • python 播放 wav 文件

    未使用其他库,

    只是使用 pywin32 调用系统底层 API 播放 wav 文件。

    # 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)
    
    
  • 相关阅读:
    mycat 查询sql 报错
    mysql 主从 binlog
    数据库分库分表思路
    JavaScript数组知识
    JS判断当前页面是在 QQ客户端/微信客户端/iOS浏览器/Android浏览器/PC客户端
    js汉字转换为拼音
    工作中常用到的JS验证
    自动部署服务器代码
    php Excel 导入
    PHP 模拟http 请求
  • 原文地址:https://www.cnblogs.com/hhh5460/p/5856950.html
Copyright © 2011-2022 走看看