我正在使用 fluidsynth.py ( https://pypi.org/project/pyFluidSynth/ ) 创建一个用于教授音乐理论的程序。
fluidsynth.py 是一个非常有用的包,但不包括访问 Fluidsynth 的 MIDI 调音标准 API ( https://www.fluidsynth.org/api/group__tuning.html )。
不幸的是,我对 Python 如何与 DLL 接口的理解严重不足。我尝试将其添加到流体合成器.py:
fluid_synth_activate_key_tuning = cfunc('fluid_synth_activate_key_tuning', c_int,
('synth', c_void_p, 1),
('bank', c_int, 1),
('prog', c_int, 1),
('name', c_char_p, 1),
('pitch', POINTER(c_double), 1),
('apply', c_int, 1))
fluid_synth_tuning_dump = cfunc('fluid_synth_tuning_dump', c_int,
('synth', c_void_p, 1),
('bank', c_int, 1),
('prog', c_int, 1),
('name', c_char_p, 1),
('length', c_int, 1),
('pitch', POINTER(c_double), 1))
但是当我尝试向 Synth 类添加方法时,就会陷入真正的混乱:
def activate_key_tuning(self, bank, prog, name, pitch, apply=True):
pitch_array = (c_double * len(pitch))(*pitch)
return fluid_synth_activate_key_tuning(self.synth, bank, prog, name.encode(), pitch_array ,apply)
def tuning_dump(self, bank, prog, pitch):
## name = ['a']*100
name = "12345678901234567890"
error = fluid_synth_tuning_dump(self.synth, bank, prog, name.encode(), 20, pitch)
print("From fluidsynth, name: ", name)
return error
第一种方法可能是正确的,但特别是我不明白如何在第二种方法中定义名称和音高的类型。有问题的两种方法的签名是:
int fluid_synth_activate_key_tuning(fluid_synth_t *synth,
int bank,
int prog,
const char* name,
const double* pitch,
int apply
)
int fluid_synth_tuning_dump(fluid_synth_t *synth,
int bank,
int prog,
char* name,
int len,
double* pitch
)
感谢。