第一次制作波表合成器...有人可以指出我正确的方向吗?

问题描述

我正在尝试首次使用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 (将#修改为@)