From: Paul Brossier Date: Wed, 21 Dec 2016 21:00:32 +0000 (+0100) Subject: python/demos/demo_pyaudio.py: added simple demo for pyaudio, see #6, closes #78,... X-Git-Tag: 0.4.4~27 X-Git-Url: https://git.aubio.org/?a=commitdiff_plain;h=e7da8bac88b348345427d3264653b9dc70db99c4;p=aubio.git python/demos/demo_pyaudio.py: added simple demo for pyaudio, see #6, closes #78, thanks to @jhoelzl and @notalentgeek --- diff --git a/python/demos/demo_pyaudio.py b/python/demos/demo_pyaudio.py new file mode 100755 index 00000000..205a58de --- /dev/null +++ b/python/demos/demo_pyaudio.py @@ -0,0 +1,66 @@ +#! /usr/bin/env python + +import pyaudio +import sys +import numpy as np +from aubio import pitch, sink + +# initialise pyaudio +p = pyaudio.PyAudio() + +# open stream +buffer_size = 1024 +pyaudio_format = pyaudio.paFloat32 +n_channels = 1 +samplerate = 44100 +stream = p.open(format=pyaudio_format, + channels=n_channels, + rate=samplerate, + input=True, + frames_per_buffer=buffer_size) + +if len(sys.argv) > 1: + # record 5 seconds + output_filename = sys.argv[1] + record_duration = 5 # exit 1 + outputsink = sink(sys.argv[1], samplerate) + total_frames = 0 +else: + # run forever + outputsink = None + record_duration = None + +# setup pitch +tolerance = 0.8 +win_s = 4096 # fft size +hop_s = buffer_size # hop size +pitch_o = pitch("default", win_s, hop_s, samplerate) +pitch_o.set_unit("midi") +pitch_o.set_tolerance(tolerance) + +print("*** starting recording") +while True: + try: + audiobuffer = stream.read(buffer_size) + signal = np.fromstring(audiobuffer, dtype=np.float32) + + pitch = pitch_o(signal)[0] + confidence = pitch_o.get_confidence() + + print("{} / {}".format(pitch,confidence)) + + if outputsink: + outputsink(signal, len(signal)) + + if record_duration: + total_frames += len(signal) + if record_duration * samplerate < total_frames: + break + except KeyboardInterrupt: + print("*** Ctrl+C pressed, exiting") + break + +print("*** done recording") +stream.stop_stream() +stream.close() +p.terminate()