Ich möchte eine Notiz über Schlüssel halten mit Python spielen. Ich implementiere und modifiziere derzeit den gefundenen Code here. Das Problem, vor dem ich stehe, ist jedoch, dass die Keydown-Funktion wiederholt aufgerufen wird, wenn die Taste gedrückt wird. Dadurch wird das Audio bei jedem Aufruf der Keydown-Funktion ein- und ausgeschaltet.Note auf Schlüssel halten mit PyAudio und TK spielen
Ich bin auf der Suche nach einer Möglichkeit, die Fähigkeit zu behalten, Akkorde zu spielen, aber entferne diese Ein- und Ausschneidevorgänge, indem ich Keydown nicht auf der gleichen Taste anrufe, bis keyup auf der Taste aufgerufen wurde. Der spezifische Teil des Codes, an dem ich gearbeitet habe, ist unten abgebildet.
Vielen Dank im Voraus.
p = pyaudio.PyAudio()
chord = Chord()
gen = NoteGen()
def callback(in_data, frame_count, time_info, status):
wave = chord(frame_count)
data = wave.astype(numpy.float32).tostring()
return (data, pyaudio.paContinue)
stream = p.open(
format=pyaudio.paFloat32,
channels=1,
rate=44100,
output=True,
stream_callback=callback
)
stream.start_stream()
def keydown(event):
k = gen(event.char)
print("add note: " + event.char)
chord.add_note(k)
print [(n.name, n.frequency) for n in chord.notes]
def keyup(event):
k = gen(event.char)
print("remove note: " + event.char)
chord.remove_note(k)
print [n.name for n in chord.notes]
root = Tk()
frame = Frame(root, width=100, height=100)
frame.bind_all("<KeyPress>", keydown)
frame.bind_all("<KeyRelease>", keyup)
frame.pack()
root.mainloop()
stream.stop_stream()
stream.close()
p.terminate()
Wie Sie sehen konnten, ist Variable namens Akkord. Das ultimative Ziel wäre also, mehrere Noten gleichzeitig spielen zu können. Wenn ich mich nicht irre. Daher würde eine Variable nicht ausreichen. – Dalen
@Dalen, es ist ein Beispiel.Man kann ein Array von Variablen oder ein Wörterbuch mit verschiedenen Schlüsseln erstellen und überprüfen. Wie ich sehe, spielt momentan nur eine Note (44100 Hz) auf einer beliebigen Taste. – akarilimano
Ja, Ja, nur so! – Dalen