语音识别1: 音频信号采集、并存入 wav文件
1 说明
语音识别的基本操作是:1)能够录音 2)能够将录音文件存储。以下将列出此操作,并逐条语句讲解。
2 音频录制代码
import pyaudio
import wave
from tqdm import tqdm
def record_audio(wave_out_path,record_second):CHUNK = 1024FORMAT = pyaudio.paInt16CHANNELS = 2RATE = 44100p = pyaudio.PyAudio()stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK)wf = wave.open(wave_out_path, 'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))wf.setframerate(RATE)print("* recording")for i in tqdm(range(0, int(RATE / CHUNK * record_second))):data = stream.read(CHUNK)wf.writeframes(data)print("* done recording")stream.stop_stream()stream.close()p.terminate()wf.close()
record_audio("output.wav",record_second=4)
注解:
1)包含对象说明
import pyaudio # 是个操作类,可以生成pyaudio对象,对stream进行操作
import wave # 是对声波信号进行处理的对象
from tqdm import tqdm #是一个进入条
2)函数说明
def record_audio(wave_out_path,record_second): #wav文件路径,录音时长
CHUNK = 1024 # 缓存buff大小
FORMAT = pyaudio.paInt16 # 信号的幅度用2字节整数表示,可以paInt24,或paInt24
CHANNELS = 2 # 双声道
RATE = 44100 # 采样频率
p = pyaudio.PyAudio() # 生成一个操作对象stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) # 按照参数生成一个流对象
wf = wave.open(wave_out_path, 'wb') # 打开Wav文件,文件对象为wf
wf.setnchannels(CHANNELS) # 将流对象参数CHANNELS传入文件对象
wf.setsampwidth( p.get_sample_size(FORMAT)) # get_sample_size(FORMAT)获得 --- FORMATE 的字节数
wf.setframerate(RATE) # 设定文件的采样频率
print("* recording")
for i in tqdm(range(0, int( RATE / CHUNK * record_second))):------------- #RATE / CHUNK每秒需要几个buff缓存
data = stream.read(CHUNK) # 取出buff数据,临时存于data变量
wf.writeframes(data) #将data数据存盘。
print("* done recording")
stream.stop_stream() # 停止流
stream.close() # 关闭流
p.terminate() # 中断处理
wf.close() #关闭文件record_audio("output.wav",record_second=4) # 主程序入口
3 专业的写法
import pyaudio
import waveclass Recorder(object):'''A recorder class for recording audio to a WAV file.Records in mono by default.'''def __init__(self, channels=1, rate=44100, frames_per_buffer=1024):self.channels = channelsself.rate = rateself.frames_per_buffer = frames_per_bufferdef open(self, fname, mode='wb'):return RecordingFile(fname, mode, self.channels, self.rate,self.frames_per_buffer)class RecordingFile(object):def __init__(self, fname, mode, channels, rate, frames_per_buffer):self.fname = fnameself.mode = modeself.channels = channelsself.rate = rateself.frames_per_buffer = frames_per_bufferself._pa = pyaudio.PyAudio()self.wavefile = self._prepare_file(self.fname, self.mode)self._stream = Nonedef __enter__(self):return selfdef __exit__(self, exception, value, traceback):self.close()def record(self, duration):# Use a stream with no callback function in blocking modeself._stream = self._pa.open(format=pyaudio.paInt16,channels=self.channels,rate=self.rate,input=True,frames_per_buffer=self.frames_per_buffer)for _ in range(int(self.rate / self.frames_per_buffer * duration)):audio = self._stream.read(self.frames_per_buffer)self.wavefile.writeframes(audio)return Nonedef start_recording(self):# Use a stream with a callback in non-blocking modeself._stream = self._pa.open(format=pyaudio.paInt16,channels=self.channels,rate=self.rate,input=True,frames_per_buffer=self.frames_per_buffer,stream_callback=self.get_callback())self._stream.start_stream()return selfdef stop_recording(self):self._stream.stop_stream()return selfdef get_callback(self):def callback(in_data, frame_count, time_info, status):self.wavefile.writeframes(in_data)return in_data, pyaudio.paContinuereturn callbackdef close(self):self._stream.close()self._pa.terminate()self.wavefile.close()def _prepare_file(self, fname, mode='wb'):wavefile = wave.open(fname, mode)wavefile.setnchannels(self.channels)wavefile.setsampwidth(self._pa.get_sample_size(pyaudio.paInt16))wavefile.setframerate(self.rate)return wavefileif __name__=="__main__":myRecord = Recorder()myXR = myRecord.open("./myvoice.wav")myXR.record(4)myXR.start_recording()myXR.stop_recording()myXR.close()
语音识别1: 音频信号采集、并存入 wav文件相关推荐
- [Android] [音视频系列]在 Android 平台使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件
参考 官方文档地址:https://developer.android.google.cn/reference/android/media/AudioRecord GitHub 地址:https:// ...
- Android音频开发(4):如何存储和解析wav文件
2019独角兽企业重金招聘Python工程师标准>>> 无论是文字.图像还是声音,都必须以一定的格式来组织和存储起来,这样播放器才知道以怎样的方式去解析这一段数据,例如,对于原始的图 ...
- Android音频开发(五)如何存储和解析最简单的音频wav文件
我们大家都知道,无论是文字.图像还是声音,都必须以一定的格式来组织和存储起来,然后其它的软件再以相同的协议规则,相应的格式才能去打开解析这一段数据,例如,对于原始的图像数据,我们常见的格式有 YUV. ...
- System Generator从入门到放弃(十)-ADC应用之音频信号采集与输出
System Generator从入门到放弃(十)-ADC应用之音频信号采集与输出 文章目录 System Generator从入门到放弃(十)-ADC应用之音频信号采集与输出 一.ADC应用之音频信 ...
- NAudio用法详解(7)Wav文件结构分析及NAudio相关对象对应关系分析
目录 波形文件的基础知识 波形文件的存储过程 与声音有关的三个参数 1.采样频率 2.采样位数 3.声道数 WAV文件的编码 文件整体结构 RIFF区块 fmt区块(FORMAT区块) DATA区块 ...
- WAV文件C++分析与显示
预备知识: WAV格式说明:http://baike.baidu.com/view/8033.htm 总体思路:分别建立与WAV格式相对应的类: struct RIFF_HEADER { char s ...
- html5使用websocket发送(PCM)音频数据到服务器,再转在wav文件
PCM格式 通过websocket发送音频数据. <html> <head><meta charset="utf-8"><title> ...
- python3 利用ffmpeg把音频转换为16khz的wav文件
最近语音识别需要转换为16khz 16位的wav文件,这里分享一下我的代码: 这里默认电脑已经安装好ffmpeg,没安装好的话,mac用hombrew安装一下就行了,然后: import osdef ...
- 实验 9 音频信号采集及处理
实验 9 音频信号采集及处理 代码剖析 声音回放 显示音频时域波形 显示音频频域波形 声音主要频率1 声音主要频率2 合成声音播放 播放加噪信号 加噪之后的时域和频谱图 显示低通滤波器特性 播放滤波后 ...
最新文章
- 唐山松下焊接机器人编程招聘_机器人四小家族-松下Panasonic专注焊接
- C++输入输出流进制转换
- mysql数据库有触发器吗_MySQL数据库之MySQL 触发器实现
- 在Python中操纵json数据的最佳方式
- day16前端(Dom+Jquery)
- IOC--IOC+AOP--热插拔的系统架构实现演化
- c++ 模板类实现堆栈实验报告_编译原理——小型类C编译器的设计和实现(生成8086汇编代码)之1:问题定义以及总体功能...
- This blog has been cancelled for a long time
- 【写作技巧】毕业论文写作思路
- Linux下redis基本安装配置(CentOS7)
- 百度文库免费复制文字_如何复制百度文库上的内容——解答!
- 不加群提取群成员_使用itchat分析指定微信群男女比例等成员数据
- 电影社交网络中Facemash女生评比算法讲解
- 前端性能优化实践:让视频加载也“懒”一点
- 注册表Regedit实现右键管理员权限运行notepad++打开文件
- www.tf.tt index.php,恶意软件分析 URL链接扫描 免费在线病毒分析平台 | 魔盾安全分析...
- 迅为STM32MP157开发板使用手册更新啦
- 让企业报表化繁为简,Smartbi实现报表统一管理
- 前端HTML字体和文本样式
- 企业短期偿债能力评估-流动比率、速动比率、现金比率、现金流量比率
热门文章
- Flink从入门到精通100篇(十九)-基于 Flink 的大规模准实时数据分析平台的建设实践
- mysql中OPTIMIZE TABLE的作用
- python爬虫编程100例_哪种Python程序员最赚钱?爬虫数据告诉你!
- python-用Map, Filter, Reduce代替For循环
- 浅谈百度新一代query-ad 推荐引擎如何提升广告收益率
- 带你看android的内心世界
- java中hashMap的排序
- spring jdbcTemplate使用queryForList示例
- What Influences Method Call Performance in Java?--reference
- 转载--redis密码管理