55 lines
1.4 KiB
Python
55 lines
1.4 KiB
Python
|
#!/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
|