你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 编程语言
基于Python语言的音频捕获及频谱分析设计(二)
 

2.1 创建设备对象

调用directsound.DirectSoundCaptureCreate()方法创建音频捕获对象,其参数guid表示录音设备,可由directsound.DirectSoundCaptureEnumerate()函数返回值提供,也可以设为None,表示使用系统默认录音设备。

2.2 创建缓冲区对象

创建缓冲区对象,首先需对一个DSCBUFFERDESC结构对象赋值,指定要创建的缓冲区特征,如缓冲区大小、单双声道、采样率、采样量化位数等。DSCBUFFERDESC结构有两个成员,其dwBufferBytes定义了缓冲区的大小,lpwfxFormatWAVEFORMATEX结构对象,规定了声音数据的结构,由pywintypes.WAVEFORMATEX()创建

WAVEFORMATEX结构包含以下属性:

wFormatTag:格式标识,对于DirectSound只能是WAVE_FORMAT_PCM,表示捕获格式为PCMPulse Code Modulation,脉冲编码调制)格式。

nChannels:表示通道数,1为单声道,2为立体声。

nSamplesPerSec:表示采样频率,一般为8000Hz11025Hz22050Hz44100Hz

wBitsPerSample:表示采样量化位数,通常是816

nBlockAlign:表示采样块字节数,对于PCMwBitsPerSample*nChannels/8

nAvgBytesPerSec:表示采样率,以字节为单位,为nBlockAlignwBitsPerSample的乘积。

通过调用设备对象的方法PyIDirectSoundCapture.CreateCaptureBuffer()创建缓冲区对象,其参数lpDSCBufferDescDSCBUFFERDESC结构对象,通过调用directsound.DSCBUFFERDESC()创建。

创建缓冲区对象之后,调用其方法PyIDirectSoundCaptureBuffer.Start()开始采集数据,其参数dwFlags可以设置缓冲区的工作方式:静态缓冲(dwFlags参数设为0)或动态缓冲(dwFlags参数设为directsound.DSCBSTART_LOOPING1)。其中静态缓冲指一次将一段完整的音频数据写入缓冲,适合容量有限、实时性要求不高的音频数据流;而动态缓冲并不将全部的音频数据一次写入缓冲,而是由程序周期性地动态写入,占用内存空间较小,可以通过使用较小的内存来播放较长的声音,适合于容量大、实时性要求较高的音频数据流。

停止录音时可调用PyIDirectSoundCaptureBuffer.Stop()方法。

2.3 设置通知机制

为确保声音信号的实时采集和处理,应用程序须及时知道什么时候可以开始读取缓冲区内的音频数据。IDirectSoundNotify接口为此提供了一种高效率的方式,即位置通告方式,在缓冲区设定一个或多个通知位置,当缓冲捕获的数据到达设定位置时即发出一个事件通知。当读取位置在缓冲区中循环时,事件将不断地被发送。

首先调用函数win32event.CreateEvent()创建通知事件句柄,其次调用缓冲区对象方法PyIDirectSoundCaptureBuffer.QueryInterface()获取IDirectSoundNotify接口对象,最后通过方法PyDirectSoundNotify.SetNotificationPositions()设置通知位置。

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089