如何在music21中通过tnIndexToChordInfo获取CHORD_TYPES格式和弦名?
解决方案
直接从chord.tables.tnIndexToChordInfo里拿不到harmony.CHORD_TYPES那种短横线连接的格式,但可以通过处理commonName实现,同时完成中文翻译:
- 第一步:提取
commonName的核心部分(去掉末尾的" chord"),把空格替换成短横线,就能得到类似dominant-seventh的短格式名称 - 第二步:建立英文短格式到中文和弦名的映射表,完成翻译
示例代码
from music21 import scale, roman, chord # 常用和弦英文短格式到中文的映射,可按需补充 CHORD_CN_MAP = { 'major': '大三和弦', 'minor': '小三和弦', 'diminished': '减三和弦', 'augmented': '增三和弦', 'dominant-seventh': '属七和弦', 'major-seventh': '大七和弦', 'minor-seventh': '小七和弦', 'diminished-seventh': '减七和弦', 'half-diminished-seventh': '半减七和弦', } # 生成和弦 k = scale.MelodicMinorScale('c') rn = roman.RomanNumeral('V7', k, caseMatters=False) c = chord.Chord(rn) # 处理得到短格式英文名称 short_en = rn.commonName.replace(' chord', '').replace(' ', '-') # 翻译成中文,找不到匹配则保留原英文 short_cn = CHORD_CN_MAP.get(short_en, short_en) # 设置歌词 c.lyric = f"{rn.figure}\n{short_cn}"
如果想直接从tnIndexToChordInfo取数据,可通过和弦的tnIndex属性定位:
# 通过tnIndex获取对应信息 chord_info = chord.tables.tnIndexToChordInfo[c.tnIndex] # chord_info[0]就是完整的commonName,后续处理和上面一致 short_en = chord_info[0].replace(' chord', '').replace(' ', '-')
内容的提问来源于stack exchange,提问作者wolfrevo
相关产品推荐
相关产品推荐

