955|6

330

帖子

5

TA的资源

纯净的硅(中级)

楼主
 

【得捷电子Follow me第3期】任务3-2:控制蜂鸣器播放音乐:迷你播放器 [复制链接]

  本帖最后由 HonestQiao 于 2023-11-20 22:13 编辑

之前分享了一篇 【得捷电子Follow me第3期】任务3:控制蜂鸣器播放音乐(播放小星星),可以驱动蜂鸣器播放音乐了。

不过能够播放的音色,较为单一,不够Cool,下面再分享一篇,可以播放更丰富的音色的音乐。

 

一、buzzer_music驱动

驱动蜂鸣器播放音乐,核心就是频率:

可以自己编写频率对照表,来进行驱动。也可以使用他人分享的库,进行驱动。

链接已隐藏,如需查看请登录或者注册
 提供了一个库,可以播放较为丰富的音符。

这个核心库文件为 

链接已隐藏,如需查看请登录或者注册
,具体内容如下:

"""
Micropython (Raspberry Pi Pico)
Plays music written on onlinesequencer.net through a passive piezo buzzer.
Uses fast arpeggios with a single buzzer to simulate polyphony
Also supports multiple buzzers at once for real polyphony
https://github.com/james1236/buzzer_music
"""

from machine import Pin, PWM
from math import ceil

tones = {
    'C0':16,
    'C#0':17,
    'D0':18,
    'D#0':19,
    'E0':21,
    'F0':22,
    'F#0':23,
    'G0':24,
    'G#0':26,
    'A0':28,
    'A#0':29,
    'B0':31,
    'C1':33,
    'C#1':35,
    'D1':37,
    'D#1':39,
    'E1':41,
    'F1':44,
    'F#1':46,
    'G1':49,
    'G#1':52,
    'A1':55,
    'A#1':58,
    'B1':62,
    'C2':65,
    'C#2':69,
    'D2':73,
    'D#2':78,
    'E2':82,
    'F2':87,
    'F#2':92,
    'G2':98,
    'G#2':104,
    'A2':110,
    'A#2':117,
    'B2':123,
    'C3':131,
    'C#3':139,
    'D3':147,
    'D#3':156,
    'E3':165,
    'F3':175,
    'F#3':185,
    'G3':196,
    'G#3':208,
    'A3':220,
    'A#3':233,
    'B3':247,
    'C4':262,
    'C#4':277,
    'D4':294,
    'D#4':311,
    'E4':330,
    'F4':349,
    'F#4':370,
    'G4':392,
    'G#4':415,
    'A4':440,
    'A#4':466,
    'B4':494,
    'C5':523,
    'C#5':554,
    'D5':587,
    'D#5':622,
    'E5':659,
    'F5':698,
    'F#5':740,
    'G5':784,
    'G#5':831,
    'A5':880,
    'A#5':932,
    'B5':988,
    'C6':1047,
    'C#6':1109,
    'D6':1175,
    'D#6':1245,
    'E6':1319,
    'F6':1397,
    'F#6':1480,
    'G6':1568,
    'G#6':1661,
    'A6':1760,
    'A#6':1865,
    'B6':1976,
    'C7':2093,
    'C#7':2217,
    'D7':2349,
    'D#7':2489,
    'E7':2637,
    'F7':2794,
    'F#7':2960,
    'G7':3136,
    'G#7':3322,
    'A7':3520,
    'A#7':3729,
    'B7':3951,
    'C8':4186,
    'C#8':4435,
    'D8':4699,
    'D#8':4978,
    'E8':5274,
    'F8':5588,
    'F#8':5920,
    'G8':6272,
    'G#8':6645,
    'A8':7040,
    'A#8':7459,
    'B8':7902,
    'C9':8372,
    'C#9':8870,
    'D9':9397,
    'D#9':9956,
    'E9':10548,
    'F9':11175,
    'F#9':11840,
    'G9':12544,
    'G#9':13290,
    'A9':14080,
    'A#9':14917,
    'B9':15804
}

#Time, Note, Duration, Instrument (onlinesequencer.net schematic format)
#0 D4 8 0;0 D5 8 0;0 G4 8 0;8 C5 2 0;10 B4 2 0;12 G4 2 0;14 F4 1 0;15 G4 17 0;16 D4 8 0;24 C4 8 0

class music:
    def __init__(self, songString='0 D4 8 0', looping=True, tempo=3, duty=2512, pin=None, pins=[Pin(0)]):
        self.tempo = tempo
        self.song = songString
        self.looping = looping
        self.duty = duty
        
        self.stopped = False
        
        self.timer = -1
        self.beat = -1
        self.arpnote = 0
        
        self.pwms = []
        
        if (not (pin is None)):
            pins = [pin]
        self.pins = pins
        for pin in pins:
            self.pwms.append(PWM(pin))
        
        self.notes = []

        self.playingNotes = []
        self.playingDurations = []


        #Find the end of the song
        self.end = 0
        splitSong = self.song.split(";")
        for note in splitSong:
            snote = note.split(" ")
            testEnd = round(float(snote[0])) + ceil(float(snote[2]))
            if (testEnd > self.end):
                self.end = testEnd
                
        #Create empty song structure
        while (self.end > len(self.notes)):
            self.notes.append(None)

        #Populate song structure with the notes
        for note in splitSong:
            snote = note.split(" ")
            beat = round(float(snote[0]));
            
            if (self.notes[beat] == None):
                self.notes[beat] = []
            self.notes[beat].append([snote[1],ceil(float(snote[2]))]) #Note, Duration


        #Round up end of song to nearest bar
        self.end = ceil(self.end / 8) * 8
    
    def stop(self):
        for pwm in self.pwms:
            pwm.deinit()
        self.stopped = True

    def restart(self):
        self.beat = -1
        self.timer = 0
        self.stop()
        self.pwms = []
        for pin in self.pins:
            self.pwms.append(PWM(pin))
        self.stopped = False

    def resume(self):
        self.stop()
        self.pwms = []
        for pin in self.pins:
            self.pwms.append(PWM(pin))
        self.stopped = False

    def tick(self):
        if (not self.stopped):
            self.timer = self.timer + 1
            
            #Loop
            if (self.timer % (self.tempo * self.end) == 0 and (not (self.timer == 0))):
                if (not self.looping):
                    self.stop()
                    return False
                self.beat = -1
                self.timer = 0
            
            #On Beat
            if (self.timer % self.tempo == 0):
                self.beat = self.beat + 1

                #Remove expired notes from playing list
                i = 0
                while (i < len(self.playingDurations)):
                    self.playingDurations[i] = self.playingDurations[i] - 1
                    if (self.playingDurations[i] <= 0):
                        self.playingNotes.pop(i)
                        self.playingDurations.pop(i)
                    else:
                        i = i + 1
                        
                #Add new notes and their durations to the playing list
                
                """
                #Old method runs for every note, slow to process on every beat and causes noticeable delay
                ssong = song.split(";")
                for note in ssong:
                    snote = note.split(" ")
                    if int(snote[0]) == beat:
                        playingNotes.append(snote[1])
                        playingDurations.append(int(snote[2]))
                """
                
                if (self.beat < len(self.notes)):
                    if (self.notes[self.beat] != None):
                        for note in self.notes[self.beat]:
                            self.playingNotes.append(note[0])
                            self.playingDurations.append(note[1])
                
                #Only need to run these checks on beats
                i = 0
                for pwm in self.pwms:
                    if (i >= len(self.playingNotes)):
                        if hasattr(pwm, 'duty_u16'):
                            pwm.duty_u16(0)
                        else:
                            pwm.duty(0)
                    else:
                        #Play note
                        if hasattr(pwm, 'duty_u16'):
                            pwm.duty_u16(self.duty)
                        else:
                            pwm.duty(self.duty)
                        pwm.freq(tones[self.playingNotes[i]])
                    i = i + 1
            

            #Play arp of all playing notes
            if (len(self.playingNotes) > len(self.pwms)):
                p = self.pwms[len(self.pwms)-1];
                if hasattr(p, 'duty_u16'):
                    p.duty_u16(self.duty)
                else:
                    p.duty(self.duty)
                
                if (self.arpnote > len(self.playingNotes)-len(self.pwms)):
                    self.arpnote = 0
                self.pwms[len(self.pwms)-1].freq(tones[self.playingNotes[self.arpnote+(len(self.pwms)-1)]])
                self.arpnote = self.arpnote + 1
                
            return True
        else:
            return False

在上述代码中,tones定义了可以被播放的音符,非常丰富。

 

 

二、播放音乐

这个库可以播放的音乐,可以从 Online Sequencer 下载。

Online Sequencer 成立于 2013 年,是外网知名度较高的 MIDI 创作分享网站,截止于 2022 年 4 月 2 日已有 2567868 个 MIDI 被记录在此网站[1],可以在此网站导入 MIDI 文件,得到对应的信息。

 

例如:

网址:https://onlinesequencer.net/195547 提供音频信息如下:

   

 

全选好,copy处理的信息如下:

Online Sequencer:610557:0 A#4 1 1;2 F5 1 1;4 D#5 1 1;8 D5 1 1;11 D5 1 1;6 A#4 1 1;14 D#5 1 1;18 A#4 1 1;20 D#5 1 1;22 A#4 1 1;24 D5 1 1;27 D5 1 1;30 D#5 1 1;32 A#4 1 1;34 F5 1 1;36 D#5 1 1;38 A#4 1 1;40 D5 1 1;43 D5 1 1;46 D#5 1 1;50 A#4 1 1;52 D#5 1 1;54 G5 1 1;56 F5 1 1;59 D#5 1 1;62 F5 1 1;64 A#4 1 1;66 F5 1 1;68 D#5 1 1;70 A#4 1 1;72 D5 1 1;75 D5 1 1;78 D#5 1 1;82 A#4 1 1;84 D#5 1 1;86 A#4 1 1;88 D5 1 1;91 D5 1 1;94 D#5 1 1;96 A#4 1 1;100 D#5 1 1;102 A#4 1 1;104 D5 1 1;107 D5 1 1;110 D#5 1 1;114 A#4 1 1;116 D#5 1 1;118 G5 1 1;120 F5 1 1;123 D#5 1 1;126 F5 1 1;98 F5 1 1;:

去掉头部和尾部,得到Python代码:

