#! /usr/bin/env python # Use pyaudio to open the microphone and run aubio.pitch on the stream of# incoming samples. If a filename is given as the first argument, it will# record 5 seconds of audio to this location. Otherwise, the script will# run until Ctrl+C is pressed. # Examples:# $ ./python/demos/demo_pyaudio.py# $ ./python/demos/demo_pyaudio.py /tmp/recording.wav import pyaudioimport sysimport numpy as npimport aubio # initialise pyaudiop = pyaudio.PyAudio() # open streambuffer_size = 1024pyaudio_format = pyaudio.paFloat32n_channels = 1samplerate = 44100stream = 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 = aubio.sink(sys.argv[1], samplerate) total_frames = 0else: # run forever outputsink = None record_duration = None # setup pitchtolerance = 0.8win_s = 4096 # fft sizehop_s = buffer_size # hop sizepitch_o = aubio.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()
#! /usr/bin/env python
# Use pyaudio to open the microphone and run aubio.pitch on the stream of
# incoming samples. If a filename is given as the first argument, it will
# record 5 seconds of audio to this location. Otherwise, the script will
# run until Ctrl+C is pressed.
# Examples:
# $ ./python/demos/demo_pyaudio.py
# $ ./python/demos/demo_pyaudio.py /tmp/recording.wav
import pyaudio
import sys
import numpy as np
import aubio
# 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 = aubio.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 = aubio.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()