Я хочу сыграть заметку о удерживании клавиши с помощью python. В настоящее время я реализую и изменяю код here. Тем не менее, проблема, с которой я сталкиваюсь, заключается в том, что функция keydown вызывается многократно, когда ключ удерживается, в результате вырезание и выключение звука каждый раз, когда вызывается функция keydown.Воспроизведение заметки на удерживании клавиши с помощью PyAudio и TK
Я ищу способ поддерживать способность играть на аккордах, но удаляю это внутри и без вырезания, не вызывая keydown на одной и той же клавише до тех пор, пока на клавиатуре не будет вызвана клавиша. Конкретная часть кода, над которым я работал, показана ниже.
Заранее спасибо.
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()
Как вы могли видеть, переменная называется хордой. Таким образом, конечной целью было бы одновременное воспроизведение нескольких заметок. Если я не ошибаюсь. Поэтому одна переменная не будет делать. – Dalen
@ Дален, это пример.Можно сделать массив переменных или словарь с разными ключами и проверить его. Как я вижу, в настоящее время на любой клавише воспроизводится только одна нота (44100 Гц). – akarilimano
yep, Да, именно так! – Dalen