进行语音流检测

pyAudio
http://old.sebug.net/paper/books/scipydoc/wave_pyaudio.html
注:这部分是通过录音设备给语音激活检测传

"path/to/vad/audio_stream.py"
#!usr/bin/env python
# -*- coding: utf-8 -*-import numpy as np
from pyaudio import PyAudio,paInt16
from datetime import datetime
import wave
from Tkinter import *
import sys
from ffnn import FFNNVADGeneralimport logging
# import chardet    # 查看编码# define of params
NUM_SAMPLES =160
FRAMERATE = 16000
CHANNELS = 1
SAMPWIDTH = 2
FORMAT = paInt16
TIME = 125
FRAMESHIFT = 160def save_wave_file(filename,data):'''save the date to the wav file'''wf = wave.open(filename,'wb')wf.setnchannels(CHANNELS)wf.setsampwidth(SAMPWIDTH)wf.setframerate(FRAMERATE)wf.writeframes("".join(data)) # ""中间不能有空格,不然语音录入会有很多中断。wf.close()def my_button(root,label_text,button_text,button_stop,button_func,stop_func):'''create label and button'''label = Label(root,text=label_text,width=30,height=3).pack()button = Button(root,text=button_text,command=button_func,anchor='center',width=30,height=3).pack()button = Button(root,text=button_stop,command=stop_func,anchor='center',width=30,height=3).pack()def record_wave():'''open the input of wave'''pa = PyAudio()# 录音stream = pa.open(format=FORMAT,channels=CHANNELS,rate=FRAMERATE,input=True,frames_per_buffer=NUM_SAMPLES)   #一个buffer存NUM_SAMPLES个字节,作为一帧vad = FFNNVADGeneral('/path/to/VAD/alex-master/alex/tools/vad_train/model_voip/vad_nnt_546_hu32_hl1_hla6_pf10_nf10_acf_1.0_mfr20000_mfl20000_mfps0_ts0_usec00_usedelta0_useacc0_mbo1_bs100.tffnn', filter_length=2, sample_rate=16000, framesize=512, frameshift=160,usehamming=True, preemcoef=0.97, numchans=26, ceplifter=22, numceps=12, enormalise=True, zmeansource=True, usepower=True, usec0=False, usecmn=False, usedelta=False, useacc=False, n_last_frames=10, n_prev_frames=10, lofreq=125, hifreq=3800, mel_banks_only=True)# 语音激活检测神经网络方法的类FFNNVADGeneral.save_buffer = []count = 0# logging设置,用于记录日志logging.basicConfig(level=logging.INFO,filename='log.txt',filemode ='w',format='%(message)s')while count < TIME*4:string_audio_data = stream.read(NUM_SAMPLES)    result = vad.decide(string_audio_data)frame = count*NUM_SAMPLES/float(FRAMESHIFT)time = count*NUM_SAMPLES/float(FRAMERATE)  # time=frame*frameshift/frameratelogging.info('frame: '+str(frame)+' time: '+str(time)+' prob: '+str(result))  # logging记录字符串,用‘+’连接save_buffer.append(string_audio_data)count += 1#chardet.detect(string_audio_data)  #查看编码类型print "."filename = datetime.now().strftime("%Y-%m-%d_%H_%M_%S")+".wav"save_wave_file(filename,save_buffer)save_buffer = []print "filename,saved."def record_stop():# stop record the wavesys.exit(0)def main():root = Tk()root.geometry('300x200+200+200')root.title('record wave')my_button(root,"Record a wave","clik to record","stop recording",record_wave,record_stop)root.mainloop()if __name__ == "__main__":main()# error
$ bt_audio_service_open: connect() failed: Connection refused (111)
# 解决: 貌似有多余蓝牙库却没有蓝牙设备
$ sudo apt-get purge bluez-alsa# Warning
$ ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2239:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
# 是由于usr/share/alsa/alsa.conf默认设置

录音

sudo apt-get update   #更新软件源,最好使用国内的软件源,如何配置源参考百度。
sudo apt-get upgrade  #升级软件包
sudo apt-get install alsa-utils alsa-tools alsa-tools-gui alsamixergui #安装所需软件包# 查看音频设备
$ arecord -l
> card 0: PCH [HDA Intel PCH], device 0: ALC887-VD Analog [ALC887-VD Analog]Subdevices: 1/1Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 2: ALC887-VD Alt Analog [ALC887-VD Alt Analog]Subdevices: 1/1Subdevice #0: subdevice #0# 机器有多于一个声卡,可以用下面的命令显示出来$ cat /proc/asound/cards>  0 [PCH            ]: HDA-Intel - HDA Intel PCHHDA Intel PCH at 0xf7210000 irq 291 [NVidia         ]: HDA-Intel - HDA NVidiaHDA NVidia at 0xf7080000 irq 17# 每一个声卡有一个card number和一个device number,可以用下面命令显示出来$ aplay -l> card 0: PCH [HDA Intel PCH], device 0: ALC887-VD Analog [ALC887-VD Analog]Subdevices: 1/1Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC887-VD Digital [ALC887-VD Digital]Subdevices: 1/1Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [HDMI 0]Subdevices: 1/1Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]Subdevices: 1/1Subdevice #0: subdevice #0# 录音
$ arecord -D "plughw:0,0" -f S16_LE -r 16000 -d 5 -t wav file.wav
# -D 选择设备  试过hw:1,0 hw:0,2 只有hw:0,0可以录音
# -f 录音格式  S16_LE代表有符号16位小端序
# -r 采样率
# -t 录音时长
# file.wav 文件名# 不添加plug会有警示,因为是外置声卡
Warning: rate is not accurate (requested = 16000Hz, got = 44100Hz)  please, try the plug plugin # 验证录音
$ aplay file.wav

