#!/usr/bin/env python3 import sys import os import time import pyaudio unbufferedStdout = os.fdopen(sys.stdout.fileno(),"wb",0) # Make unbuffered stdout def parseSettings(): rtn = {} for arg in sys.argv[1:]: arg = arg.split("=",1) if len(arg) < 2: arg.append("") arg[0] = arg[0].strip(" \t\r\n") arg[1] = arg[1].strip(" \t\r\n") rtn[arg[0]] = arg[1] return rtn def getSetting(lst,tp,keys,default = None): for key in keys: if key in lst: return tp(lst[key]) return default def streamHandler(in_data, frame_count, time_info, status): unbufferedStdout.write(in_data) return (in_data, pyaudio.paContinue) settings = parseSettings() audioFormat = getSetting(settings,str,["f","format"],"paUInt8") audioChannels = getSetting(settings,int,["c","channel","channels"],1) audioRate = getSetting(settings,int,["r","rate","bitrate"],8000) audioBuffer = getSetting(settings,float,["b","buffer","buffersize"],0.05) audioDevice = getSetting(settings,int,["d","device"],None) audioFormat = getattr(pyaudio,audioFormat) audioBuffer = round(audioRate * audioBuffer) kwargs = { "input": True, "input_device_index": audioDevice, "format": audioFormat, "channels": audioChannels, "frames_per_buffer": audioBuffer, "rate": audioRate, "stream_callback": streamHandler } audio = pyaudio.PyAudio() stream = audio.open(**kwargs) try: while stream.is_active(): time.sleep(0.1) except KeyboardInterrupt: pass