""" Music buzzer Micropython library for the Music buzzer ======================================================= #Based on Author: qiren123(MIDI Music) 20220618 #Make changes to instantiation 20220622 #Increase level reversal selection 20220716 dahanzimin From the Mixly Team """ import time import math import struct normal_tone = { 'A1': 55, 'B1': 62, 'C1': 33, 'D1': 37, 'E1': 41, 'F1': 44, 'G1': 49, 'A2': 110, 'B2': 123, 'C2': 65, 'D2': 73, 'E2': 82, 'F2': 87, 'G2': 98, 'A3': 220, 'B3': 247, 'C3': 131, 'D3': 147, 'E3': 165, 'F3': 175, 'G3': 196, 'A4': 440, 'B4': 494, 'C4': 262, 'D4': 294, 'E4': 330, 'F4': 349, 'G4': 392, 'A5': 880, 'B5': 988, 'C5': 523, 'D5': 587, 'E5': 659, 'F5': 698, 'G5': 784, 'A6': 1760, 'B6': 1976, 'C6': 1047, 'D6': 1175, 'E6': 1319, 'F6': 1397, 'G6': 1568, 'A7': 3520, 'B7': 3951, 'C7': 2093, 'D7': 2349, 'E7': 2637, 'F7': 2794, 'G7': 3135, 'A8': 7040, 'B8': 7902, 'C8': 4186, 'D8': 4699, 'E8': 5274, 'F8': 5588, 'G8': 6271, 'A9': 14080, 'B9': 15804} Letter = 'ABCDEFG#R' class MIDI(): def __init__(self, i2s_bus, rate=22050): self.reset() self._rate = rate self.i2s_bus = i2s_bus def _wave(self, frequency): _period = self._rate // frequency _samples = bytearray() for i in range(_period): sample = 32768 + int((32767) * math.sin(2 * math.pi * i / _period)) _samples.extend(struct.pack("