一般alsa设置了一个defaults设备,音频播放软件默认使用defaults设备输出声音。defaults设备定义在alsa.conf中,内容如下:

[plain]
#
# defaults
#  # show all name hints also for definitions without hint {} section
defaults.namehint.showall off
# show just basic name hints
defaults.namehint.basic on
# show extended name hints
defaults.namehint.extended off
#
defaults.ctl.card 0
defaults.pcm.card 0
defaults.pcm.device 0
defaults.pcm.subdevice -1
……   

defaults会默认匹配card number和device number比较小的声卡。
如果要修改,则修改/etc/asound.conf或~/.asoundrc。比如我要把defaults匹配到card 1,device 0上,则添加一下几行:

c++录音

https://github.com/aaronaanderson/ofxPortSF

转载:https://www.cnblogs.com/Vanessa-Feng/p/7452108.html

录音-语音流(pyAudio)相关推荐

  1. 使用腾讯云实现录音语音转换文字简单DEMO

    使用腾讯云实现录音语音转换文字简单DEMO 感谢 对接腾讯云 新建springboot项目 创建一个接口(VoiceService) 创建controller层(VoiceController) 加入 ...

  2. MATLAB实现实时录音,语音采集与读写用matlab实现录音以及语谱图的绘制.pdf

    <语音信号处理>仿真作业 院 系 电气与电子工程学院 专业班级 姓 名 学 号 指导教师 2020 年 3 月 作业题目:语音采集与读写 一.目的 (1)了解matlab 采集语音信号的原 ...

  3. Android音频框架之二 用户录音启动流程源码走读

    前言 此篇是对<Android音频框架之一 详解audioPolicy流程及HAL驱动加载>的延续,此系列博文是记录在Android7.1系统即以后版本实现 内录音功能. 当用户使用 Au ...

  4. TCP协议在传输实时语音流方面的优点

    1. 可靠性高:TCP协议通过确认机制和重传机制保证数据的可靠性,能够保证语音数据的完整性和准确性. 2. 顺序性好:TCP协议能够保证数据的顺序性,能够确保语音数据按照发送顺序被接收. 3. 流量控 ...

  5. 网络语音流隐写分析全流程 (Steganalysis of VoIP Speech Streams)

    欢迎访问我的个人博客:https://hi.junono.com/ AMR隐写数据集地址(Kaggle) 网络语音流隐写分析全流程 隐写分析流程介绍: 基本知识 **基于网络语音(VoIP)流的隐写术 ...

  6. python录音pyaudio_python调用pyaudio使用麦克风录制wav声音文件的教程

    python的pyaudio可以进行录音,播放,生成wav文件等等,WAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为WAV,数据本身的格式为PCM或压缩型,属于无损音乐格式的一种.在我 ...

  7. python录音pyaudio_用PyAudio录制特定时间的音频?

    我正在尝试使用Python和PyAudio来学习音频捕获/录制.我看了几个例子,发现了一个:import pyaudio import wave CHUNK = 2 FORMAT = pyaudio. ...

  8. 百度语音识别+百度ERNIE-Gram+pyaudio麦克风录音(NLP自然语言处理)

    1.pyaudio安装及通过pyaudio实现录音 pip install pyaudio 在conda环境中安装没有报错 实现录音的代码如下: # -*- coding: utf-8 -*- fro ...

  9. 谈谈市场上常用语音芯片方案选型,录音芯片方案选型

    [系列专栏]:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! <QT开发实战> <嵌入式通用开发实战> <嵌入式Linux开发实战> 转自:http:/ ...

最新文章

  1. java什么时候用list_Java快问快答:用 ArrayList 还是 LinkedList?
  2. ios中图片不显示的问题
  3. SpringBoot基础篇
  4. MySQL5.6一主多从复制配置方式一:Tungsten复制中间件
  5. 临床重症医学数据库MIMIC、eICU、PIC介绍
  6. notepad拼心形_bat心形代码
  7. android 标准字体,文字规范标准(IOS/Android)
  8. RFC and session issue - why we should use DESTINATION NONE?
  9. C语言简单的练习题目——牛生牛
  10. 用JAVA制作小游戏——推箱子(三)
  11. css_02 | CSS——CSS 选择器详解
  12. python之collections模块Counter类使用学习
  13. Atitit spring5 集成 mybatis 注解班
  14. 【项目总结】中国大学生计算机设计(机械制造暨政治正确)大赛
  15. CSS:使用媒体查询进行网页元素的缩放
  16. 快手、抖音等短视频营销模式
  17. python七巧板拼图代码_为什么代码都是用英文来写的,将来会有用中文写代码的那天吗?...
  18. win7 删除网络计算机,win7系统修改和删除网络图标的方法
  19. docker logs 说明
  20. 调音台使用基础-通道条、信号流简介

热门文章

  1. 【算法千题案例】⚡️每日LeetCode打卡⚡️——61.下一个更大元素 I
  2. html页面加载蒙版_javascript 窗口加载蒙板 内嵌网页内容
  3. Python爬虫之煎蛋网妹子图爬虫,解密图片链接加密方式
  4. 站长工具源码含上百款工具带后台自适应模板安装教程
  5. 穿上资本小棉袄的00后社交,到底是什么鬼?
  6. 使用jps和jstack查看java的进程和线程信息
  7. 2021年全球热成像收入大约742.5百万美元,预计2028年达到1487.1百万美元
  8. 2021中国企业数字转型指数 附下载
  9. BMC 安装操作系统环境配置
  10. Favicon的在线制作与下载