def run():
p = pyaudio.PyAudio()
stream = p.open(
format=pyaudio.paInt16,
channels=1, # Mono
rate=RATE,
input=True,
frames_per_buffer=CHUNK
)
signal = empty(FFT_LEN, dtype=int16)
try:
# Disable cursor
sys.stdout.write('\033[?25l')
while 1:
# Roll in new frame into buffer
try:
frame = stream.read(CHUNK)
except IOError as e:
if e[1] != pyaudio.paInputOverflowed:
raise
continue
signal = roll(signal, -CHUNK)
signal[-CHUNK:] = fromstring(frame, dtype=int16)
# Now transform!
try:
fftspec = list(log(abs(x) * SIGNAL_SCALE) + 1.5 for x in rfft(signal)[:CHUNK*3])
except ValueError:
fftspec = [0] * CHUNK * 3
# Print it
lines = [
''.join(spark(x - i+1, x) for x in fftspec)
for i in range(HEIGHT, 0, -1)
]
sys.stdout.write('?' + '?\n?'.join(lines) + '?')
sys.stdout.write('\033[3A\r')
except KeyboardInterrupt:
sys.stdout.write('\n' * HEIGHT)
finally:
# Turn the cursor back on
sys.stdout.write('\033[?25h')
评论列表
文章目录