파이썬을 사용하여 키 보류시 음을 연주하고 싶습니다. 현재 코드를 구현하고 수정하는 중 here이 발견되었습니다. 그러나, 내가 직면하고있는 문제는 keydown 함수가 호출 될 때마다 오디오를 잘라내어 출력하는 결과로 키가 보관 될 때 keydown 함수가 반복적으로 호출된다는 것입니다.PyAudio 및 TK를 사용하여 키 보류시 음을 연주하십시오.
코드를 재생할 수있는 방법을 찾고 있지만이 키에 대해 keyup이 호출 될 때까지 같은 키의 keydown을 호출하지 않으면 서 in-and-out 커팅을 제거합니다. 내가 작업 한 코드의 특정 부분은 아래와 같습니다.
미리 감사드립니다.
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()
보시다시피 변수의 이름은 chord입니다. 따라서 궁극적 인 목표는 동시에 여러 노트를 재생할 수있게하는 것입니다. 내가 슬프게도 실수하지 않는다면. 따라서 하나의 변수는 수행하지 않습니다. – Dalen
@Dalen, 예입니다.하나는 변수의 배열을 만들거나 다른 키를 가진 사전을 만들고 그것을 검사 할 수 있습니다. 보시다시피, 현재 하나의 음 (44100 Hz) 만 어떤 건반에서 연주하고 있습니다. – akarilimano
예, 예, 그렇습니다! – Dalen