问题描述
我正在尝试首次使用Python制作波表合成器(基于我在https://blamsoft.com/tutorials/expanse-creating-wavetables/处找到的示例),但是我得到的合成声音根本听不到音调。我的输出只是低沉的嗡嗡声。我对使用Python制作波表非常陌生,并且我想知道是否有人能够告诉我我所缺少的,以便将A440正弦波表写入文件“ wavetable.wav”并实际使用它产生纯正弦音?这是我目前的状态:
import wave
import struct
import numpy as np
frame_count = 256
frame_size = 2048
sps = 44100
freq_hz = 440
file = "wavetable.wav" #write waveform to file
wav_file = wave.open(file,'w')
wav_file.setparams((1,2,sps,frame_count,'NONE','not compressed'))
values = bytes(0)
for i in range(frame_count):
for ii in range(frame_size):
sample = np.sin((float(ii)/frame_size) * (i+128)/256 * 2 * np.pi * freq_hz/sps) * 65535
if sample < 0:
sample = 0
sample -= 32768
sample = int(sample)
values += struct.pack('h',sample)
wav_file.writeframes(values)
wav_file.close()
print("Generated " + file)
我在for循环中拥有的正弦函数可能是我最不了解的部分,因为我只是逐字逐句地进行示例。我习惯于制作(y = Asin(2πfx))之类的正弦函数,但是我不确定将((i + 128)/ 256)和65535(16位幅度分辨率?)相乘的目的是什么。我也不确定从每个样本中减去32768的目的是什么。有谁能够澄清我所缺少的,甚至可以指出正确的方向?我会以错误的方式处理吗?任何帮助表示赞赏!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)