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版本 ,截至目前为止是最新稳定版 所谓的开发环境就是制作游戏的地方,打个比方读者就会十分清楚了.比如提到做饭,人们都会想到厨房.这是 因为厨房有炉灶.烟机.水 ...
随机推荐
- 一文看懂js中元素的滚动大小(scrollWidth,scrollHeight,scrollTop,scrollLeft)
滚动大小(scroll dimension) 滚动大小指的是包含滚动内容元素的大小. 以下是与元素滚动内容大小相关的属性: 1. scrollWidth:在没有滚动条的情况下,元素内容的总宽度. 2. ...
- MySQL集群MGR架构for多主模式
本文转载自: https://www.93bok.com MGR简介 MySQL Group Replication(简称MGR)是MySQL官方于2016年12月推出的一个全新的高可用与高扩展的解决 ...
- 一步步打造自己的纯CSS单标签图标库
图标作为网页设计中的一部分,其在凸显网页重要元素特性,视觉交互.引导以及网页装饰等充当的角色作用举足轻重.由于图标普遍具有尺寸小的特点,在项目实践时不宜将每个图标作为单个图片元素进行加载,这会增加Ht ...
- webpack里的externals
最近在用webpack做一些是sdk相关的东西,有几个概念总结一下: 1.library要做sdk,一定要做的一个配置,用于说明最终的SDK暴露给调用者的一个名称例如:library: 'HelloJ ...
- EventEmitter:从命令式 JavaScript class 到声明函数式的华丽转身
新书终于截稿,今天稍有空闲,为大家奉献一篇关于 JavaScript 语言风格的文章,主角是函数声明式. 灵活的 JavaScript 及其 multiparadigm 相信"函数式&quo ...
- JAVA Integer值的范围
原文出处:http://hi.baidu.com/eduask%C9%BD%C8%AA/blog/item/227bf4d81c71ebf538012f53.html package com.test ...
- 微服务优化之使用gRPC做微服务的内部通信
使用gRPC做微服务的内部通信 gRPC是一个由Google开源的远程服务调用框架,具有多路复用和双向流式通信的特性. 大家好,在本文中将为大家介绍为什么我们应该使用gRPC代替RESTful或JSO ...
- 从解决Cocos2dx-2.x arm64 Crash 来看C的奇技淫巧
最近把以前做的老游戏拿出来,重新编到手机上来玩玩,然后就有了以下的经历. 那时的引擎还是Cocos2dx-2.x,iPhone5还是高档机型.现在的机器是这样的,iPhone6S Plus我自用,今年 ...
- springcloud eureka注册中心搭建
环境描述 ① jdk1.8 ② idea ③ springcloud版本 Finchley.SR2 ④ maven3.0+ 导入jar包 <properties> <project. ...
- 「从零单排HBase 04」HBase高性能查询揭秘
先给结论吧:HBase利用compaction机制,通过大量的读延迟毛刺和一定的写阻塞,来换取整体上的读取延迟的平稳. 1.为什么要compaction 在上一篇 HBase读写 中我们提到了,HBa ...