song = '0 A#4 1 1;2 F5 1 1;4 D#5 1 1;8 D5 1 1;11 D5 1 1;6 A#4 1 1;14 D#5 1 1;18 A#4 1 1;20 D#5 1 1;22 A#4 1 1;24 D5 1 1;27 D5 1 1;30 D#5 1 1;32 A#4 1 1;34 F5 1 1;36 D#5 1 1;38 A#4 1 1;40 D5 1 1;43 D5 1 1;46 D#5 1 1;50 A#4 1 1;52 D#5 1 1;54 G5 1 1;56 F5 1 1;59 D#5 1 1;62 F5 1 1;64 A#4 1 1;66 F5 1 1;68 D#5 1 1;70 A#4 1 1;72 D5 1 1;75 D5 1 1;78 D#5 1 1;82 A#4 1 1;84 D#5 1 1;86 A#4 1 1;88 D5 1 1;91 D5 1 1;94 D#5 1 1;96 A#4 1 1;100 D#5 1 1;102 A#4 1 1;104 D5 1 1;107 D5 1 1;110 D#5 1 1;114 A#4 1 1;116 D#5 1 1;118 G5 1 1;120 F5 1 1;123 D#5 1 1;126 F5 1 1;98 F5 1 1'

 

然后,使用下面的代码调用buzzer_music播放:

from machine import Pin
from buzzer_music import music
from time import sleep

# 音乐定义
song = '0 A#4 1 1;2 F5 1 1;4 D#5 1 1;8 D5 1 1;11 D5 1 1;6 A#4 1 1;14 D#5 1 1;18 A#4 1 1;20 D#5 1 1;22 A#4 1 1;24 D5 1 1;27 D5 1 1;30 D#5 1 1;32 A#4 1 1;34 F5 1 1;36 D#5 1 1;38 A#4 1 1;40 D5 1 1;43 D5 1 1;46 D#5 1 1;50 A#4 1 1;52 D#5 1 1;54 G5 1 1;56 F5 1 1;59 D#5 1 1;62 F5 1 1;64 A#4 1 1;66 F5 1 1;68 D#5 1 1;70 A#4 1 1;72 D5 1 1;75 D5 1 1;78 D#5 1 1;82 A#4 1 1;84 D#5 1 1;86 A#4 1 1;88 D5 1 1;91 D5 1 1;94 D#5 1 1;96 A#4 1 1;100 D#5 1 1;102 A#4 1 1;104 D5 1 1;107 D5 1 1;110 D#5 1 1;114 A#4 1 1;116 D#5 1 1;118 G5 1 1;120 F5 1 1;123 D#5 1 1;126 F5 1 1;98 F5 1 1'


# 设置A3(GPIO 5)口为IO输出,然后通过PWM控制无缘蜂鸣器发声
mySong = music(song, pins=[Pin(5)])

while True:
    print(mySong.tick())
    sleep(0.04)

这个库还可以驱动多个蜂鸣器,方法也很简单:

from machine import Pin
from buzzer_music import music
from time import sleep

# 音乐定义
song = '0 A#4 1 1;2 F5 1 1;4 D#5 1 1;8 D5 1 1;11 D5 1 1;6 A#4 1 1;14 D#5 1 1;18 A#4 1 1;20 D#5 1 1;22 A#4 1 1;24 D5 1 1;27 D5 1 1;30 D#5 1 1;32 A#4 1 1;34 F5 1 1;36 D#5 1 1;38 A#4 1 1;40 D5 1 1;43 D5 1 1;46 D#5 1 1;50 A#4 1 1;52 D#5 1 1;54 G5 1 1;56 F5 1 1;59 D#5 1 1;62 F5 1 1;64 A#4 1 1;66 F5 1 1;68 D#5 1 1;70 A#4 1 1;72 D5 1 1;75 D5 1 1;78 D#5 1 1;82 A#4 1 1;84 D#5 1 1;86 A#4 1 1;88 D5 1 1;91 D5 1 1;94 D#5 1 1;96 A#4 1 1;100 D#5 1 1;102 A#4 1 1;104 D5 1 1;107 D5 1 1;110 D#5 1 1;114 A#4 1 1;116 D#5 1 1;118 G5 1 1;120 F5 1 1;123 D#5 1 1;126 F5 1 1;98 F5 1 1'


# 2个蜂鸣器
mySong = music(song, pins=[Pin(5),Pin(4)])

while True:
    print(mySong.tick())
    sleep(0.04)

 

三、迷你播放器

将上面的程序,结合之前分享的  【得捷电子Follow me第3期】任务2:驱动扩展板上的OLED屏幕(字符、中文、仪表、诗词) ,可以制作一个建议的模拟播放器,代码如下:

songs.py

songs = []

