キーボードからの入力に基づいてコンピューターから音を再生するコードに取り組んでいます。サウンドはwavファイルとして保存され、PyAudioで再生されます。ただし、2つの連続するキーボードストロークで再生されるサウンド間のレイテンシーが遅すぎたため、I/O時間を高速化するためにスレッドを追加しようとしています。ただし、オーディオがスクラッチになり、スレッドのロックが機能していないと思います。関連するコードは次のとおりです。
while threading.activeCount() < NUM_THREADS:
message, delta_time = midi_in.get_message()
if message:
if message[2] == 0:
continue
elif message and (str(message[1]) == "108" or str(message[1]) == "107"):
break
else:
t = threading.Thread(target=play, args=(message,))
lock = threading.Lock()
lock.acquire()
t.start()
lock.release()
def play(message):
WAVE_FILENAME = "final"+str(message[1]) + '.wav'
CHUNK = 1024
wf = wave.open(WAVE_FILENAME)
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
channels = wf.getnchannels(),
rate = wf.getframerate(),
output = True)
data = wf.readframes(CHUNK)
while data != '':
stream.write(data)
data = wf.readframes(CHUNK)
stream.stop_stream()
stream.close()
p.terminate()
助けてくれてありがとう!