first commit
This commit is contained in:
46
Amadeus/symbolic_encoding/anylazesf.py
Normal file
46
Amadeus/symbolic_encoding/anylazesf.py
Normal file
@ -0,0 +1,46 @@
|
||||
from sf2utils.sf2parse import Sf2File
|
||||
|
||||
def print_sorted_presets(sf2_path):
|
||||
presets_info = []
|
||||
|
||||
with open(sf2_path, 'rb') as f:
|
||||
sf2 = Sf2File(f)
|
||||
|
||||
for preset in sf2.presets:
|
||||
try:
|
||||
# 尝试直接读取
|
||||
name = getattr(preset, 'name', '???').strip('\x00')
|
||||
bank = getattr(preset, 'bank', None)
|
||||
program = getattr(preset, 'preset', None)
|
||||
|
||||
# 如果获取不到,再尝试从子属性中取
|
||||
if bank is None or program is None:
|
||||
for attr in dir(preset):
|
||||
attr_value = getattr(preset, attr)
|
||||
if hasattr(attr_value, 'bank') and hasattr(attr_value, 'preset'):
|
||||
bank = attr_value.bank
|
||||
program = attr_value.preset
|
||||
name = getattr(attr_value, 'name', name).strip('\x00')
|
||||
break
|
||||
|
||||
# 收集有效结果
|
||||
if bank is not None and program is not None:
|
||||
presets_info.append((program, bank, name))
|
||||
except Exception as e:
|
||||
print(f"Error reading preset: {e}")
|
||||
|
||||
# 按 program 升序排序(若需要按 bank 再 program,改为 sorted(..., key=lambda x: (x[1], x[0])))
|
||||
presets_info.sort(key=lambda x: x[0])
|
||||
|
||||
# 打印结果
|
||||
print(f"{'Program':<8} {'Bank':<6} {'Preset Name'}")
|
||||
print("-" * 40)
|
||||
for program, bank, name in presets_info:
|
||||
print(f"{program:<8} {bank:<6} {name}")
|
||||
|
||||
# DEFAULT_SOUND_FONT = '/data2/suhongju/research/music-generation/sound_file/CrisisGeneralMidi3.01.sf2'
|
||||
# DEFAULT_SOUND_FONT = '~/.fluidsynth/default_sound_font.sf2'
|
||||
|
||||
# 替换为你的 sf2 文件路径
|
||||
sf2_path = "/data2/suhongju/research/music-generation/sound_file/CrisisGeneralMidi3.01.sf2"
|
||||
print_sorted_presets(sf2_path)
|
||||
Reference in New Issue
Block a user