当前位置:   article > 正文

将洛奇的MML乐谱转为beep(蜂鸣器)乐谱_歌谱怎么转换成蜂鸣器的声音

歌谱怎么转换成蜂鸣器的声音

最近对蜂鸣器音乐感兴趣,但是找不到乐谱,于是想把其他乐谱转为蜂鸣器乐谱。直接用MIDI转换很困难,因为MIDI一个音轨可以同时发出不同的音,所以我想到了用以前玩过的游戏中的乐谱(MML乐谱参考

本文完整源码

转换器制作

音高频率表

首先要知道每个音高对应的频率,按照十二平均律算,标准音高A4是440Hz,一个半音相差21/12倍,一个八度相差2倍

FREQ_TABLE = [[0 for scale in range(12)] for octave in range(9)]


def gen_freq_table():
    global FREQ_TABLE
    # A4标准音高
    FREQ_TABLE[4][9] = 440
    # 十二平均律
    for scale in range(8, -1, -1):
        FREQ_TABLE[4][scale] = FREQ_TABLE[4][scale + 1] / 2 ** (1 / 12)
    for scale in range(10, 12):
        FREQ_TABLE[4][scale] = FREQ_TABLE[4][scale - 1] * 2 ** (1 / 12)
    for octave in range(3, -1, -1):
        for scale in range(12):
            FREQ_TABLE[octave][scale] = FREQ_TABLE[octave + 1][scale] / 2
    for octave in range(5, 9):
        for scale in range(12):
            FREQ_TABLE[octave][scale] = FREQ_TABLE[octave - 1][scale] * 2
    for octave in range(9):
        for scale in range(12):
            FREQ_TABLE[octave][scale] = round(FREQ_TABLE[octave][scale])


gen_freq_table()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

生成表后直接硬编码即可

# 音程 -> 音阶 -> 频率,按十二平均律算
FREQ_TABLE = [
    [16, 17, 18, 19, 21, 22, 23, 24, 26, 28, 29, 31],  # C0~B0(未使用)
    [33, 35, 37, 39, 41, 44, 46, 49, 52, 55, 58, 62],  # C1~B1
    [65, 69, 73, 78, 82, 87, 92, 98, 104, 110, 117, 123],
    [131, 139, 147, 156, 165, 175, 185, 196, 208, 220, 233, 247],
    [262, 277, 294, 311, 330, 349, 370, 392, 415, 440, 466, 494],  # C4~B4
    [523, 554, 587, 622, 659, 698, 740, 784, 831, 880, 932, 988],
    [1047, 1109, 1175, 1245, 1319, 1397, 1480, 1568, 1661, 1760, 1865, 1976],
    [2093, 2217
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/248511
推荐阅读
相关标签
  

闽ICP备14008679号