【脚本语言系列】关于Python音频处理DirectSound, 你需要知道的事

如何使用DirectSound

# -*- coding:utf-8 -*-
#
import pywintypes
import struct
from win32com import directsound
import Tkinter
import tkFileDialog
WAV_HEADER_SIZE = struct.calcsize('<4sl4s4slhhllhh4sl')
class Window:
    def __init__(self):
        self.root = root = Tkinter.Tk()
        buttonAdd = Tkinter.Button(root, text = 'Add', command = self.add)
        buttonAdd.pack(side = 'left')
        buttonPlay = Tkinter.Button(root, text = 'Play', command = self.play)
        buttonPlay.pack(side = 'left')           
        buttonStop = Tkinter.Button(root, text = 'Stop', command = self.stop)
        buttonStop.pack(side = 'left')
    def add(self):
        self.file = tkFileDialog.askopenfilename(title = 'Python DirectSound',filetypes =[('WAV','*.wav')])
    def play(self):
        f = open(self.file, 'rb')
        header = f.read(WAV_HEADER_SIZE)
        (riff, riffsize, wave, fmt, fmtsize,
            format, nchannels, samplespersecond,
            datarate, blockalign, bitspersample,
            data, size) = \
        struct.unpack('<4sl4s4slhhllhh4sl', header)
        if riff!= 'RIFF' or fmtsize != 16 or fmt!='fmt ' or data != 'data':
            raise 'Data Error'
        wfx = pywintypes.WAVEFORMATEX()
        wfx.wFormatTag = format
        wfx.nChannels = nchannels
        wfx.nSamplesPerSec = samplespersecond
        wfx.nAvgBytesPerSec = datarate
        wfx.nBlockAlign = blockalign
        wfx.wBitsPerSample= bitspersample
        d = directsound.DirectSoundCreate(None, None)
        d.SetCooperativeLevel(None, directsound.DSSCL_PRIORITY)
        sdesc = directsound.DSBUFFERDESC()
        sdesc.dwFlags = (
            directsound.DSBCAPS_STICKYFOCUS |
            directsound.DSBCAPS_CTRLPOSITIONNOTIFY
        )
        sdesc.dwBufferBytes = size
        sdesc.lpwfxFormat = wfx
        self.buffer = buffer = d.CreateSoundBuffer(sdesc,None)
        buffer.Update(0, f.read(size))
        buffer.Play(0)
    def stop(self):
        self.buffer.Stop()
    def MainLoop(self):
        self.root.mainloop()
window = Window()
window.MainLoop()

这里写图片描述
1. 界面输出
这里写图片描述
2. 文件载入
这里写图片描述

什么是DirectSound

DirectSound是DirectX API的音频(waveaudio)的组件之一,
其提供了快速的混音、硬件加速功能,并且可以直接访问相关设备。
Directsound允许进行波形声音的捕获、重放,
也可以通过控制硬件和相应的驱动来活动更多的服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值