我想编写一个程序,让我可以用电脑键盘播放样本声音,几乎没有延迟。
我的程序:
import numpy as np
import sounddevice as sd
import soundfile as sf
import msvcrt
sd.default.latency = 'low'
samplesarray = []
def load_samples(num):
filename='sample'+str(num)+'.wav'
data, fs = sf.read(filename, dtype='float32')
sd.default.samplerate = fs
samplesarray.append(data)
return
numberofsamples=3
for i in range(numberofsamples):
load_samples(i+1)
def play_session():
while 0==0:
key = int(msvcrt.getch())
sd.play(samplesarray[key-1])
return
play_session()
程序文件夹包含许多名为 sample1.wav、sample2.wav 等的“one shot”短样本,例如底鼓或军鼓。在此示例中,为简单起见,仅加载了三个。我可以在终端中启动我当前的程序,并在我的按键上播放“映射”的样本,这正是我想要的。唯一的问题是延迟:虽然不是很大,但它绝对是显而易见的。
对于现场播放样本,理想情况下延迟应该实际上是不可感知的(几十毫秒的数量级)。
我怎么能做到这一点?