0

我正在使用 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 
)   

感谢。

4

0 回答 0