首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >音符字符串(C#-4、F-3等)到MIDI音符值,在Python中

音符字符串(C#-4、F-3等)到MIDI音符值,在Python中
EN

Stack Overflow用户
提问于 2012-12-18 12:28:19
回答 2查看 1.3K关注 0票数 1

下面答案中的代码将字符串(如C#-4F-3 )中的音符转换为其相应的MIDI音符值。

我张贴这篇文章是因为我厌倦了每次我需要的时候都在网上挖掘它。我相信我不是唯一能找到用武之地的人。我刚刚写了这篇文章--它是经过测试的,是正确的。它是用Python编写的,但我觉得它几乎是所有人都能理解的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-18 12:28:19

代码语言:javascript
复制
#Input is string in the form C#-4, Db-4, or F-3. If your implementation doesn't use the hyphen, 
#just replace the line :
#    letter = midstr.split('-')[0].upper()
#with:
#    letter = midstr[:-1]
def MidiStringToInt(midstr):
    Notes = [["C"],["C#","Db"],["D"],["D#","Eb"],["E"],["F"],["F#","Gb"],["G"],["G#","Ab"],["A"],["A#","Bb"],["B"]]
    answer = 0
    i = 0
    #Note
    letter = midstr.split('-')[0].upper()
    for note in Notes:
        for form in note:
            if letter.upper() == form:
                answer = i
                break;
        i += 1
    #Octave
    answer += (int(midstr[-1]))*12
    return answer
票数 1
EN

Stack Overflow用户

发布于 2019-08-21 16:13:11

代码语言:javascript
复制
NOTES_FLAT = ['C', 'Db', 'D', 'Eb', 'E', 'F', 'Gb', 'G', 'Ab', 'A', 'Bb', 'B']
NOTES_SHARP = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B']

def NoteToMidi(KeyOctave):
    # KeyOctave is formatted like 'C#3'
    key = KeyOctave[:-1]  # eg C, Db
    octave = KeyOctave[-1]   # eg 3, 4
    answer = -1

    try:
        if 'b' in key:
            pos = NOTES_FLAT.index(key)
        else:
            pos = NOTES_SHARP.index(key)
    except:
        print('The key is not valid', key)
        return answer

    answer += pos + 12 * (int(octave) + 1) + 1
    return answer
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13926280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档