【发布时间】:2018-05-30 20:08:59
【问题描述】:
我有这个用于创建 wav 文件的代码:
class Note:
def __init__(self,name,octave,duration):
self.name = name
self.octave = octave
self.duration = duration
SAMPLE_RATE = 44100
wav = wave.open("starw.wav", mode="w")
wav.setparams((1, 2, SAMPLE_RATE , SAMPLE_RATE*4, 'NONE', 'noncompressed'))
def generate_sample(note,volume):
freq = FREQUENCIES[note.octave][note.name]
duration = note.duration
total_samples = int(SAMPLE_RATE * duration)
for i in range(0,total_samples):
s = np.clip(int((volume)*math.sin(freq*math.pi*float(i)/float(SAMPLE_RATE))),-32768,32768)
data = struct.pack('<h',s)
wav.writeframes(data)
return data
for i,m in enumerate(melody):
if i<len(melody)/5:
generate_sample(m, 100+i*500)
elif len(melody)/5<=i<=4*len(melody)/5:
generate_sample(m, 8800)
else:
generate_sample(m, 8800-i*20)
这里的FREQUENCIES 是一个描述音符及其频率的字典。 melody 是 Note 对象的数组。一切正常,除了在暂停期间会产生奇怪的点击声。据我了解,它与采样率有关。但我不知道如何更改我的代码以避免暂停。这是旋律:
https://drive.google.com/open?id=1e03VC90w5WF4QdU-VxrV906dl_c3UvSQ
【问题讨论】:
-
可能是许多音符开始/结束时的咔嗒声?
-
是的,我的意思是点击。