def __init__(): # START p = pyaudio.PyAudio() def countdown(secs): while secs > 0: print secs sleep(1) secs -= 1 # # STAGE 1 # # Run analyse on input stream # midi_player.play(60 + Notes.C) print "Sing!" # Open input stream, 16-bit mono at 44100 Hz AUDIO_INPUT = p.open( format = pyaudio.paInt16, channels = 1, rate = 44100, input_device_index = 1, input = True) chr = 0 time = 0 last_tone = None last_played = None last_played_time = 0 while True: # Read raw microphone data rawsamps = AUDIO_INPUT.read(CHUNK_SIZE) # Convert raw data to NumPy array samps = numpy.fromstring(rawsamps, dtype=numpy.int16) # get vol and pitch loudness = analyse.loudness(samps) pitch = Pitch(samps, mode = Modes.MINOR_PENTATONIC, key = Notes.C) # analyze pitch if loudness > VOLUME_THRESHOLD: tone = pitch.tone if tone != last_tone: last_time = time # # note changed # if last_played and tone and (abs(last_played - tone) > 11): # likely to be stray print "OVERLAP", (time - last_played_time) if (time - last_played_time) > 7: F_Stray = 0.8 else: F_stray = 0.0 if last_played and tone and last_played == tone: print "REPEAT", (time - last_played_time) if (time - last_played_time) < 22: F_stray = 0.3 else: F_stray = 1.0 else: F_stray = 1.0 D = F_stray print "%4s %3.f" % (pitch.to_tone_string() or "--", F_stray) if D > 0.6: #midi_player.play(tone) SendMidi.sendNote(tone) if tone is not None: last_played = tone last_played_time = time last_tone = tone # advance time time += 1
print "OVERLAP", (time - last_played_time) if (time - last_played_time) > 7: F_Stray = 0.8 else: F_stray = 0.0 if last_played and tone and last_played == tone: print "REPEAT", (time - last_played_time) if (time - last_played_time) < 22: F_stray = 0.3 else: F_stray = 1.0 else: F_stray = 1.0 D = F_stray print "%4s %3.f" % (pitch.to_tone_string() or "--", F_stray) if D > 0.6: midi_player.play(tone) if tone is not None: last_played = tone last_played_time = time last_tone = tone # advance time time += 1