#    https://onlinesequencer.net/195547
song = '0 A#4 1 1;2 F5 1 1;4 D#5 1 1;8 D5 1 1;11 D5 1 1;6 A#4 1 1;14 D#5 1 1;18 A#4 1 1;20 D#5 1 1;22 A#4 1 1;24 D5 1 1;27 D5 1 1;30 D#5 1 1;32 A#4 1 1;34 F5 1 1;36 D#5 1 1;38 A#4 1 1;40 D5 1 1;43 D5 1 1;46 D#5 1 1;50 A#4 1 1;52 D#5 1 1;54 G5 1 1;56 F5 1 1;59 D#5 1 1;62 F5 1 1;64 A#4 1 1;66 F5 1 1;68 D#5 1 1;70 A#4 1 1;72 D5 1 1;75 D5 1 1;78 D#5 1 1;82 A#4 1 1;84 D#5 1 1;86 A#4 1 1;88 D5 1 1;91 D5 1 1;94 D#5 1 1;96 A#4 1 1;100 D#5 1 1;102 A#4 1 1;104 D5 1 1;107 D5 1 1;110 D#5 1 1;114 A#4 1 1;116 D#5 1 1;118 G5 1 1;120 F5 1 1;123 D#5 1 1;126 F5 1 1;98 F5 1 1'
songs.append(song)
#    https://onlinesequencer.net/1864273
song = '0 D5 4 14;4 A5 4 14;8 C6 4 14;12 B5 4 14;16 G5 2 14;18 F5 2 14;20 E5 2 14;22 F5 2 14;24 G5 8 14;4 E5 8 16;4 C5 8 16;4 F4 8 16;12 D5 8 16;12 B4 8 16;12 E4 8 16;20 C5 8 16;20 A4 8 16;20 D4 8 16;0 E4 4 16;0 B4 4 16;28 E4 4 16;28 B4 4 16'
songs.append(song)
#    https://onlinesequencer.net/1864297 - Tetris
song = '0 E3 1 0;2 E4 1 0;4 E3 1 0;6 E4 1 0;8 E3 1 0;10 E4 1 0;12 E3 1 0;14 E4 1 0;16 A3 1 0;18 A4 1 0;20 A3 1 0;22 A4 1 0;24 A3 1 0;26 A4 1 0;28 A3 1 0;30 A4 1 0;32 G#3 1 0;34 G#4 1 0;36 G#3 1 0;38 G#4 1 0;40 E3 1 0;42 E4 1 0;44 E3 1 0;46 E4 1 0;48 A3 1 0;50 A4 1 0;52 A3 1 0;54 A4 1 0;56 A3 1 0;58 B3 1 0;60 C4 1 0;62 D4 1 0;64 D3 1 0;66 D4 1 0;68 D3 1 0;70 D4 1 0;72 D3 1 0;74 D4 1 0;76 D3 1 0;78 D4 1 0;80 C3 1 0;82 C4 1 0;84 C3 1 0;86 C4 1 0;88 C3 1 0;90 C4 1 0;92 C3 1 0;94 C4 1 0;96 G2 1 0;98 G3 1 0;100 G2 1 0;102 G3 1 0;104 E3 1 0;106 E4 1 0;108 E3 1 0;110 E4 1 0;114 A4 1 0;112 A3 1 0;116 A3 1 0;118 A4 1 0;120 A3 1 0;122 A4 1 0;124 A3 1 0;0 E6 1 1;4 B5 1 1;6 C6 1 1;8 D6 1 1;10 E6 1 1;11 D6 1 1;12 C6 1 1;14 B5 1 1;0 E5 1 6;4 B4 1 6;6 C5 1 6;8 D5 1 6;10 E5 1 6;11 D5 1 6;12 C5 1 6;14 B4 1 6;16 A5 1 1;20 A5 1 1;22 C6 1 1;24 E6 1 1;28 D6 1 1;30 C6 1 1;32 B5 1 1;36 B5 1 1;36 B5 1 1;37 B5 1 1;38 C6 1 1;40 D6 1 1;44 E6 1 1;48 C6 1 1;52 A5 1 1;56 A5 1 1;20 A4 1 6;16 A4 1 6;22 C5 1 6;24 E5 1 6;28 D5 1 6;30 C5 1 6;32 B4 1 6;36 B4 1 6;37 B4 1 6;38 C5 1 6;40 D5 1 6;44 E5 1 6;48 C5 1 6;52 A4 1 6;56 A4 1 6;64 D5 1 6;64 D6 1 1;68 D6 1 1;70 F6 1 1;72 A6 1 1;76 G6 1 1;78 F6 1 1;80 E6 1 1;84 E6 1 1;86 C6 1 1;88 E6 1 1;92 D6 1 1;94 C6 1 1;96 B5 1 1;100 B5 1 1;101 B5 1 1;102 C6 1 1;104 D6 1 1;108 E6 1 1;112 C6 1 1;116 A5 1 1;120 A5 1 1;72 A5 1 6;80 E5 1 6;68 D5 1 7;70 F5 1 7;76 G5 1 7;84 E5 1 7;78 F5 1 7;86 C5 1 7;88 E5 1 6;96 B4 1 6;104 D5 1 6;112 C5 1 6;120 A4 1 6;92 D5 1 7;94 C5 1 7;100 B4 1 7;101 B4 1 7;102 C5 1 7;108 E5 1 7;116 A4 1 7'
songs.append(song)
#    https://onlinesequencer.net/1210132
song = '4 C#5 1 0;8 D#5 1 0;12 C5 1 0;16 C#5 1 0;18 C5 1 0;20 A#4 1 0;22 C5 1 0;24 G#4 1 0;30 G#4 1 0;31 A4 1 0;32 A#4 1 0;36 C#5 1 0;40 A#4 1 0;42 A#5 1 0;44 G#5 1 0;46 F#5 1 0;48 F5 1 0;50 F#5 1 0;52 G#5 1 0;54 F5 1 0;56 D#5 1 0;0 F5 1 0;68 C#5 1 0;72 D#5 1 0;76 C5 1 0;80 C#5 1 0;82 C5 1 0;84 A#4 1 0;86 C5 1 0;88 G#4 1 0;94 G#4 1 0;95 A4 1 0;96 A#4 1 0;100 C#5 1 0;104 A#4 1 0;106 A#5 1 0;108 G#5 1 0;110 F#5 1 0;64 F5 1 0;112 G#5 1 0;114 A#5 1 0;116 C6 1 0;118 C#6 1 0;120 D#6 1 0;128 C#6 1 0;134 F6 1 0;140 C#6 1 0;144 C6 1 0;150 D#6 1 0;156 C6 1 0;158 G#5 1 0;159 A5 1 0;160 A#5 1 0;166 C#6 1 0;172 A#5 1 0;176 C6 1 0;180 D#6 1 0;182 G#5 1 0;184 A#5 1 0;186 B5 1 0;188 C6 1 0;192 C#6 1 0;198 F6 1 0;204 C#6 1 0;208 C6 1 0;214 D#6 1 0;220 C6 1 0;222 G#5 1 0;223 A5 1 0;224 A#5 1 0;230 C#6 1 0;236 A#5 1 0;240 C6 1 0;244 D#6 1 0;246 F6 1 0;248 D#6 1 0;250 C#6 1 0;252 C6 1 0;254 G#5 1 0'
songs.append(song)
#    https://onlinesequencer.net/1327293
song = '2 A5 1 4;1 B4 1 4;3 A5 1 4;4 G5 1 4;5 G5 1 4;10 F#5 1 4;7 F#5 1 4;8 A4 1 4;9 A4 1 4;11 A4 1 4;13 C#6 1 4;14 B5 1 4;12 C#6 1 4;6 F#5 1 4;15 B4 2 4;18 A5 1 4;17 B4 1 4;19 A5 1 4;20 G5 1 4;21 G5 1 4;26 F#5 1 4;23 F#5 1 4;24 A4 1 4;25 A4 1 4;27 A4 1 4;29 C#6 1 4;30 B5 1 4;28 C#6 1 4;22 F#5 1 4;31 B4 2 4;34 A5 1 4;33 B4 1 4;35 A5 1 4;36 G5 1 4;37 G5 1 4;42 F#5 1 4;39 F#5 1 4;40 A4 1 4;41 A4 1 4;43 A4 1 4;45 C#6 1 4;46 B5 1 4;44 C#6 1 4;38 F#5 1 4;47 B4 2 4;50 A5 1 4;49 B4 1 4;51 A5 1 4;52 G5 1 4;53 G5 1 4;58 F#5 1 4;55 F#5 1 4;56 A4 1 4;57 A4 1 4;59 A4 1 4;61 C#6 1 4;62 B5 1 4;60 C#6 1 4;54 F#5 1 4;63 B4 2 4;98 A5 1 4;97 B4 1 4;99 A5 1 4;100 G5 1 4;101 G5 1 4;106 F#5 1 4;103 F#5 1 4;104 A4 1 4;105 A4 1 4;107 A4 1 4;109 C#6 1 4;110 B5 1 4;108 C#6 1 4;102 F#5 1 4;111 B4 2 4;114 A5 1 4;113 B4 1 4;115 A5 1 4;116 G5 1 4;117 G5 1 4;122 F#5 1 4;119 F#5 1 4;120 A4 1 4;121 A4 1 4;123 A4 1 4;125 C#6 1 4;126 B5 1 4;124 C#6 1 4;118 F#5 1 4;127 B4 2 4;66 A5 1 4;65 B4 1 4;67 A5 1 4;68 G5 1 4;69 G5 1 4;74 F#5 1 4;71 F#5 1 4;72 A4 1 4;73 A4 1 4;75 A4 1 4;77 C#6 1 4;78 B5 1 4;76 C#6 1 4;70 F#5 1 4;79 B4 2 4;82 A5 1 4;81 B4 1 4;83 A5 1 4;84 G5 1 4;85 G5 1 4;90 F#5 1 4;87 F#5 1 4;88 A4 1 4;89 A4 1 4;91 A4 1 4;93 C#6 1 4;94 B5 1 4;92 C#6 1 4;86 F#5 1 4;95 B4 2 4;129 B4 1 4;130 B4 1 4;131 B4 1 4;132 B4 1 4;135 B4 1 4;136 B4 1 4;137 B4 1 4;138 B4 1 4;145 D5 1 4;146 D5 1 4;147 D5 1 4;148 D5 1 4;151 E5 1 4;152 E5 1 4;153 E5 1 4;154 E5 1 4;161 B4 1 4;162 B4 1 4;163 B4 1 4;164 B4 1 4;167 B4 1 4;168 B4 1 4;169 B4 1 4;170 B4 1 4;177 D5 1 4;178 D5 1 4;179 D5 1 4;180 D5 1 4;183 E5 1 4;184 E5 1 4;185 E5 1 4;186 E5 1 4;193 B4 1 4;194 B4 1 4;195 B4 1 4;196 B4 1 4;199 B4 1 4;200 B4 1 4;201 B4 1 4;202 B4 1 4;209 D5 1 4;210 D5 1 4;211 D5 1 4;212 D5 1 4;215 E5 1 4;216 E5 1 4;217 E5 1 4;218 E5 1 4;194 D5 1 4;196 F#5 1 4;197 D5 1 4;198 B4 1 4;199 D5 1 4;200 A5 2 4;202 F#5 2 4;204 D5 1 4;205 E5 1 4;206 D5 1 4;207 D5 2 4;0 B4 1 4;209 B4 1 4;211 B4 1 4;212 F#5 1 4;213 D5 1 4;214 B4 1 4;215 D5 1 4;216 G5 2 4;218 F#5 2 4;220 A5 1 4;221 C#6 1 4;222 A5 1 4;223 F#5 2 4;225 B4 1 4;226 B4 1 4;227 B4 1 4;228 B4 1 4;231 B4 1 4;232 B4 1 4;233 B4 1 4;234 B4 1 4;241 D5 1 4;242 D5 1 4;243 D5 1 4;244 D5 1 4;226 D5 1 4;228 F#5 1 4;229 D5 1 4;230 B4 1 4;231 D5 1 4;232 A5 2 4;234 F#5 2 4;236 D5 1 4;237 E5 1 4;238 D5 1 4;239 D5 2 4;241 B4 1 4;243 B4 1 4;244 F#5 1 4;245 D5 1 4;246 B4 1 4;247 D5 1 4;248 G5 2 4;250 F#5 2 4;252 D5 2 4;254 E5 2 4;247 E5 1 4;248 E5 1 4;249 E5 1 4;250 E5 1 4;65 B2 1 4;66 B2 1 4;67 B2 1 4;68 B2 1 4;71 B2 1 4;72 B2 1 4;73 B2 1 4;74 B2 1 4;81 D3 1 4;82 D3 1 4;83 D3 1 4;84 D3 1 4;87 E3 1 4;88 E3 1 4;89 E3 1 4;90 E3 1 4;97 B2 1 4;98 B2 1 4;99 B2 1 4;100 B2 1 4;103 B2 1 4;104 B2 1 4;105 B2 1 4;106 B2 1 4;113 D3 1 4;114 D3 1 4;115 D3 1 4;116 D3 1 4;119 E3 1 4;120 E3 1 4;121 E3 1 4;122 E3 1 4;129 B2 1 4;130 B2 1 4;131 B2 1 4;132 B2 1 4;135 B2 1 4;136 B2 1 4;137 B2 1 4;138 B2 1 4;145 D3 1 4;146 D3 1 4;147 D3 1 4;148 D3 1 4;151 E3 1 4;152 E3 1 4;153 E3 1 4;154 E3 1 4;161 B2 1 4;162 B2 1 4;163 B2 1 4;164 B2 1 4;167 B2 1 4;168 B2 1 4;169 B2 1 4;170 B2 1 4;177 D3 1 4;178 D3 1 4;179 D3 1 4;180 D3 1 4;183 E3 1 4;184 E3 1 4;185 E3 1 4;186 E3 1 4;193 B2 1 4;194 B2 1 4;195 B2 1 4;196 B2 1 4;199 B2 1 4;200 B2 1 4;201 B2 1 4;202 B2 1 4;209 D3 1 4;210 D3 1 4;211 D3 1 4;212 D3 1 4;215 E3 1 4;216 E3 1 4;217 E3 1 4;218 E3 1 4;225 B2 1 4;226 B2 1 4;227 B2 1 4;228 B2 1 4;231 B2 1 4;232 B2 1 4;233 B2 1 4;241 D3 1 4;242 D3 1 4;243 D3 1 4;244 D3 1 4;247 E3 1 4;248 E3 1 4;249 E3 1 4;250 E3 1 4;256 E4 1 4;257 E4 1 4;260 E4 1 4;261 E4 1 4;264 D4 1 4;265 D4 1 4;268 D4 1 4;269 D4 1 4;272 E4 1 4;273 E4 1 4;276 E4 1 4;277 E4 1 4;262 F#5 1 4;266 D5 1 4;270 G5 1 4;274 E5 1 4;278 F#5 1 4;140 F#5 1 4;141 F#5 1 4;143 B4 1 4;156 G5 1 4;158 F#5 1 4;171 B4 1 4;172 F#5 1 4;173 B4 1 4;174 D5 1 4;187 B4 1 4;188 E5 1 4;190 B4 1 4;258 E5 1 4;280 B4 1 4;282 B4 1 4;288 E4 1 4;289 E4 1 4;292 D4 1 4;293 D4 1 4;296 D4 1 4;297 D4 1 4;300 E4 1 4;301 E4 1 4;304 E4 1 4;305 E4 1 4;290 F#5 1 4;294 D5 1 4;298 G5 1 4;302 E5 1 4;306 F#5 1 4;286 E5 1 4;308 B4 1 4;310 B4 1 4;256 F#2 1 4;257 F#2 1 4;258 F#2 1 4;259 F#2 1 4;260 F#2 1 4;261 F#2 1 4;262 F#2 1 4;263 F#2 1 4;264 B2 1 4;265 B2 1 4;266 B2 1 4;267 B2 1 4;268 B2 1 4;269 B2 1 4;270 B2 1 4;271 B2 1 4;272 F#2 1 4;273 F#2 1 4;274 F#2 1 4;275 F#2 1 4;276 F#2 1 4;277 F#2 1 4;278 F#2 1 4;279 F#2 1 4;280 B2 2 4;282 B2 2 4;286 F#2 1 4;287 F#2 1 4;288 F#2 1 4;289 F#2 1 4;290 F#2 1 4;291 F#2 1 4;292 B2 1 4;293 B2 1 4;294 B2 1 4;295 B2 1 4;296 B2 1 4;297 B2 1 4;298 B2 1 4;299 B2 1 4;300 D3 1 4;301 D3 1 4;302 D3 1 4;303 D3 1 4;304 D3 1 4;305 D3 1 4;306 D3 1 4;307 D3 1 4;308 D3 1 4;309 D3 1 4;310 D3 1 4;311 D3 1 4;312 D3 1 4;313 D3 1 4;314 D3 1 4;315 D3 1 4;300 G5 1 4;302 F#5 1 4;304 D5 1 4;300 G5 1 4;306 A4 1 4;308 G5 1 4;310 F#5 1 4;312 C#5 1 4;313 D5 1 4;314 E5 2 4;310 F#5 1 4;316 F#5 1 4;316 E4 1 4;317 E4 1 4;320 E4 1 4;321 E4 1 4;324 D4 1 4;325 D4 1 4;328 D4 1 4;329 D4 1 4;332 E4 1 4;333 E4 1 4;336 E4 1 4;337 E4 1 4;322 F#5 1 4;326 D5 1 4;330 G5 1 4;334 E5 1 4;338 F#5 1 4;318 E5 1 4;340 B4 1 4;342 B4 1 4;348 E4 1 4;349 E4 1 4;352 D4 1 4;353 D4 1 4;356 D4 1 4;357 D4 1 4;360 E4 1 4;361 E4 1 4;364 E4 1 4;365 E4 1 4;350 F#5 1 4;354 D5 1 4;358 G5 1 4;362 E5 1 4;346 E5 1 4;368 B4 1 4;370 B4 1 4;316 F#2 1 4;317 F#2 1 4;318 F#2 1 4;319 F#2 1 4;320 F#2 1 4;321 F#2 1 4;322 F#2 1 4;323 F#2 1 4;324 B2 1 4;325 B2 1 4;326 B2 1 4;327 B2 1 4;328 B2 1 4;329 B2 1 4;330 B2 1 4;331 B2 1 4;332 F#2 1 4;333 F#2 1 4;334 F#2 1 4;335 F#2 1 4;336 F#2 1 4;337 F#2 1 4;338 F#2 1 4;339 F#2 1 4;340 B2 2 4;342 B2 2 4;346 F#2 1 4;347 F#2 1 4;348 F#2 1 4;349 F#2 1 4;350 F#2 1 4;351 F#2 1 4;352 B2 1 4;353 B2 1 4;354 B2 1 4;355 B2 1 4;356 B2 1 4;357 B2 1 4;358 B2 1 4;359 B2 1 4;360 D3 1 4;361 D3 1 4;362 D3 1 4;363 D3 1 4;364 D3 1 4;365 D3 1 4;366 D3 1 4;367 D3 1 4;368 D3 1 4;369 D3 1 4;370 D3 1 4;371 D3 1 4;372 D3 1 4;373 D3 1 4;374 D3 1 4;375 D3 1 4;360 G5 1 4;362 F#5 1 4;364 D5 1 4;360 G5 1 4;366 A4 1 4;368 G5 1 4;372 C#5 1 4;373 D5 1 4;374 E5 2 4;376 F#5 1 4;361 G5 1 4;363 F#5 1 4;369 G5 1 4;366 F#5 1 4;371 B4 1 4;372 G5 1 4;373 G5 1 4;374 G5 1 4;375 G5 1 4;376 G5 1 4;377 G5 1 4;378 F#5 6 4;448 G5 1 4;449 F#5 5 4;456 G5 1 4;457 F#5 1 4;459 E5 1 4;460 D5 1 4;466 A4 1 4;467 A4 1 4;468 G5 1 4;469 G5 1 4;470 G5 1 4;471 G5 1 4;472 G5 1 4;473 G5 1 4;474 F#5 1 4;480 A5 1 4;482 G5 1 4;484 F#5 1 4;486 E5 1 4;489 F#5 1 4;490 D5 1 4;376 B3 1 4;377 B3 1 4;378 B3 1 4;379 B3 1 4;380 B3 1 4;381 B3 1 4;382 B3 1 4;383 B3 1 4;384 A3 1 4;385 A3 1 4;386 A3 1 4;387 A3 1 4;388 A3 1 4;389 A3 1 4;390 A3 1 4;391 A3 1 4;392 G3 1 4;393 G3 1 4;394 G3 1 4;395 G3 1 4;396 G3 1 4;397 G3 1 4;398 G3 1 4;399 G3 1 4;400 D3 1 4;401 D3 1 4;402 C#3 1 4;403 C#3 1 4;404 G3 1 4;405 G3 1 4;406 F#3 1 4;407 F#3 1 4;408 B3 1 4;409 B3 1 4;410 B3 1 4;411 B3 1 4;412 B3 1 4;413 B3 1 4;414 B3 1 4;415 B3 1 4;416 A3 1 4;417 A3 1 4;418 A3 1 4;419 A3 1 4;420 A3 1 4;421 A3 1 4;422 A3 1 4;423 A3 1 4;424 G3 1 4;425 G3 1 4;426 G3 1 4;427 G3 1 4;428 G3 1 4;429 G3 1 4;430 G3 1 4;431 G3 1 4;432 D3 1 4;433 D3 1 4;434 C#3 1 4;435 C#3 1 4;436 G3 1 4;437 G3 1 4;438 F#3 1 4;439 F#3 1 4;440 B3 1 4;441 B3 1 4;442 B3 1 4;443 B3 1 4;444 B3 1 4;445 B3 1 4;446 B3 1 4;447 B3 1 4;448 A3 1 4;449 A3 1 4;450 A3 1 4;451 A3 1 4;452 A3 1 4;453 A3 1 4;454 A3 1 4;455 A3 1 4;456 G3 1 4;457 G3 1 4;458 G3 1 4;459 G3 1 4;460 G3 1 4;461 G3 1 4;462 G3 1 4;463 G3 1 4;464 D3 1 4;465 D3 1 4;466 C#3 1 4;467 C#3 1 4;468 G3 1 4;469 G3 1 4;470 F#3 1 4;471 F#3 1 4;472 B3 1 4;473 B3 1 4;474 B3 1 4;475 B3 1 4;476 B3 1 4;477 B3 1 4;478 B3 1 4;479 B3 1 4;480 A3 1 4;481 A3 1 4;482 A3 1 4;483 A3 1 4;484 A3 1 4;485 A3 1 4;486 A3 1 4;487 A3 1 4;488 G3 1 4;489 G3 1 4;490 G3 1 4;491 G3 1 4;492 G3 1 4;493 G3 1 4;494 G3 1 4;495 G3 1 4;496 D3 1 4;497 D3 1 4;498 C#3 1 4;499 C#3 1 4;500 G3 1 4;501 G3 1 4;502 F#3 1 4;503 F#3 1 4;448 C#4 1 4;449 C#4 1 4;450 C#4 1 4;451 C#4 1 4;452 C#4 1 4;453 C#4 1 4;454 C#4 1 4;455 C#4 1 4;456 D4 1 4;457 D4 1 4;458 D4 1 4;459 D4 1 4;460 D4 1 4;461 D4 1 4;462 D4 1 4;463 D4 1 4;480 C#4 1 4;481 C#4 1 4;482 C#4 1 4;483 C#4 1 4;484 C#4 1 4;485 C#4 1 4;486 C#4 1 4;487 C#4 1 4;488 D4 1 4;489 D4 1 4;490 D4 1 4;491 D4 1 4;492 D4 1 4;493 D4 1 4;494 D4 1 4;495 D4 1 4;234 B2 1 4;522 E3 1 4;378 E5 1 4;382 F#5 1 4;382 E5 1 4;386 F#5 1 4;386 E5 1 4;390 C5 1 4;390 D5 1 4'
songs.append(song)
#    https://onlinesequencer.net/1536953
song = '0 B5 1 0;4 A5 1 0;14 E5 1 0;10 G#5 1 0;18 C#5 1 0;26 F#5 1 0;28 G#5 1 0;30 A5 1 0;32 B5 1 0;36 A5 1 0;0 E5 1 0;0 F#5 1 0;0 C#5 1 0;4 E5 1 0;4 F#5 1 0;4 C#5 1 0;0 F#3 1 0;14 F#3 1 0;18 F#4 1 0;20 A4 1 0;22 C#5 1 0;24 F#4 1 0;26 A4 1 0;28 C#5 1 0;30 A4 1 0;32 F#5 1 0;36 F#5 1 0;32 D5 1 0;36 D5 1 0;42 G#5 1 0;50 C#6 1 0;46 E5 1 0;32 D3 1 0;46 D3 1 0;56 B5 1 0;60 C#6 1 0;56 B6 1 0;60 C#7 1 0;60 C#7 1 0;50 D4 1 0;52 F#4 1 0;54 C#5 1 0;56 D4 1 0;58 F#4 1 0;60 C#5 1 0;62 D4 1 0;64 B6 1 0;68 A6 1 0;64 B6 1 0;68 A6 1 0;64 C#6 1 0;68 C#6 1 0;64 E6 1 0;64 F#6 1 0;68 E6 1 0;68 F#6 1 0;64 F#3 1 0;64 F#2 1 0;68 F#4 1 0;68 A4 1 0;68 C#5 1 0;68 E5 1 0;74 G#6 1 0;78 E6 1 0;82 C#6 1 0;74 G#6 1 0;78 E6 1 0;82 C#6 1 0;72 F#4 1 0;74 A4 1 0;74 C#5 1 0;74 E5 1 0;78 F#3 1 0;78 F#2 1 0;86 F#4 1 0;86 A4 1 0;86 C#5 1 0;86 F#5 1 0;92 E4 1 0;92 A4 1 0;92 C#5 1 0;90 F#6 1 0;92 G#6 1 0;94 A6 1 0;96 B6 1 0;100 A6 1 0;90 F#6 1 0;92 G#6 1 0;94 A6 1 0;96 B6 1 0;100 A6 1 0;96 D3 1 0;96 D2 1 0;100 F#4 1 0;100 A4 1 0;100 C#5 1 0;100 F#5 1 0;96 B5 1 0;96 D6 1 0;96 F#6 1 0;100 D6 1 0;100 F#6 1 0;100 A5 1 0;106 G#6 1 0;110 E6 1 0;114 C#7 1 0;106 G#5 1 0;110 E5 1 0;114 C#6 1 0;106 G#6 1 0;104 C#5 1 0;106 A4 1 0;110 D3 1 0;110 D2 1 0;116 D4 1 0;116 F#4 1 0;116 A4 1 0;116 C#5 1 0;134 G#5 1 0;132 A5 1 0;140 B5 1 0;142 A5 1 0;138 G#5 1 0;128 F#4 1 0;128 G#4 1 0;128 A4 1 0;128 C#5 1 0;140 F#4 1 0;142 A4 1 0;148 A5 1 0;150 G#5 1 0;156 B5 1 0;154 A5 1 0;144 F#4 1 0;144 A4 1 0;144 C#5 1 0;144 E5 1 0;154 E5 1 0;156 C#5 1 0;158 A4 1 0;160 F#4 1 0;160 D4 1 0;160 A4 1 0;160 C#5 1 0;164 A5 1 0;166 G#5 1 0;170 G#5 1 0;172 B5 1 0;174 A5 1 0;176 D4 1 0;176 E4 1 0;176 F#4 1 0;176 A4 1 0;178 B5 1 0;182 C#6 1 0;188 C#4 1 0;192 B3 1 0;192 D4 1 0;192 F#4 1 0;192 A4 1 0;196 A5 1 0;198 G#5 1 0;202 G#5 1 0;204 B5 1 0;206 A5 1 0;202 B3 1 0;204 D4 1 0;206 F#4 1 0;208 E4 1 0;208 C#4 1 0;208 G#4 1 0;208 B4 1 0;210 B5 1 0;214 C#6 1 0;218 E5 1 0;222 F#5 1 0;218 B4 1 0;220 G#4 1 0;222 E4 1 0;224 D4 1 0;224 F#4 1 0;224 A4 1 0;224 C#5 1 0;228 D4 1 0;230 F#4 1 0;232 A4 1 0;234 C#5 1 0;236 D5 1 0;238 F#5 1 0;240 G#5 1 0;244 A5 1 0;246 G#5 1 0;240 E4 1 0;240 F#4 1 0;240 G#4 1 0;240 B4 1 0;246 E5 1 0;252 B4 1 0;256 F#4 1 0;256 G#4 1 0;256 A4 1 0;256 C#5 1 0;260 F#4 1 0;262 F#3 1 0;262 F#3 1 0;260 A5 1 0;262 G#5 1 0;262 G#5 1 0;268 B5 1 0;266 G#5 1 0;270 A5 1 0;266 A3 1 0;268 C#4 1 0;270 F#4 1 0;268 B5 1 0;272 A4 1 0;272 C#5 1 0;272 E5 1 0;276 A5 1 0;278 G#5 1 0;282 A5 1 0;284 B5 1 0;276 F#4 1 0;276 F#3 1 0;282 E4 1 0;282 E3 1 0;288 D4 1 0;288 D3 1 0;292 A5 1 0;294 G#5 1 0;298 G#5 1 0;300 B5 1 0;302 A5 1 0;292 D4 1 0;292 F#4 1 0;292 A4 1 0;292 C#5 1 0;298 D4 1 0;300 F#4 1 0;300 A4 1 0;300 C#5 1 0;302 D4 1 0;306 B5 1 0;310 C#6 1 0;314 E5 1 0;304 F#4 1 0;304 C#5 1 0;308 D4 1 0;308 E4 1 0;308 F#4 1 0;308 A4 1 0;312 D4 1 0;314 C#4 1 0;312 D3 1 0;314 C#3 1 0;320 B3 1 0;320 B2 1 0;320 F#5 1 0;326 F#5 1 0;332 B5 1 0;334 G#5 1 0;326 B3 1 0;326 D4 1 0;326 F#4 1 0;326 A4 1 0;332 C#4 1 0;332 C#3 1 0;338 C#4 1 0;338 E4 1 0;338 G#4 1 0;338 B4 1 0;344 D4 1 0;344 D3 1 0;348 B3 1 0;348 D4 1 0;348 F#4 1 0;348 A4 1 0;348 F#5 1 0;344 D5 1 0;344 A4 1 0;344 F4 1 0;352 C#4 1 0;352 C#3 1 0;352 G#5 1 0;358 G#5 1 0;362 G#5 1 0;364 A5 1 0;366 B5 1 0;358 C#4 1 0;358 E4 1 0;358 G#4 1 0;358 B4 1 0;364 D4 1 0;364 D3 1 0;370 C6 1 0;374 D6 1 0;376 E6 1 0;380 B5 1 0;384 C#6 1 0;370 D4 1 0;370 F4 1 0;370 A4 1 0;370 C5 1 0;376 E4 1 0;376 E3 1 0;384 C#7 1 0;384 F#2 1 0;384 F#3 1 0;388 A4 1 0;388 C#5 1 0;388 E5 1 0;390 F#4 1 0;392 G#4 1 0;392 A4 1 0;392 C#5 1 0;394 F#4 1 0;394 G#4 1 0;394 A4 1 0;394 C#5 1 0;398 F#3 1 0;400 F#3 1 0;400 F#2 1 0;404 C#5 1 0;406 C#5 1 0;404 A4 1 0;404 G#4 1 0;405 F#4 1 0;406 A4 1 0;406 G#4 1 0;407 F#4 1 0;408 F#3 1 0;408 F#2 1 0;410 C#6 1 0;412 E6 1 0;414 C#6 1 0;410 C#5 1 0;412 E5 1 0;414 C#5 1 0;410 C#6 1 0;412 E6 1 0;414 C#6 1 0;416 G#6 1 0;418 F#6 1 0;416 G#5 1 0;418 F#5 1 0;416 G#6 1 0;418 F#6 1 0;420 F#6 1 0;422 E6 1 0;426 F#6 1 0;430 G#6 1 0;434 A6 1 0;440 A6 1 0;442 G#6 1 0;444 B5 1 0;446 B5 1 0;440 E6 1 0;440 E6 1 0;416 F#3 1 0;416 F#2 1 0;416 F#2 1 0;420 F#4 1 0;422 A4 1 0;422 C#5 1 0;422 E5 1 0;426 A4 1 0;426 C#5 1 0;426 E5 1 0;428 F#4 1 0;430 F#3 1 0;430 F#2 1 0;430 F#2 1 0;434 F#4 1 0;436 A4 1 0;436 C#5 1 0;436 E5 1 0;440 A4 1 0;440 C#5 1 0;440 E5 1 0;442 F#4 1 0;444 G#4 1 0;444 A4 1 0;444 C#5 1 0;450 C#6 1 0;452 C#6 1 0;452 F#6 1 0;454 E6 1 0;458 F#6 1 0;462 G#6 1 0;466 A6 1 0;470 B6 1 0;472 C#7 1 0;474 A6 1 0;476 B6 1 0;478 F#6 1 0;448 F#3 1 0;448 F#2 1 0;448 F#2 1 0;452 F#4 1 0;454 A4 1 0;454 C#5 1 0;454 E5 1 0;458 E5 1 0;458 C#5 1 0;458 A4 1 0;460 F#4 1 0;462 F#3 1 0;462 F#2 1 0;462 F#2 1 0;466 F#4 1 0;468 A4 1 0;468 C#5 1 0;468 E5 1 0;472 A4 1 0;472 C#5 1 0;472 E5 1 0;476 F#4 1 0;476 G#4 1 0;476 A4 1 0;476 C#5 1 0;474 C#6 1 0;476 E6 1 0;478 C#6 1 0;480 B6 1 0;482 A6 1 0;480 B5 1 0;482 A5 1 0;480 B6 1 0;482 A6 1 0;484 F#6 1 0;486 E6 1 0;490 F#6 1 0;494 G#6 1 0;498 A6 1 0;506 F#6 1 0;508 B6 1 0;510 A6 1 0;508 B5 1 0;510 A5 1 0;506 F#5 1 0;506 F#6 1 0;508 B6 1 0;510 A6 1 0;500 A4 1 0;500 C#5 1 0;504 A4 1 0;504 C#5 1 0;480 D3 1 0;480 D2 1 0;480 D2 1 0;494 D3 1 0;494 D2 1 0;494 D2 1 0;484 D4 1 0;486 F#4 1 0;486 A4 1 0;486 C#5 1 0;490 F#4 1 0;490 A4 1 0;490 C#5 1 0;492 D4 1 0;498 D4 1 0;500 F#4 1 0;504 F#4 1 0;506 D4 1 0;508 E4 1 0;508 F#4 1 0;508 A4 1 0;512 D3 1 0;512 D2 1 0;512 D2 1 0;516 D4 1 0;518 F#4 1 0;518 A4 1 0;518 C#5 1 0;522 F#4 1 0;522 A4 1 0;522 C#5 1 0;524 D4 1 0;526 D3 1 0;526 D2 1 0;526 D2 1 0;530 D4 1 0;532 F#4 1 0;532 A4 1 0;532 C#5 1 0;536 F#4 1 0;536 A4 1 0;536 C#5 1 0;540 D4 1 0;540 E4 1 0;540 F#4 1 0;540 A4 1 0;516 F#6 1 0;518 E6 1 0;522 F#6 1 0;526 G#6 1 0;530 A6 1 0;534 B6 1 0;536 C#7 1 0;538 A6 1 0;540 B6 1 0;542 F#6 1 0;538 C#6 1 0;540 E6 1 0;542 C#6 1 0;544 G#6 1 0;546 F#6 1 0;544 G#6 1 0;546 F#6 1 0;544 G#5 1 0;546 F#5 1 0;548 F#6 1 0;550 E6 1 0;554 F#6 1 0;558 G#6 1 0;562 A6 1 0;568 A6 1 0;570 G#6 1 0;572 B5 1 0;574 B5 1 0;568 E6 1 0;568 E6 1 0;544 F#3 1 0;544 F#2 1 0;544 F#2 1 0;548 F#4 1 0;550 A4 1 0;550 C#5 1 0;550 E5 1 0;554 A4 1 0;554 C#5 1 0;554 E5 1 0;556 F#4 1 0;558 F#3 1 0;558 F#2 1 0;558 F#2 1 0;562 F#4 1 0;564 A4 1 0;564 C#5 1 0;564 E5 1 0;568 A4 1 0;568 C#5 1 0;568 E5 1 0;570 F#4 1 0;572 G#4 1 0;572 A4 1 0;572 C#5 1 0;578 C#6 1 0;580 C#6 1 0;598 B6 1 0;600 C#7 1 0;602 A6 1 0;604 B6 1 0;606 F#6 1 0;580 F#6 1 0;582 E6 1 0;586 F#6 1 0;590 G#6 1 0;594 A6 1 0;576 F#3 1 0;576 F#2 1 0;576 F#2 1 0;580 F#4 1 0;582 A4 1 0;582 C#5 1 0;582 E5 1 0;586 E5 1 0;586 C#5 1 0;586 A4 1 0;588 F#4 1 0;590 F#3 1 0;590 F#2 1 0;590 F#2 1 0;580 C#6 1 0;602 C#6 1 0;604 E6 1 0;606 C#6 1 0;594 F#4 1 0;596 A4 1 0;596 C#5 1 0;596 E5 1 0;600 A4 1 0;600 C#5 1 0;600 E5 1 0;604 F#4 1 0;604 G#4 1 0;604 A4 1 0;604 C#5 1 0;608 B6 1 0;610 A6 1 0;608 B6 1 0;610 A6 1 0;608 B5 1 0;610 A5 1 0;608 D3 1 0;608 D2 1 0;608 D2 1 0;612 D4 1 0;614 F#4 1 0;614 A4 1 0;614 C#5 1 0;618 F#4 1 0;618 A4 1 0;618 C#5 1 0;620 D4 1 0;622 D3 1 0;622 D2 1 0;622 D2 1 0;612 F#6 1 0;614 E6 1 0;618 F#6 1 0;622 G#6 1 0;626 A6 1 0;634 F#5 1 0;636 B5 1 0;638 A5 1 0;634 F#6 1 0;636 B6 1 0;638 A6 1 0;634 F#6 1 0;636 B6 1 0;638 A6 1 0;626 D4 1 0;628 F#4 1 0;628 A4 1 0;628 C#5 1 0;632 F#4 1 0;632 A4 1 0;632 C#5 1 0;634 D4 1 0;636 E4 1 0;636 F#4 1 0;636 A4 1 0;640 D3 1 0;640 D2 1 0;640 D2 1 0;644 D4 1 0;646 F#4 1 0;646 A4 1 0;646 C#5 1 0;650 F#4 1 0;650 A4 1 0;650 C#5 1 0;652 D4 1 0;654 D3 1 0;654 D2 1 0;654 D2 1 0;644 F#6 1 0;646 E6 1 0;650 F#6 1 0;654 G#6 1 0;658 A6 1 0;662 B6 1 0;664 C#7 1 0;666 A6 1 0;668 B6 1 0;670 F#6 1 0;658 D4 1 0;660 F#4 1 0;660 A4 1 0;660 C#5 1 0;664 D4 1 0;664 F#4 1 0;664 A4 1 0;664 C#5 1 0;668 E3 1 0;668 E2 1 0;668 E2 1 0;680 F#3 1 0;672 A6 1 0;676 A6 1 0;680 A6 1 0;672 A6 1 0;676 A6 1 0;680 A6 1 0;672 A5 1 0;676 A5 1 0;680 A5 1 0;672 C#6 1 0;672 E6 1 0;676 C#6 1 0;676 E6 1 0;680 C#6 1 0;680 E6 1 0;672 F#3 1 0;676 F#3 1 0;672 F#2 1 0;674 F#2 1 0;676 F#2 1 0;678 F#2 1 0;680 F#2 1 0;672 F#2 1 0;676 F#2 1 0;680 F#2 1 0;686 A5 1 0;686 C#6 1 0;686 E6 1 0;686 A6 1 0;686 A6 1 0;690 A5 1 0;690 C#6 1 0;690 E6 1 0;690 A6 1 0;694 A5 1 0;694 C#6 1 0;694 E6 1 0;694 A6 1 0;696 G#5 1 0;700 B5 1 0;696 G#6 1 0;700 B6 1 0;696 G#6 1 0;700 B6 1 0;682 A2 1 0;682 A3 1 0;684 C#4 1 0;684 C#3 1 0;684 C#3 1 0;686 F#3 1 0;686 F#4 1 0;696 C#6 1 0;696 E6 1 0;700 C#6 1 0;700 E6 1 0;690 F#3 1 0;692 F#3 1 0;694 F#3 1 0;696 E3 1 0;698 E3 1 0;700 E3 1 0;702 E3 1 0;692 F#3 1 0;692 F#4 1 0;696 E4 1 0;696 E3 1 0;700 E3 1 0;700 E4 1 0;686 F#3 1 0;704 A5 1 0;704 A6 1 0;704 A6 1 0;712 A6 1 0;718 A6 1 0;718 A6 1 0;712 A6 1 0;708 A6 1 0;708 A6 1 0;708 A5 1 0;712 A5 1 0;718 A5 1 0;704 C#6 1 0;704 E6 1 0;708 C#6 1 0;708 E6 1 0;712 C#6 1 0;712 E6 1 0;718 C#6 1 0;718 E6 1 0;704 D4 1 0;708 D4 1 0;712 D4 1 0;704 D3 1 0;704 D3 1 0;706 D3 1 0;708 D3 1 0;708 D3 1 0;710 D3 1 0;712 D3 1 0;712 D3 1 0;714 A3 1 0;714 A2 1 0;716 F#3 1 0;716 F#2 1 0;716 F#2 1 0;718 D2 1 0;718 D2 1 0;718 D3 1 0;722 D2 1 0;724 D2 1 0;724 D2 1 0;726 D2 1 0;728 E2 1 0;728 E2 1 0;730 E2 1 0;732 E2 1 0;732 E2 1 0;734 E2 1 0;722 D3 1 0;726 D3 1 0;728 E3 1 0;732 E3 1 0;722 A6 1 0;726 A6 1 0;728 G#6 1 0;732 B6 1 0;722 A5 1 0;726 A5 1 0;728 G#5 1 0;732 B5 1 0;722 C#6 1 0;722 E6 1 0;726 C#6 1 0;726 E6 1 0;728 C#6 1 0;728 E6 1 0;732 C#6 1 0;732 E6 1 0;736 F#2 1 0;736 F#2 1 0;738 F#2 1 0;740 F#2 1 0;740 F#2 1 0;742 F#2 1 0;744 F#2 1 0;744 F#2 1 0;736 F#3 1 0;740 F#3 1 0;744 F#3 1 0;746 A2 1 0;748 C#3 1 0;746 A3 1 0;748 C#4 1 0;748 C#3 1 0;750 E2 1 0;750 E3 1 0;750 E2 1 0;736 A6 1 0;740 A6 1 0;744 A6 1 0;750 A6 1 0;750 A6 1 0;744 A6 1 0;740 A6 1 0;736 A6 1 0;736 A5 1 0;740 A5 1 0;744 A5 1 0;750 A5 1 0;736 C#6 1 0;736 E6 1 0;740 C#6 1 0;740 E6 1 0;744 C#6 1 0;744 E6 1 0;750 C#6 1 0;750 E6 1 0;754 A6 1 0;758 A6 1 0;760 G#6 1 0;764 B6 1 0;768 A6 1 0;774 F#6 1 0;780 C#7 1 0;754 A6 1 0;758 A6 1 0;760 G#6 1 0;764 B6 1 0;768 A6 1 0;774 F#6 1 0;780 C#7 1 0;754 A5 1 0;758 A5 1 0;760 G#5 1 0;764 B5 1 0;768 A5 1 0;774 F#5 1 0;780 C#6 1 0;754 C#6 1 0;754 E6 1 0;758 C#6 1 0;758 E6 1 0;760 C#6 1 0;760 E6 1 0;764 C#6 1 0;764 E6 1 0;754 E2 1 0;756 E2 1 0;758 E2 1 0;760 E2 1 0;762 E2 1 0;756 E3 1 0;760 E3 1 0;756 E2 1 0;760 E2 1 0;764 A3 1 0;766 C#4 1 0;764 A2 1 0;766 C#3 1 0;764 A2 1 0;768 D3 1 0;768 D4 1 0;768 D3 1 0;768 D4 1 0;774 D4 1 0;774 D3 1 0;774 D3 1 0;774 D4 1 0;780 D3 1 0;780 D2 1 0;780 D2 1 0;780 D3 1 0;768 C#6 1 0;768 E6 1 0;774 D6 1 0;774 B5 1 0;780 F#6 1 0;780 A6 1 0;784 C2 1 8'
songs.append(song)
#    https://onlinesequencer.net/1087370 - Battle Music
song = '0 F4 1 0;0 G#4 1 0;0 C4 1 0;0 F3 1 0;0 F2 1 0;12 A#4 1 0;18 G4 1 0;12 G4 1 0;18 D#4 1 0;24 A#4 1 0;30 C5 1 0;24 F4 1 0;24 C#4 1 0;12 F3 1 0;18 F3 1 0;12 F2 1 0;18 F2 1 0;24 F2 1 0;24 F3 1 0;36 F3 1 0;36 F2 1 0;36 D#5 1 0;36 D#4 1 0;36 G4 1 0;36 A#4 1 0;48 G#4 1 0;48 C5 1 0;48 F4 1 0;48 C4 1 0;48 F3 1 0;48 F2 1 0;60 F2 1 0;66 F2 1 0;60 F3 1 0;66 F3 1 0;60 G#4 1 0;60 F4 1 0;66 D#4 1 0;66 G4 1 0;72 A#4 1 0;72 F3 1 0;72 F2 1 0;72 C#4 1 0;72 F4 1 0;84 F2 1 0;84 F3 1 0;84 E4 1 0;84 E5 1 0;90 G5 1 0;90 G4 1 0;84 A#4 1 0;90 A#4 1 0;96 F5 1 0;96 F6 1 0;96 G#5 1 0;96 C6 1 0;96 F2 1 0;96 F3 1 0;98 C4 1 0;98 G#4 1 0;99 F4 1 0;100 G#4 1 0;102 G#4 1 0;101 F4 1 0;103 F4 1 0;100 C4 1 0;102 C4 1 0;104 G#4 1 0;106 G#4 1 0;105 F4 1 0;107 F4 1 0;104 C4 1 0;106 C4 1 0;108 A#4 1 0;110 A#4 1 0;112 A#4 1 0;114 A#4 1 0;116 A#4 1 0;118 A#4 1 0;109 F4 1 0;111 F4 1 0;113 F4 1 0;115 F4 1 0;117 F4 1 0;119 F4 1 0;108 C#4 1 0;110 C#4 1 0;112 C#4 1 0;114 C#4 1 0;116 C#4 1 0;118 C#4 1 0;114 E5 1 0;114 E6 1 0;114 E6 1 0;120 G6 1 0;120 G5 1 0;120 A#5 1 0;120 C#6 1 0;120 C#5 1 0;122 C#5 1 0;124 C#5 1 0;126 C#5 1 0;128 C#5 1 0;130 C#5 1 0;120 F4 1 0;122 F4 1 0;124 F4 1 0;126 F4 1 0;128 F4 1 0;130 F4 1 0;121 A#4 1 0;123 A#4 1 0;125 A#4 1 0;127 A#4 1 0;129 A#4 1 0;131 A#4 1 0;132 C5 1 0;134 C5 1 0;136 C5 1 0;138 C5 1 0;140 C5 1 0;142 C5 1 0;132 F4 1 0;134 F4 1 0;136 F4 1 0;138 F4 1 0;140 F4 1 0;142 F4 1 0;133 G#4 1 0;135 G#4 1 0;137 G#4 1 0;139 G#4 1 0;141 G#4 1 0;143 G#4 1 0;138 F5 1 0;138 F6 1 0;144 G#6 1 0;144 F3 1 0;145 C4 1 0;146 G#4 1 0;146 C4 1 0;147 F4 1 0;148 G#4 1 0;149 F4 1 0;148 C4 1 0;150 G#4 1 0;152 G#4 1 0;154 G#4 1 0;151 F4 1 0;153 F4 1 0;155 F4 1 0;150 C4 1 0;152 C4 1 0;154 C4 1 0;144 G#5 1 0;144 C6 1 0;144 F6 1 0;156 C#4 1 0;156 A#4 1 0;158 A#4 1 0;160 A#4 1 0;162 A#4 1 0;164 A#4 1 0;166 A#4 1 0;157 F4 1 0;159 F4 1 0;161 F4 1 0;163 F4 1 0;165 F4 1 0;167 F4 1 0;158 C#4 1 0;160 C#4 1 0;162 C#4 1 0;164 C#4 1 0;166 C#4 1 0;156 G6 1 0;156 G5 1 0;162 G#6 1 0;162 G#5 1 0;168 A#6 1 0;168 A#5 1 0;168 C#5 1 0;170 C#5 1 0;172 C#5 1 0;174 C#5 1 0;176 C#5 1 0;178 C#5 1 0;168 F4 1 0;170 F4 1 0;172 F4 1 0;174 F4 1 0;176 F4 1 0;178 F4 1 0;169 A#4 1 0;171 A#4 1 0;173 A#4 1 0;175 A#4 1 0;177 A#4 1 0;179 A#4 1 0;180 C5 1 0;182 C5 1 0;184 C5 1 0;186 C5 1 0;188 C5 1 0;190 C5 1 0;180 F4 1 0;182 F4 1 0;184 F4 1 0;186 F4 1 0;188 F4 1 0;190 F4 1 0;181 G#4 1 0;183 G#4 1 0;185 G#4 1 0;187 G#4 1 0;189 G#4 1 0;191 G#4 1 0;168 C#6 1 0;168 F6 1 0;180 G5 1 0;180 G6 1 0;178 G#6 1 0;178 G#5 1 0;192 F3 1 0;192 F2 1 0;192 F2 1 0;198 C4 1 0;200 C4 1 0;202 C4 1 0;204 C#4 1 0;206 C#4 1 0;208 C#4 1 0;210 C#4 1 0;212 C#4 1 0;214 C#4 1 0;198 F4 1 0;200 F4 1 0;202 F4 1 0;204 F4 1 0;206 F4 1 0;208 F4 1 0;210 F4 1 0;212 F4 1 0;214 F4 1 0;198 G#4 1 0;200 G#4 1 0;202 G#4 1 0;204 A#4 1 0;206 A#4 1 0;208 A#4 1 0;210 A#4 1 0;212 A#4 1 0;214 A#4 1 0;192 F6 1 0;192 F5 1 0;192 G#5 1 0;192 C6 1 0;216 F3 1 0;216 F2 1 0;216 F2 1 0;198 F5 1 0;204 E5 1 0;210 G5 1 0;198 C5 1 0;204 C#5 1 0;210 C#5 1 0;210 E5 1 0;222 G#4 1 0;224 G#4 1 0;226 G#4 1 0;228 A#4 1 0;230 A#4 1 0;232 A#4 1 0;234 A#4 1 0;236 A#4 1 0;238 A#4 1 0;222 F4 1 0;224 F4 1 0;226 F4 1 0;228 F4 1 0;230 F4 1 0;232 F4 1 0;234 F4 1 0;236 F4 1 0;238 F4 1 0;222 C4 1 0;224 C4 1 0;226 C4 1 0;228 C#4 1 0;230 C#4 1 0;232 C#4 1 0;234 C#4 1 0;236 C#4 1 0;238 C#4 1 0;222 F5 1 0;222 C5 1 0;228 C#5 1 0;228 E5 1 0;228 G5 1 0;234 A#5 1 0;234 G5 1 0;234 E5 1 0;234 C#5 1 0;240 F3 1 0;240 F2 1 0;240 F2 1 0;246 C4 1 0;248 C4 1 0;250 C4 1 0;252 C#4 1 0;254 C#4 1 0;256 C#4 1 0;258 C#4 1 0;260 C#4 1 0;262 C#4 1 0;246 F4 1 0;248 F4 1 0;250 F4 1 0;252 F4 1 0;254 F4 1 0;256 F4 1 0;258 F4 1 0;260 F4 1 0;262 F4 1 0;246 G#4 1 0;248 G#4 1 0;250 G#4 1 0;252 A#4 1 0;254 A#4 1 0;256 A#4 1 0;258 A#4 1 0;260 A#4 1 0;262 A#4 1 0;246 F6 1 0;252 E6 1 0;258 G6 1 0;246 F5 1 0;252 E5 1 0;258 G5 1 0;246 G#5 1 0;246 C6 1 0;252 G5 1 0;252 A#5 1 0;258 A#5 1 0;258 C#6 1 0;264 F3 1 0;264 F2 1 0;264 F2 1 0;270 G#4 1 0;272 G#4 1 0;274 G#4 1 0;276 A#4 1 0;278 A#4 1 0;280 A#4 1 0;282 A#4 1 0;284 A#4 1 0;286 A#4 1 0;270 F4 1 0;272 F4 1 0;274 F4 1 0;276 F4 1 0;278 F4 1 0;280 F4 1 0;282 F4 1 0;284 F4 1 0;286 F4 1 0;270 C4 1 0;272 C4 1 0;274 C4 1 0;276 C#4 1 0;278 C#4 1 0;280 C#4 1 0;282 C#4 1 0;284 C#4 1 0;286 C#4 1 0;270 C7 1 0;270 C6 1 0;270 F6 1 0;270 G#6 1 0;276 A#6 1 0;282 G6 1 0;276 A#5 1 0;282 G5 1 0;276 C#6 1 0;276 F6 1 0;282 A#5 1 0;282 C#6 1 0;288 F5 1 0;288 F6 1 0;288 G#5 1 0;288 C6 1 0;288 F3 1 0;288 F2 1 0;290 G#4 1 0;291 F4 1 0;290 C4 1 0;292 C4 1 0;294 C4 1 0;296 C4 1 0;298 C4 1 0;293 F4 1 0;295 F4 1 0;297 F4 1 0;299 F4 1 0;292 G#4 1 0;294 G#4 1 0;296 G#4 1 0;298 G#4 1 0;300 G#4 1 0;302 G#4 1 0;304 G#4 1 0;306 G#4 1 0;308 G#4 1 0;310 G#4 1 0;301 F4 1 0;303 F4 1 0;305 F4 1 0;307 F4 1 0;309 F4 1 0;311 F4 1 0;300 C4 1 0;302 C4 1 0;304 C4 1 0;306 C4 1 0;308 C4 1 0;310 C4 1 0;312 C#4 1 0;312 A#4 1 0;314 A#4 1 0;316 A#4 1 0;318 A#4 1 0;320 A#4 1 0;322 A#4 1 0;324 A#4 1 0;326 A#4 1 0;328 A#4 1 0;330 A#4 1 0;332 A#4 1 0;334 A#4 1 0;313 F4 1 0;315 F4 1 0;317 F4 1 0;319 F4 1 0;321 F4 1 0;323 F4 1 0;325 F4 1 0;327 F4 1 0;329 F4 1 0;331 F4 1 0;333 F4 1 0;335 F4 1 0;314 C#4 1 0;316 C#4 1 0;318 C#4 1 0;320 C#4 1 0;322 C#4 1 0;324 C#4 1 0;326 C#4 1 0;328 C#4 1 0;330 C#4 1 0;332 C#4 1 0;334 C#4 1 0;312 G6 1 0;312 G5 1 0;312 A#5 1 0;312 C#6 1 0;324 A#6 1 0;324 A#5 1 0;324 C#6 1 0;324 F6 1 0;336 G#6 1 0;336 G#5 1 0;336 F3 1 0;337 C4 1 0;338 G#4 1 0;338 C4 1 0;339 F4 1 0;340 G#4 1 0;341 F4 1 0;340 C4 1 0;342 G#4 1 0;344 G#4 1 0;346 G#4 1 0;343 F4 1 0;345 F4 1 0;347 F4 1 0;342 C4 1 0;344 C4 1 0;346 C4 1 0;348 G#4 1 0;350 G#4 1 0;352 G#4 1 0;354 G#4 1 0;356 G#4 1 0;358 G#4 1 0;348 C4 1 0;350 C4 1 0;352 C4 1 0;354 C4 1 0;356 C4 1 0;358 C4 1 0;349 F4 1 0;351 F4 1 0;353 F4 1 0;355 F4 1 0;357 F4 1 0;359 F4 1 0;336 C6 1 0;336 F6 1 0;348 G6 1 0;354 G#6 1 0;348 G5 1 0;354 G#5 1 0;360 A#5 1 0;360 A#6 1 0;360 A#4 1 0;362 A#4 1 0;364 A#4 1 0;366 A#4 1 0;368 A#4 1 0;370 A#4 1 0;372 A#4 1 0;374 A#4 1 0;376 A#4 1 0;378 A#4 1 0;380 A#4 1 0;382 A#4 1 0;361 F4 1 0;363 F4 1 0;365 F4 1 0;367 F4 1 0;369 F4 1 0;371 F4 1 0;373 F4 1 0;375 F4 1 0;377 F4 1 0;379 F4 1 0;381 F4 1 0;383 F4 1 0;360 C#4 1 0;362 C#4 1 0;364 C#4 1 0;366 C#4 1 0;368 C#4 1 0;370 C#4 1 0;372 C#4 1 0;374 C#4 1 0;376 C#4 1 0;378 C#4 1 0;380 C#4 1 0;382 C#4 1 0;360 C#6 1 0;360 F6 1 0;372 G5 1 0;372 G6 1 0;378 E6 1 0;378 E5 1 0;384 F6 1 0;384 F5 1 0;384 G#5 1 0;384 C6 1 0;384 F2 1 0;384 F3 1 0;386 A#3 1 0;387 C4 1 0;388 A#3 1 0;390 F4 1 0;392 A#3 1 0;394 C4 1 0;396 F3 1 0;396 F2 1 0;398 A#3 1 0;399 C4 1 0;400 A#3 1 0;401 C4 1 0;402 F4 1 0;403 A#3 1 0;404 C4 1 0;405 F4 1 0;406 A#3 1 0;407 C4 1 0;408 G5 1 0;408 G6 1 0;408 A#5 1 0;408 C#6 1 0;408 F3 1 0;408 F2 1 0;410 A#3 1 0;411 C#4 1 0;412 A#3 1 0;413 C#4 1 0;414 G4 1 0;415 A#3 1 0;416 C#4 1 0;417 G4 1 0;418 A#3 1 0;419 C#4 1 0;420 G4 1 0;423 G4 1 0;426 G4 1 0;429 G4 1 0;421 A#3 1 0;422 C#4 1 0;424 A#3 1 0;425 C#4 1 0;427 A#3 1 0;428 C#4 1 0;430 A#3 1 0;431 C#4 1 0;420 A#5 1 0;420 A#6 1 0;426 C#6 1 0;426 C#7 1 0;420 C#6 1 0;420 F6 1 0;426 F6 1 0;426 A#6 1 0;384 F3 1 0;396 F3 1 0;408 F3 1 0;432 C7 1 0;432 C6 1 0;432 F6 1 0;432 G#6 1 0;432 F3 1 0;432 F2 1 0;434 A#3 1 0;435 C4 1 0;436 A#3 1 0;438 F4 1 0;440 A#3 1 0;442 C4 1 0;432 F3 1 0;444 F3 1 0;444 F3 1 0;444 F2 1 0;446 A#3 1 0;447 C4 1 0;448 A#3 1 0;449 C4 1 0;450 F4 1 0;451 A#3 1 0;452 C4 1 0;453 F4 1 0;454 A#3 1 0;455 C4 1 0;444 G6 1 0;444 G5 1 0;450 A#5 1 0;450 A#6 1 0;456 C6 1 0;456 C7 1 0;456 A#6 1 0;456 F6 1 0;456 F3 1 0;456 F2 1 0;456 F3 1 0;458 A#3 1 0;459 C#4 1 0;460 A#3 1 0;461 C#4 1 0;462 G4 1 0;463 A#3 1 0;465 G4 1 0;466 A#3 1 0;464 C#4 1 0;467 C#4 1 0;468 G4 1 0;471 G4 1 0;474 G4 1 0;477 G4 1 0;469 A#3 1 0;470 C#4 1 0;472 A#3 1 0;473 C#4 1 0;475 A#3 1 0;476 C#4 1 0;478 A#3 1 0;479 C#4 1 0;468 C#7 1 0;468 C#6 1 0;468 F6 1 0;468 A#6 1 0;474 C7 1 0;474 A#6 1 0;474 F6 1 0;474 C6 1 0;480 F3 1 0;480 F2 1 0;480 F5 1 0;480 F4 1 0;480 C5 1 0;488 G5 1 0;490 G#5 1 0;492 F5 1 0;492 F4 1 0;492 C#5 1 0;492 C#3 1 0;492 C#4 1 0;488 G4 1 0;490 G#4 1 0;500 G5 1 0;502 G#5 1 0;504 F5 1 0;504 F4 1 0;500 G4 1 0;502 G#4 1 0;504 B4 1 0;504 B3 1 0;504 B2 1 0;512 G5 1 0;514 G#5 1 0;516 F5 1 0;522 E5 1 0;512 G4 1 0;514 G#4 1 0;516 F4 1 0;522 E4 1 0;516 C5 1 0;516 C4 1 0;516 C3 1 0;522 C5 1 0;528 A#3 1 0;528 A#2 1 0;528 F4 1 0;528 F5 1 0;528 A#4 1 0;536 G5 1 0;538 G#5 1 0;540 F5 1 0;536 G4 1 0;538 G#4 1 0;540 F4 1 0;540 G#4 1 0;540 G#3 1 0;540 G#2 1 0;548 G4 1 0;550 G#4 1 0;552 F4 1 0;548 G5 1 0;550 G#5 1 0;552 F5 1 0;552 B4 1 0;552 B3 1 0;552 B2 1 0;560 G5 1 0;562 G#5 1 0;564 F5 1 0;570 E5 1 0;560 G4 1 0;562 G#4 1 0;564 F4 1 0;570 E4 1 0;564 C5 1 0;564 C4 1 0;564 C3 1 0;570 C5 1 0;576 F2 1 0;576 F3 1 0;578 F3 1 0;580 F3 1 0;582 F3 1 0;584 F3 1 0;586 F3 1 0;588 F3 1 0;590 F3 1 0;592 F3 1 0;594 F3 1 0;596 F3 1 0;598 F3 1 0;578 C4 1 0;580 C4 1 0;582 C4 1 0;584 C4 1 0;586 C4 1 0;588 C4 1 0;590 C4 1 0;592 C4 1 0;594 C4 1 0;596 C4 1 0;598 C4 1 0;576 C5 1 0;582 C#5 1 0;588 C5 1 0;576 F4 1 0;582 F4 1 0;588 F4 1 0;594 B4 1 0;594 F4 1 0;600 C5 1 0;606 C#5 1 0;612 C5 1 0;618 B4 1 0;600 F4 1 0;606 F4 1 0;612 F4 1 0;618 F4 1 0;602 C4 1 0;604 C4 1 0;606 C4 1 0;608 C4 1 0;610 C4 1 0;612 C4 1 0;614 C4 1 0;616 C4 1 0;618 C4 1 0;620 C4 1 0;622 C4 1 0;600 F3 1 0;602 F3 1 0;604 F3 1 0;606 F3 1 0;608 F3 1 0;610 F3 1 0;612 F3 1 0;614 F3 1 0;616 F3 1 0;618 F3 1 0;620 F3 1 0;622 F3 1 0;600 F2 1 0;624 F3 1 0;624 F2 1 0;626 C5 1 0;627 C#5 1 0;628 C5 1 0;626 F4 1 0;632 C5 1 0;633 C#5 1 0;634 C5 1 0;632 F4 1 0;630 F3 1 0;630 F2 1 0;648 F3 1 0;654 F3 1 0;648 F2 1 0;654 F2 1 0;650 C5 1 0;651 C#5 1 0;652 C5 1 0;650 F4 1 0;656 C5 1 0;657 C#5 1 0;658 C5 1 0;656 F4 1 0;672 C2 1 17'
songs.append(song)

 

