3.2开始及停止录音接口
函数Record作为开始录音及捕获音频数据接口,调用方法PyIDirectSoundCaptureBuff er.Start()告诉缓冲区对象开始录音(动态缓冲模式),通过函数win32event.WaitForSingleObject(),监控AudioRecord初始化里所创建的事件对象,当有事件通知发出时,即从缓冲区取出音频数据。函数Stop调用缓冲区对象的PyIDirectSound CaptureBuffer.Stop()方法,让缓冲区停止工作。主要代码如下:
def Record(self):
self.buffer.Start(directsound.DSCBSTART_LOOPING)#开始录音,动态缓冲模式
self.STATUS=True#设置录音状态标志
i=0
n=self.bSize/2
while self.STATUS:
win32event.WaitForSingleObject(self.evt[i])#等待事件通知
self.data = self.buffer.Update(i*n, n)#从缓冲区取出音频数据,第一个参数为偏移量,第二个参数为数据大小。
i=(i+1)%2
def Stop(self):
self.buffer.Stop()#停止录音
self.STATUS=False#设置录音状态
4 软件实现
利用自定义的AudioRecord模块,编制了简易虚拟示波及频谱分析程序,连接MIC或其他声音输入设备,即可以实时地实现音频信号的波形显示和频谱显示,图2所示为一段音乐的波形图和频谱,其采样率为8000Hz,双声道,量化比特数为8位,PCM格式,每次计算一个声道的采样数为512(时间间隔1024/8000 s)。
图2 音频信号实时波形图及频谱图
|