dome 模块 pyaudio 声音处理 为语音识别准备
dome 模块 pyaudio 声音处理
为语音识别准备
直接上例子
dome1 声音强度检查

import pyaudio
import numpy as np
class QAudio:
CHUNK = 512
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 48000
def __init__(self):
self.paudio = None
self.stream = None
def open(self):
self.paudio = pyaudio.PyAudio()
self.stream = self.paudio.open(format=self.FORMAT,
channels=self.CHANNELS,
rate=self.RATE,
input=True,
frames_per_buffer=self.CHUNK)
def read(self):
data = self.stream.read(self.CHUNK)
return data
def close(self):
self.stream.close()
self.paudio.terminate()
def main():
a = QAudio()
a.open()
print("开始聆听...")
while True:
data = a.read()
audio_data = np.fromstring(data, dtype=np.short)
temp = np.max(audio_data)
print(f'当前声音强度值: {"*"*(temp//100)}')
if __name__ == '__main__':
main()
dome2 录音_播放_写到文件
import pyaudio
import wave
class QAudio:
CHUNK = 512
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 48000
def __init__(self):
self.paudio = None
self.stream = None
def open(self):
self.paudio = pyaudio.PyAudio()
self.stream = self.paudio.open(format=self.FORMAT,
channels=self.CHANNELS,
rate=self.RATE,
input=True,
frames_per_buffer=self.CHUNK)
def read(self):
data = self.stream.read(self.CHUNK)
return data
def read_s(self, time=1):
data = []
for _ in range(self.RATE//self.CHUNK*time):
data.append(self.stream.read(self.CHUNK))
return data
def close(self):
self.stream.close()
self.paudio.terminate()
def save(self, filename='tmp.wav', data=[]):
wf = wave.open(filename, "wb")
wf.setnchannels(self.CHANNELS)
wf.setsampwidth(2)
wf.setframerate(self.RATE)
wf.writeframes(b"".join(data))
wf.close()
def play(self, path="tmp.wav"):
# 定义数据流块
chunk = 1024
# 只读方式打开wav文件
f = wave.open(path, "rb")
# 打开数据流
fstream = self.paudio.open(format=self.paudio.get_format_from_width(f.getsampwidth()),
channels=f.getnchannels(),
rate=f.getframerate(),
output=True)
# 读取数据
data = f.readframes(chunk)
# 播放
while data:
fstream.write(data)
data = f.readframes(chunk)
# 停止数据流
fstream.stop_stream()
fstream.close()
def main():
a = QAudio()
a.open()
print('开始录音')
data = a.read_s(10)
print('保存录音')
a.save(data=data)
print('播放声音')
a.play()
a.close()
if __name__ == '__main__':
main()
dome3 自动断句录音,你说啥我说啥
为语音识别准备
import pyaudio
import wave
import numpy as np
class QAudio:
CHUNK = 512
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 48000
def __init__(self):
self.paudio = None
self.stream = None
def open(self):
self.paudio = pyaudio.PyAudio()
self.stream = self.paudio.open(format=self.FORMAT,
channels=self.CHANNELS,
rate=self.RATE,
input=True,
frames_per_buffer=self.CHUNK)
def read(self):
data = self.stream.read(self.CHUNK)
return data
def read_s(self, time=1.0):
data = []
for _ in range(int(self.RATE//self.CHUNK*time)):
data.append(self.stream.read(self.CHUNK))
return data
def close(self):
self.stream.close()
self.paudio.terminate()
def save(self, filename='tmp.wav', data=[]):
wf = wave.open(filename, "wb")
wf.setnchannels(self.CHANNELS)
wf.setsampwidth(2)
wf.setframerate(self.RATE)
wf.writeframes(b"".join(data))
wf.close()
def play(self, path="tmp.wav"):
# 定义数据流块
chunk = 1024
# 只读方式打开wav文件
f = wave.open(path, "rb")
# 打开数据流
fstream = self.paudio.open(format=self.paudio.get_format_from_width(f.getsampwidth()),
channels=f.getnchannels(),
rate=f.getframerate(),
output=True)
# 读取数据
data = f.readframes(chunk)
# 播放
while data:
fstream.write(data)
data = f.readframes(chunk)
# 停止数据流
fstream.stop_stream()
fstream.close()
def read_auto(self):
self.read_s(0.1) # 先取0.1s,清一下buf
while True:
data = []
flag = None
count = 1
while True:
result = self.read()
audio_data = np.fromstring(result, dtype=np.short)
# audio_data = np.array(result)
temp = np.max(audio_data)
print(f'当前声音强度值: {"*" * (temp // 100)}')
if temp < 400:
if flag:
count -= 1
if count < 0:
break
continue
else:
flag = True
data.append(result)
print(len(data))
if len(data) > (self.RATE//self.CHUNK)//3:
break
return data
def main():
a = QAudio()
a.open()
while True:
print('开始录音')
data = a.read_auto()
print('保存录音')
a.save(data=data)
print('播放声音')
a.play()
# 清空buff 避免噪音回响
a.read_s(len(data)//(a.RATE//a.CHUNK)+0.5)
if __name__ == '__main__':
main()
dome 模块 pyaudio 声音处理 为语音识别准备的更多相关文章
- Unity 声音处理 之 语音识别
音量检测 检测当前麦克风的输入音量 using System.Collections; using System.Collections.Generic; using UnityEngine; usi ...
- 基于语音识别、音文同步、图像OCR的字幕解决方案HtwMedia介绍
背景介绍 俗话说,“好记性不如乱笔头”,这充分说明了文字归档的重要性.如今随着微信.抖音等移动端app的使用越来越广,人们生产音.视频内容也越来越便捷.而相比语音和视频而言,文字具有易存档.易检索.易 ...
- 关于编码和解码问题——encode、decode
一.背景和问题 近期在做一个关于声卡录音的项目,开发环境是win10 64位家庭中文版,pycharm2019.1,python3.6(Anaconda3),python模块pyaud ...
- webrtc中APM(AudioProcessing module)的使用
一,实例化和配置 AudioProcessing* apm = AudioProcessing::Create(0); //这里的0指的是channelID,只是一个标注那个通道的表示 apm-> ...
- AngularJs angular.injector、angular.module
angular.injector 创建一个injector对象, 调用injector对象的方法可用于获取服务以及依赖注入. 格式:angular.injector(modules); modules ...
- webrtc--AudioProcessing的使用
1.AudioProcessing的实例化和配置: AudioProcessing* apm = AudioProcessing::Create(0); apm->level_estimator ...
- LINUX下 Udev详解
如果你使用Linux比较长时间了,那你就知道,在对待设备文件这块,Linux改变了几次策略.在Linux早期,设备文件仅仅是是一些带有适当的属性集的普通文件,它由mknod命令创建,文件存放在/dev ...
- 【Cocos2d-X开发笔记】第一期 Cocos2d-X的环境搭建
作者今天开始正式开始学习Cocos2d-X引擎进行游戏编程,预计两天会更新一期,最后实现ios游戏的appsore上线. (部分内容转载自:http://blog.csdn.net/yan ...
- 【Cocos2d-X开发学习笔记】第01期:PC开发环境的详细搭建
本文使用的是cocos2d-x-2.1.4版本 ,截至目前为止是最新稳定版 所谓的开发环境就是制作游戏的地方,打个比方读者就会十分清楚了.比如提到做饭,人们都会想到厨房.这是 因为厨房有炉灶.烟机.水 ...
随机推荐
- 沙雕与大婶 | Mock调你的外部依赖吧
故事背景: 沙雕在公司负责API项目的开发,很认真负责,经常加班加点赶进度,却常常被老板吐槽说他开发效率太低,他自己也很委屈,因为他所负责的项目常常依赖大量外部系统,他只好等对方开发完才一个个对接,开 ...
- py基础之列表生成式
列表生成式就是用一句语句生成一个列表,格式基本是:x for i in L下面是使用for循环迭代dict而生成的一个复杂表达式,将输出后的字符串保存为html文档可以生成一个表格d = {'adam ...
- 前端每日实战:85# 视频演示如何用纯 CSS 创作一个小球反弹的动画
效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/OwWROO 可交互视频 此视频是可 ...
- 初窥Mybatis初始化
引言 这篇文章呢,主要是讲Mybtais的两种方式的源码剖析:传统方式以及Mapper代理方式,初次探索Mybatis源码,希望大佬勿喷并且指正错误,谢谢! 个人博客:www.fqcoder.cn 一 ...
- Python 绘图 - Bokeh 柱状图小试(Stacked Bar)
背景 在 Bokeh 初探之后,学习使用它来做个图 目标 做一个柱状图,支持多个 y 数据源,即有堆叠效果的柱状图 stacked bar 实现 单数据源 简单的柱状图 参考 Handling Cat ...
- JZOJ 1301. treecut
1301. treecut (Standard IO) Time Limits: 1000 ms Memory Limits: 131072 KB Description 有一个N个节点的无根树,各节 ...
- 负载均衡框架 ribbon 二
Ribbon 负载均衡机制 官方文档地址:https://github.com/Netflix/ribbon/wiki/Working-with-load-balancers 1. Ribbon 内置 ...
- Git提交代码冲突:commit your changes or stash them before you can merge.
用git pull拉取远程分支代码时候遇到如下问题: error: Your local changes to the following files would be overwritten by ...
- getBoundingClientRect的实用场景
在用vue开发项目时候,遇到一个问题,首页有代办列表,是固定定位,滚动时候需要监听距离页面顶部的距离,如果很接近顶部则将代办列表展示,首页隐藏,如果再网上翻动则又回到首页. 因为是是fixed定位,所 ...
- 02 layui 下载和搭建环境
Layui官方网站 官方网站:https://www.layui.com/ 下载地址:https://res.layui.com/static/download/layui/layui-v2.5.5. ...