主程序task_3_2.py代码如下:

# -*- coding: UTF-8 -*-

from machine import Pin
from buzzer_music import music
from songs import songs
from time import sleep
import time
import utime

from color_setup import ssd

from gui.core.nanogui import refresh
from gui.core.writer import CWriter
from gui.widgets.textbox import Textbox
from gui.widgets.label import Label
from gui.core.colors import *

# 字体调用
import gui.fonts.arial10 as arial10


PIN_BUZZER = 5
PIN_KEY = 3

key = Pin(PIN_KEY, Pin.IN, Pin.PULL_UP)    #引脚初始化为输入模式, 并取名为key

class bootsel:
    def pressed():
        return not key.value()

index = -1
status = False
mySong = None
bootsel_status = False
bootsel_time = 0
delay_time = 0.04

# 清屏
refresh(ssd, True)

# 显示输出
CWriter.set_textpos(ssd, 0, 0)
wri = CWriter(ssd, arial10, verbose=False)
wri.set_clip(True, True, False)
txt = Label(wri, 0, 20, "")

pargs = (13, 2, 124, 4)  # Row, Col, Width, nlines

tb = Textbox(wri, *pargs, clip=False)
#tb.append(content, ntrim = 100)

print("Start buzzer music player:")

while True:
    bootsel_status = bootsel.pressed()
    if bootsel_status:
        if bootsel_time == 0:
            bootsel_time = utime.ticks_ms()
    else:
        if bootsel_time>0:
            now_ticks_ms = utime.ticks_ms()
            if now_ticks_ms-bootsel_time>1000:
                print("bootsel 1s")
                print("skip, play next")
                if mySong:
                    mySong.stop()
                    mySong = None
                    status = False
                    sleep(1)
            elif now_ticks_ms-bootsel_time>100:
                print("bootsel 100ms")
                delay_time = delay_time - 0.01
                if delay_time < 0.01:
                    delay_time = 0.04
                print("delay_time = %0.2f" % delay_time)
            else:
                print("bootsel clear: %d-%d=%d" % (now_ticks_ms, bootsel_time, now_ticks_ms-bootsel_time))
            
            bootsel_time = 0
        
        
    if not status:
        index = index + 1
        if index>=len(songs):
            index = 0

        if mySong:
            mySong.stop()
            mySong = None
            sleep(3)
        print("play songs[%d]: %s" % (index, songs[index]))
        txt.value("play songs %d of %d" % (index+1, len(songs)))
        tb.clear()
        tb.append(songs[index][0:80], ntrim = 100)
        refresh(ssd)
        mySong = music(songs[index], pins=[Pin(PIN_BUZZER)], looping=False)

    status = mySong.tick()
    sleep(delay_time)

 

