3

FluidSynth のサウンドフォント ファイル内のすべての楽器 (プリセット名) のリスト、または少なくとも各サウンドバンク内のプリセットの数を返す関数はありますか?

4

3 に答える 3

0

これは正確には「非反復的」ではありませんが、サウンドフォント ファイル内のすべてのプリセットのリストを取得する唯一の方法です。

fluid_preset_t* preset = new fluid_preset_t();

// Reset the iteration
sf->iteration_start(sf);

// Go through all the presets within the soundfont
int more = 1;
while (more) {
    more = sf->iteration_next(sf, preset); // Will return 0 if no more soundfonts left
    if (more) {
        // Get preset name
        char* presetname = preset->get_name(preset);
        int banknum = preset->get_banknum(preset);
        int num = preset->get_num(preset);

        // Do something with the presetname, bank number and program number
        // Such as add it to some list so that you can refer to it later
    }
}

... ここで、sf はサウンドフォント オブジェクトです。

これは、 http://fluidsynth.sourceforge.net/api/index.htmlで API ドキュメントを調べているときに見つかりました。データ構造、ファイルなどへのリンクを含む上部のメニューに注意してください。

于 2014-06-24T18:51:41.177 に答える
0

私はこれを試しました:

static void inspectsoundfont()
{
    fluid_sfont_t* sfont = fluid_synth_get_sfont_by_id(synth, font_id);

    for (int bank = 0; bank < 16384; bank++)
    {
        for (int num = 0; num < 128; num++)
        {
             fluid_preset_t* preset = fluid_sfont_get_preset(sfont, bank, num);
             if (preset == nullptr)
                  continue;
             const char* name = fluid_preset_get_name(preset);
             std::cout << "bank: " << bank << " index: " << num << " " << name << std::endl;
        }
    }
}

synth はシンセサイザー オブジェクトであり、font_id は fluid_synth_sfload からのものです。バンクとプリセット名のリストをくれました。

于 2021-09-01T16:45:18.810 に答える