Added a default website

This commit is contained in:
fls committed 2026-07-15 13:44:55 -03:00
1 parent d3d55f96f7
commit 1a8c9147b8
34 files changed
+2420

No files matched your search

+294
View File
@@ -0,0 +1,294 @@
---
author: "Flávio Schiavoni"
description:
---
# sudo apt install python3-MIDIUtil
from midiutil import MIDIFile
name = "Generate Midi"
keys = ['C','C#','D','D#','E','F','F#','G','G#','A','A#','B']
track = 0
time = 0 # In beats
channel = 0
semibreve = 4 # In beats
seminima = 1 # In beats
colcheia = 0.5 # In beats
volume = 100 # 0-127, as per the MIDI standard
tempo = 120 # In BPM
step = 48
def gerar_pedal(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Pedal")
for i, chord in enumerate(acordes):
pitch = keys.index(chord[:1],0) + step
if (chord[1:2] == '#'):
pitch = pitch + 1
if (chord[1:2] == 'b'):
pitch = pitch - 1
mf.addNote(track, channel, pitch, i*4 + 0, seminima, volume)
mf.addNote(track, channel, pitch, i*4 + 1, seminima, volume)
mf.addNote(track, channel, pitch, i*4 + 2, seminima, volume)
mf.addNote(track, channel, pitch, i*4 + 3, seminima, volume)
track = track + 1
def gerar_tonica(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Tonica")
for i, chord in enumerate(acordes):
pitch = keys.index(chord[:1],0) + step + 36
if (chord[1:2] == '#'):
pitch = pitch + 1
if (chord[1:2] == 'b'):
pitch = pitch - 1
print("Tônica: ", chord, pitch)
mf.addNote(track, channel, pitch, i*4, semibreve, volume)
track = track + 1
def gerar_quinta(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Quinta")
for i, chord in enumerate(acordes):
pitch = keys.index(chord[:1],0) + step + 36
if (chord[1:2] == '#'):
pitch = pitch + 1
if (chord[1:2] == 'b'):
pitch = pitch - 1
pitch = pitch + 7
print("Quinta: ", chord, pitch)
mf.addNote(track, channel, pitch, i*4, semibreve, volume)
track = track + 1
def gerar_terca(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Terca")
for i, chord in enumerate(acordes):
pitch = keys.index(chord[:1],0) + step + 36
if (chord[1:2] == '#'):
pitch = pitch + 1
if (chord[1:2] == 'b'):
pitch = pitch - 1
pitch = pitch + 4
if ("m" in chord):
pitch = pitch - 1
print("terça: ", chord, pitch)
mf.addNote(track, channel, pitch, i*4, semibreve, volume)
track = track + 1
def gerar_acordes(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "acordes")
for i, chord in enumerate(acordes):
pitch = keys.index(chord[:1],0) + step + 24
if (chord[1:2] == '#'):
pitch = pitch + 1
if (chord[1:2] == 'b'):
pitch = pitch - 1
mf.addNote(track, channel, pitch, i*4, semibreve, volume)
quinta = pitch + 7
mf.addNote(track, channel, quinta, i*4, semibreve, volume)
terca = pitch + 4
if ("m" in chord):
terca = terca - 1
mf.addNote(track, channel, terca, i*4, semibreve, volume)
track = track + 1
def gerar_reaggae(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "reggae")
for i, chord in enumerate(acordes):
pitch = keys.index(chord[:1],0) + step + 24
if (chord[1:2] == '#'):
pitch = pitch + 1
if (chord[1:2] == 'b'):
pitch = pitch - 1
quinta = pitch + 7
terca = pitch + 4
if ("m" in chord):
terca = terca - 1
mf.addNote(track, channel, pitch, i*4 + 1, seminima, volume)
mf.addNote(track, channel, pitch, i*4 + 3, seminima, volume)
mf.addNote(track, channel, terca, i*4 + 1, seminima, volume)
mf.addNote(track, channel, terca, i*4 + 3, seminima, volume)
mf.addNote(track, channel, quinta, i*4 + 1, seminima, volume)
mf.addNote(track, channel, quinta, i*4 + 3, seminima, volume)
track = track + 1
def gerar_baixo1(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Baixo1")
for i, chord in enumerate(acordes):
pitch = keys.index(chord[:1],0) + step + 12
if (chord[1:2] == '#'):
pitch = pitch + 1
if (chord[1:2] == 'b'):
pitch = pitch - 1
quinta = pitch + 7
terca = pitch + 4
if ("m" in chord):
terca = terca - 1
mf.addNote(track, channel, pitch, i*4 + 0, seminima + colcheia, volume)
mf.addNote(track, channel, terca, i*4 + 1.5, colcheia, volume)
mf.addNote(track, channel, quinta, i*4 + 2, seminima, volume)
mf.addNote(track, channel, pitch, i*4 + 3, seminima, volume)
track = track + 1
def gerar_baixo2(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Baixo2")
for i, chord in enumerate(acordes):
pitch = keys.index(chord[:1],0) + step + 12
mf.addNote(track, channel, pitch, i*4 + 0, seminima, volume)
mf.addNote(track, channel, pitch + 7, i*4 + 1, seminima, volume)
mf.addNote(track, channel, pitch, i*4 + 2, seminima, volume)
mf.addNote(track, channel, pitch + 7, i*4 + 3, seminima, volume)
track = track + 1
def gerar_baixo3(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Baixo3")
for i, chord in enumerate(acordes):
pitch = keys.index(chord[:1],0) + step + 12
mf.addNote(track, channel, pitch, i*4 + 0, colcheia, volume)
mf.addNote(track, channel, pitch + 7, i*4 + 0.5, colcheia, volume)
mf.addNote(track, channel, pitch, i*4 + 1, colcheia, volume)
mf.addNote(track, channel, pitch + 7, i*4 + 1.5, colcheia, volume)
mf.addNote(track, channel, pitch, i*4 + 2, colcheia, volume)
mf.addNote(track, channel, pitch + 7, i*4 + 2.5, colcheia, volume)
mf.addNote(track, channel, pitch, i*4 + 3, colcheia, volume)
mf.addNote(track, channel, pitch + 7, i*4 + 3.5, colcheia, volume)
track = track + 1
def gerar_bateria1(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Bateria1")
# Bumbo
mf.addNote(track, channel, 48, 0, seminima, volume)
mf.addNote(track, channel, 48, 4, seminima, volume)
# Caixa
mf.addNote(track, channel, 53, 2, seminima, volume)
mf.addNote(track, channel, 53, 6, seminima, volume)
# Cimbal
mf.addNote(track, channel, 60, 0, colcheia, volume + 10)
mf.addNote(track, channel, 61, 0.5, colcheia, volume - 10)
mf.addNote(track, channel, 60, 1, colcheia, volume)
mf.addNote(track, channel, 62, 1.5, colcheia, volume + 10)
mf.addNote(track, channel, 61, 2, colcheia, volume - 10)
mf.addNote(track, channel, 60, 2.5, colcheia, volume)
mf.addNote(track, channel, 61, 3, colcheia, volume + 10)
mf.addNote(track, channel, 62, 3.5, colcheia, volume - 10)
mf.addNote(track, channel, 60, 4, colcheia, volume - 10)
mf.addNote(track, channel, 61, 4.5, colcheia, volume + 10)
mf.addNote(track, channel, 60, 5, colcheia, volume)
mf.addNote(track, channel, 61, 5.5, colcheia, volume - 10)
mf.addNote(track, channel, 62, 6, colcheia, volume + 10)
mf.addNote(track, channel, 60, 6.5, colcheia, volume - 10)
mf.addNote(track, channel, 61, 7, colcheia, volume - 10)
mf.addNote(track, channel, 62, 7.5, colcheia, volume)
track = track + 1
def gerar_bateria2(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Bateria2")
# Bumbo
mf.addNote(track, channel, 48, 0, seminima, volume)
mf.addNote(track, channel, 48, 2, colcheia, volume)
mf.addNote(track, channel, 48, 2.5, colcheia, volume)
mf.addNote(track, channel, 48, 4, seminima, volume)
mf.addNote(track, channel, 48, 6, colcheia, volume)
mf.addNote(track, channel, 48, 6.5, colcheia, volume)
# Caixa
mf.addNote(track, channel, 53, 1, seminima, volume)
mf.addNote(track, channel, 53, 3, seminima, volume)
mf.addNote(track, channel, 53, 5, seminima, volume)
mf.addNote(track, channel, 53, 7, seminima, volume)
# Cimbal
mf.addNote(track, channel, 60, 0, colcheia, volume + 10)
mf.addNote(track, channel, 61, 0.5, colcheia, volume - 10)
mf.addNote(track, channel, 60, 1, colcheia, volume)
mf.addNote(track, channel, 62, 1.5, colcheia, volume + 10)
mf.addNote(track, channel, 61, 2, colcheia, volume - 10)
mf.addNote(track, channel, 60, 2.5, colcheia, volume)
mf.addNote(track, channel, 61, 3, colcheia, volume + 10)
mf.addNote(track, channel, 62, 3.5, colcheia, volume - 10)
mf.addNote(track, channel, 60, 4, colcheia, volume - 10)
mf.addNote(track, channel, 61, 4.5, colcheia, volume + 10)
mf.addNote(track, channel, 60, 5, colcheia, volume)
mf.addNote(track, channel, 61, 5.5, colcheia, volume - 10)
mf.addNote(track, channel, 62, 6, colcheia, volume + 10)
mf.addNote(track, channel, 60, 6.5, colcheia, volume - 10)
mf.addNote(track, channel, 61, 7, colcheia, volume - 10)
mf.addNote(track, channel, 62, 7.5, colcheia, volume)
track = track + 1
def gerar_percussao(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Percussao")
# Bumbo
mf.addNote(track, channel, 72, 0, seminima, volume)
mf.addNote(track, channel, 73, 0.5, seminima, volume)
mf.addNote(track, channel, 73, 3, seminima, volume)
mf.addNote(track, channel, 72, 3.5, seminima, volume)
mf.addNote(track, channel, 73, 5, seminima, volume)
mf.addNote(track, channel, 72, 5.5, seminima, volume)
mf.addNote(track, channel, 72, 6.5, seminima, volume)
track = track + 1
def gerar_percussao2(acordes, mf):
global track, channel, time, duration, volume
mf.addTrackName(track, time, "Percussao 2")
# Bumbo
mf.addNote(track, channel, 77, 0.5, colcheia, volume)
mf.addNote(track, channel, 78, 1.5, colcheia, volume)
mf.addNote(track, channel, 79, 2, colcheia, volume)
mf.addNote(track, channel, 77, 2.5, colcheia, volume)
mf.addNote(track, channel, 79, 3, colcheia, volume)
track = track + 1
mf = MIDIFile(13, deinterleave=True) # One track, defaults to format 1 (tempo track is created
# name = "Alagados"
# acordes = ['A', 'A', 'E', 'D']
# mf.addTempo(track, time, 200)
# name = "Vapor Barato"
# acordes = ['Am', 'Am', 'G', 'G', 'F', 'F', 'Dm', 'E']
# mf.addTempo(track, time, 132)
# name = "Hey Joe"
# acordes = ['C', 'G', 'D', 'A', 'E', 'E', 'E', 'E']
# mf.addTempo(track, time, 132)
# name = "Ainda é cedo"
# acordes = ['Dm', 'C', 'Am', 'Am']
# mf.addTempo(track, time, 132)
# name = "Creep"
# acordes = ['G', 'G', 'B', 'B', 'C', 'C', 'Cm', 'Cm']
# mf.addTempo(track, time, 100)
# name = "Não chores mais"
# acordes = ['C', 'G', 'Am', 'F']
# mf.addTempo(track, time, 100)
name = "Naquela Mesa"
acordes = ['Am', 'Am', 'Am', 'Dm', 'Dm', 'Dm', 'Dm', 'Am', 'Am', 'Am', 'A', 'Dm', 'Dm', 'Am', 'E', 'Am']
mf.addTempo(track, time, 100)
gerar_bateria1(acordes,mf)
gerar_bateria2(acordes,mf)
gerar_percussao(acordes,mf)
gerar_percussao2(acordes,mf)
gerar_tonica(acordes,mf)
gerar_quinta(acordes,mf)
gerar_terca(acordes,mf)
gerar_acordes(acordes,mf)
gerar_reaggae(acordes,mf)
gerar_pedal(acordes,mf)
gerar_baixo1(acordes,mf)
gerar_baixo2(acordes,mf)
gerar_baixo3(acordes,mf)
with open(name + ".mid", "wb") as output_file:
mf.writeFile(output_file)
+333
View File
@@ -0,0 +1,333 @@
---
author: "Flávio Schiavoni"
description:
---
from __future__ import print_function
from unittest import TestCase
class NoteEvent(TestCase):
def test(self):
from alsamidi import noteevent
midi_event = (1, 60, 127, 1000, 10)
data = (1, 60, 127, 0, 10)
expected = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, noteevent(*midi_event))
class NoteOnEvent(TestCase):
def test(self):
from alsamidi import noteonevent
midi_event = (1, 60, 127)
data = (1, 60, 127, 0, 0)
expected = (6, 1, 0, 253, (0, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, noteonevent(*midi_event))
class NoteOffEvent(TestCase):
def test(self):
from alsamidi import noteoffevent
midi_event = (1, 60, 10)
data = (1, 60, 10, 0, 0)
expected = (7, 1, 0, 253, (0, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, noteoffevent(*midi_event))
class PgmChangeEvent(TestCase):
def test_sent_directly(self):
from alsamidi import pgmchangeevent
data = (1, 0, 0, 0, 0, 9)
expected = (11, 1, 0, 253, (0, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, pgmchangeevent(1, 9))
def test_scheduled(self):
from alsamidi import pgmchangeevent
data = (1, 0, 0, 0, 0, 9)
expected = (11, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, pgmchangeevent(1, 9, 1000))
class PitchbendEvent(TestCase):
def test_sent_directly(self):
from alsamidi import pitchbendevent
data = (1, 0, 9)
expected = (13, 1, 0, 253, (0, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, pitchbendevent(1, 9))
def test_scheduled(self):
from alsamidi import pitchbendevent
data = (1, 0, 9)
expected = (13, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, pitchbendevent(1, 9, 1000))
class ChanPress(TestCase):
def test_sent_directly(self):
from alsamidi import chanpress
data = (1, 0, 9)
expected = (12, 1, 0, 253, (0, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, chanpress(1, 9))
def test_scheduled(self):
from alsamidi import chanpress
data = (1, 0, 9)
expected = (12, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
self.assertEqual(expected, chanpress(1, 9, 1000))
class Tuple2Time(TestCase):
def test(self):
from alsamidi import tuple2time
self.assertEqual(1.5, tuple2time((1, 500000000)))
class Time2Tuple(TestCase):
def test(self):
from alsamidi import time2tuple
self.assertEqual((1, 500000000), time2tuple(1.5))
class ModifyEvent(TestCase):
def test(self):
from alsamidi import modifyevent
data = (1, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
modified_data = (15, 72, 127, 0, 10)
modified_event = (5, 1, 0, 250, (2, 0), (2, 0), (3, 0), modified_data)
self.assertEqual(modified_event, modifyevent(event, timedelta=1,
ch=15, dest=(3, 0), source=(2, 0), queue=250, keydelta=12))
class ModifyEvents(TestCase):
def test(self):
from alsamidi import modifyevents
data = (1, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
modified_data = (15, 72, 127, 0, 10)
modified_event = (5, 1, 0, 250, (2, 0), (2, 0), (3, 0), modified_data)
self.assertEqual([modified_event], modifyevents([event], timedelta=1,
ch=15, dest=(3, 0), source=(2, 0), queue=250, keydelta=12))
class Merge(TestCase):
def test_no_tracks(self):
from alsamidi import merge
self.assertEqual([], merge([]))
def test_track(self):
from alsamidi import merge
event = (0, 0, 0, 0, 0)
self.assertEqual([event], merge([[event]]))
class UniqueNotes(TestCase):
def test(self):
from alsamidi import uniquenotes
data = (1, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
expected = {1: [60]}
self.assertEqual(expected, uniquenotes([event]))
class TestSeq(TestCase):
def setUp(self):
try:
from mock import Mock
except:
from unittest.mock import Mock
import alsamidi
alsamidi.print = Mock()
def tearDown(self):
import alsamidi
del alsamidi.print
def test_instance(self):
from alsamidi import Seq
self.assertTrue(isinstance(Seq(), Seq))
def test_info(self):
from alsamidi import Seq
import alsamidi
data = (9, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
track = [event]
seq = Seq()
seq.names = ['name']
seq.tags = 'tags'
seq.tracks = [track]
seq.info()
alsamidi.print.assert_any_call('tags')
args = '0:', 'name ', 0, 'Sec.', 1, 'events,', {9: [60]}, 'Hi Bongo'
alsamidi.print.assert_called_with(*args)
class SeqRead(TestCase):
def setUp(self):
import os
try:
from mock import Mock
except:
from unittest.mock import Mock
import alsamidi
self.file = Mock()
text = 'track melody\n' \
'6,1,0,1,2 5430786,20 0,130 0,1 108 82 0 0\n' \
'name = value'
lines = text.split('\n')
self.file.readlines.return_value = lines
lines[0] = lines[0] + '\n'
alsamidi.open = Mock(return_value=self.file)
alsamidi.print = Mock()
self.exits = os.path.exists
os.path.exists = Mock(return_value=True)
def tearDown(self):
import os
import alsamidi
del alsamidi.open
del alsamidi.print
def test_read_not_found(self):
import os
from alsamidi import Seq
os.path.exists.return_value = False
seq = Seq()
seq.read('path')
self.assertEqual([], seq.tracks)
def test_read_named_track(self):
from alsamidi import Seq
seq = Seq()
seq.read('path')
self.assertEqual(['track melody'], seq.names)
def test_read_default_track(self):
from alsamidi import Seq
text = '6,1,0,1,2 5430786,20 0,130 0,1 108 82 0 0'
self.file.readlines.return_value = text.split('\n')
seq = Seq()
seq.read('path')
self.assertEqual(['Default'], seq.names)
def test_read_track(self):
from alsamidi import Seq
seq = Seq()
seq.read('path')
self.assertEqual([[
(6, 1, 0, 1,
(2, 5430786),
(20, 0),
(130, 0), (1, 108, 82, 0, 0))]], seq.tracks)
class SeqWrite(TestCase):
def setUp(self):
try:
from mock import Mock
except:
from unittest.mock import Mock
import alsamidi
self.file = Mock()
alsamidi.open = Mock(return_value=self.file)
alsamidi.print = Mock()
def tearDown(self):
import alsamidi
del alsamidi.open
del alsamidi.print
def test_write(self):
from alsamidi import Seq
data = (9, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
track = [event]
seq = Seq()
seq.names = ['name']
seq.tags = {'name': 'value'}
seq.orderedtags = ['name']
seq.tracks = [track]
seq.write('path')
line = '5,1,0,0,1 0,0 0,0 0,9 60 127 0 10\n'
self.file.write.assert_called_with(line)
def test_write_no_name(self):
from alsamidi import Seq
data = (9, 60, 127, 0, 10)
event = (5, 1, 0, 0, (1, 0), (0, 0), (0, 0), data)
track = [event]
seq = Seq()
seq.names = []
seq.tags = {'name': 'value'}
seq.orderedtags = ['name']
seq.tracks = [track]
seq.write('path')
line = '5,1,0,0,1 0,0 0,0 0,9 60 127 0 10\n'
self.file.write.assert_called_with(line)
def test_error(self):
from alsamidi import Seq
import alsamidi
alsamidi.open.side_effect = IOError
seq = Seq()
seq.write('path')
if __name__ == '__main__':
unittest.main()