在上述程序中,运行后,会在屏幕上显示当前播放的音乐,如果长按扩展板上的按键,则会跳过当前音乐,进入下一首。

运行的具体效果如下:

 

视频:

4435_1700489409

 

四、总结

虽然用蜂鸣器播放音乐,只能比较简单,不过这么小小的简单功能,也可以有很不错玩法。

上面最后一个,是蜂鸣器+屏幕的简单结合,还可以在屏幕上动态展示当前播放的效果,或者加上多个蜂鸣器来个合奏。

如果你感性的话,赶紧多试试,找找有什么好玩的玩法。

 

 

最新回复

直接上来就贴代码,可以可以   详情 回复 发表于 2023-11-24 14:48
点赞 关注
 
 

回复
举报

7244

帖子

2

TA的资源

版主

沙发
 

可以直接用音频文件生成蜂鸣器的代码吗?

 
 
 

回复

1633

帖子

0

TA的资源

五彩晶圆(初级)

板凳
 
这个蜂鸣器是不是有源蜂鸣器?它和无源蜂鸣器的驱动有什么区别?

点评

有源的内置震荡源,使用简单,供电就响,但是发声频率固定了。 无源的,需要你用2-5KHZ的方波信号来驱动它,才可以使其鸣叫。 正是因为如此,无源的,你可以用不同频率的方波信号,来控制其发生的频率,从而能  详情 回复 发表于 2023-12-14 23:44
 
 
 

回复

755

帖子

5

TA的资源

纯净的硅(高级)

4
 

感谢楼主提供的技术分享,先收藏学习再发表个人意见,顶起来

 
 
 

回复

4856

帖子

3

TA的资源

版主

5
 

就喜欢这样的干货贴,很多实验还是需要详细步骤啊

 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 

直接上来就贴代码,可以可以

 
 
 

回复

330

帖子

5

TA的资源

纯净的硅(中级)

7
 
lkh747566933 发表于 2023-11-23 18:52 这个蜂鸣器是不是有源蜂鸣器?它和无源蜂鸣器的驱动有什么区别?

有源的内置震荡源,使用简单,供电就响,但是发声频率固定了。

无源的,需要你用2-5KHZ的方波信号来驱动它,才可以使其鸣叫。

正是因为如此,无源的,你可以用不同频率的方波信号,来控制其发生的频率,从而能够播放简单的音乐来。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表