废话不多说,直接上代码:

# -*- coding: utf-8 -*-
import time
import pyaudio
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation
from multiprocessing import Process,Event,Queue,freeze_support
import waveclass Audio:# 定义构造器audio_queue = Queue()audio_queue1 = Queue()event = Event() #init functiondef __init__(self, CHUNK=2000, FORMAT=pyaudio.paInt16, CHANNELS=1, RATE=10000):self.CHUNK = CHUNKself.FORMAT = FORMATself.CHANNELS = CHANNELSself.RATE = RATEdef listen(self,eve,que):print("listen")p = pyaudio.PyAudio()stream = p.open(format=self.FORMAT,channels=self.CHANNELS,rate=self.RATE,input=True,frames_per_buffer=self.CHUNK)while True:data = stream.read(10240)que.put(data)eve.set()def play(self,eve,que):print("play")p1 = pyaudio.PyAudio()# 打开音频流, output=True表示音频输出stream = p1.open(format=self.FORMAT,channels=self.CHANNELS,rate=self.RATE,output=True,frames_per_buffer=self.CHUNK)while True:if que.empty():#print("等待数据中..........")eve.wait()else:#playdata = que.get()# print("获取的数据data",data)#创建播放器stream.write(data)def display(self,eve,que):print("display")cnt = 0while True:if que.empty():eve.wait()else:#playdata = que.get()#print("获取的数据data",data)data1 = np.fromstring(data,dtype = np.int16)# First set up the figure, the axis, and the plot element we want to animatefig = plt.figure()ax = plt.axes(xlim=(0, len(data1)), ylim=(-50000, 50000))line, = ax.plot([], [], lw=2)# initialization function: plot the background of each framedef init():line.set_data([], [])return line,# animation function.  This is called sequentially# note: i is framenumberdef animate(i):data = que.get()data1 = np.fromstring(data,dtype=np.int16)x = range(len(data1))y = data1line.set_data(x, y)return line,# call the animator.  blit=True means only re-draw the parts that have changed.anim = animation.FuncAnimation(fig, animate, init_func=init,blit=True)                 #anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264']) if cnt == 0:plt.show()else:continuecnt += 1def fit(self,eve,que):print('fit')while True:if que.empty():eve.wait()else:data = que.get()data1 = np.fromstring(data,dtype = np.int16)max_freq = np.max(data1)#给PHP# print([np.max(data1),np.std(data1)])if np.max(data1) > 8000 :print ("检测到异常信号")print ('当前信号:',max_freq)#存入音频文件clc = int(time.time())file = wave.open(str(clc)+".wav","wb")file.setnchannels(1)file.setframerate(2000)file.setnframes(10000)file.setsampwidth(2)file.writeframes(data1)file.close()                else:print("信号正常")#实时性多进程处理def start(self):#监听audio_process = Process(target=self.listen,args=(self.event,self.audio_queue))audio_process.start()#监听audio_process1 = Process(target=self.listen,args=(self.event,self.audio_queue1))audio_process1.start()#播放play_process = Process(target=self.play,args=(self.event,self.audio_queue))play_process.start()# 绘图display_process = Process(target=self.display,args=(self.event,self.audio_queue1))display_process.start()#Judge and alarmjudge_alarm_process = Process(target=self.fit,args=(self.event,self.audio_queue))judge_alarm_process.start()if __name__ == '__main__':freeze_support()audio_main = Audio()audio_main.start()

代码运行效果:

python实现多进程监听声音播放并绘图相关推荐

  1. 类似ngnix的多进程监听用例

    2019独角兽企业重金招聘Python工程师标准>>> 多进程监听适合于短连接,且连接间无交集的应用. 前两天简单写了一个,在这里保存一下. #include <sys/typ ...

  2. python全局键盘监听(pynput快捷键);利用pywin32快速截屏并生成视频

    python全局键盘监听(pynput快捷键):利用pywin32快速截屏并生成视频 第一次在CSDN写博客,有点小紧张(/ω\) 以下内容完全个人理解,有错误请指出~ 最近在用python做一个小工 ...

  3. js监听audio播放完毕

    js监听audio播放完毕 <!DOCTYPE html> <html> <head><meta charset="UTF-8">& ...

  4. python应用系列教程——python使用scapy监听网络数据包、按TCP/IP协议进行解析

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  5. android 监听gif播放,Glide4.0 以后 监听Gif播放完成

    在Glide3.0的时候,我们可以通过GifDecoder获取每一帧的播放时长然后相加得到gif的播放时长,即: GifDrawable drawable = (GifDrawable) glideD ...

  6. video监听上次播放时间点下次进入后继续播放

    最近被人问到如何打开视频播放接着上一次播放的时间点继续播放.由于之前只是采用最基本的视频播放或者利用第三方插件进行播放视频,根本没有考虑这么多:脑子里只有一个大概的想法但是不知道是否能实现所以就没有回 ...

  7. 浅谈javascript的事件监听——音乐播放器的控制

    javascript的事件 javascript是一门基于事件驱动的语言,当html页面中的元素触发一些动作时,可以执行相关的js代码. 1.常见事件 浏览器窗体事件 事件名 描述 onload 当窗 ...

  8. Python 键盘鼠标监听

    异想天开的想记录一下自己每天的键盘键位走向,于是就在网上搜索了一下相关的实现,然后就发现了一个第三方的库pyHook.封装的很好,我们只需要傻瓜式的调用里面的API就可以了. 下面是我在使用pyHoo ...

  9. python脚本如何监听终止进程行为,如何通过脚本名获取pid

    文章目录 一.前言 二.最初的想法:直接获取脚本中的变量值 1.获取运行中py脚本的变量值 2.换一种方式 3.为什么不能获取脚本中的变量 4.下下策,使用使用python的gdb调试工具 三.pyt ...

  10. android开发监听媒体播放器,Android开发之媒体播放工具类完整示例

    本文实例讲述了Android开发之媒体播放工具类.分享给大家供大家参考,具体如下: package com.maobang.imsdk.util; import android.media.Media ...

最新文章

  1. Comet OJ - Contest #2题解
  2. sqlite的控制台中文显示问题
  3. love2d教程3--输入和音乐
  4. 半潜式平台及其动力定位系统
  5. Python学习:numpy的使用技巧和注意
  6. .net core 微服务之API网关 开源中间件 Ocelot 笔记
  7. linux 添加环境变量(php为例)
  8. 香港买thinkpad大陆使用,大陆可以享受售后服务吗
  9. ubuntu版本号查询
  10. oraclize预言机资料
  11. Java三种类型之间的转换方法:Date、String、Calendar类型之间的转化
  12. reconnecting-websocket.min.js
  13. 计算机辅助几何设计等值曲线,中国科学技术大学硕士专业:计算机辅助几何设计...
  14. 简单数论入门和基础数学知识(未完)
  15. plsql存过声明游标_PLSQL游标使用
  16. 【机器学习与数据挖掘】浅谈指标SSE,MSE,RMSE,R-square
  17. Jetson AGX Xavier 固态硬盘安装并挂载到/home与无线模块安装
  18. Win10 去掉桌面快捷方式小箭头
  19. 择校秘籍|保研去 北大软微 还是 中科院计算所?
  20. “管中窥豹”,MyCAT的基因缺陷

热门文章

  1. 此博客记录我的日常学习过程
  2. 防止页面高度不足,引起的底部上浮问题
  3. linux下RRDTool安装方法
  4. PHOTOSHOP教程
  5. [WebApi] 捣鼓一个资源管理器--多文件上传+数据库辅助
  6. [FJOI2014] 石子合并问题
  7. vue页面中样式修改子组件的样式
  8. oracle 模式_Oracle实验--insert /*+APPEND*/与insert不同模式下产生redo大小
  9. yarn临时目录 没有jar包_Yarn(Haoop组件之一)介绍
  10. odp.net连接oracle9i 出错解决_架构师成长之路:Kafka连接器深度解读之错误处理和死信队列...