V lekcích A13 a A14 jsme nahlédli do světa programování hudby. Obsah této lekce volně navazuje na tyto lekce a ukazuje, jak v jazyce MicroPython psát program na hudbu a jaké nám jazyk přináší další možnosti.
název: B13 Hudba
kategorie: B mírně pokročilí
ref.číslo: B13
projekt: kurz micro:bit
verze: 01, 2017-06-28
autor: Ivo Obr, Lanškroun
Než začneme psát melodii, podíváme se některé funkce, které budeme k programování hudby potřebovat.
Začátek našeho programu bude vypadat takto :
from microbit import *
import music
/tady začínáme psát program/…..
Za řádkem “import music” máme jeden prázdný řádek. Další nastavení parametrů provedeme funkcí :
music.set_tempo(ticks=4, bpm=120)
kde parametr “ticks=4” určuje, na kolik dob je jeden takt. Standardně je nastaveno na čtyři doby v jednom taktu. Další parametr “bmp=120” je nastavení počtu taktů za jednu minutu. Je to také standardně nastavená hodnota. Parametry nejsou povinné, viz příklady :
music.set_tempo(bpm=80) – nastaví jen jiný počet taktů za minutu
music.set_tempo(ticks=3) – nastaví jen jiný počet dob v taktu
music.set_tempo() – nastaví standardní hodnoty (ticks=4, bpm=120)
No a nyní už si ukážeme, jak zapsat jednu notu. Zápis se skládá z označení noty písmenem, a je jedno, zda-li píšeme malá nebo velká písmena. Pozor, naší notu “H” musíte psát jako notu “B”. Jestliže je nota snížená, píšeme hned za notou další písmeno a to malé “b”. Jestliže je nota zvýšená, píšeme hned za notou znak “#”.
Příklad: nota “Des” (snížené “D”) napíšeme jako “Db”. Snížené “H” píšeme “Bb”.
nota “Dis” (zvýšené “D”) napíšeme jako “D#”.
Za názvem noty mohou být ještě parametry :
označení noty[číslo oktávy][:délka trvání znění noty]
kde : číslo oktávy 4 je střední, menší číslo jde k basům, vyšší číslo k vyšším tónům
:délka trvání 4 – čtvrťová nota, 2 – půlová nota, 1 – celá nota
Uvedením čísla oktávy a délku trvání nastavíme nové hodnoty, další noty, pokud jsou ve stejné oktávě již psát nemusíme s číslem oktávy, stejné platí i pro délku trvání noty. Oktáva vždy začíná notou C a končí notou B (u nás H).
Pokud chceme místo noty zapsat pomlku, tak pro označení pomlky použijeme písmeno “R”, tam číslo oktávy psát nemusíme, ale můžeme zapsat délku trvání. (Půlová pomlka je R:2).
Tím jsme vyčerpali informace o zápisu not a můžeme se pustit do hraní. Příkaz pro zahrání melodie je :
music.play(music, pin=microbit.pin0, wait=True, loop=False)
Vysvětlíme si jednotlivé parametry :
music – jde o označení našeho notového zápisu (viz příklad – dále), nebo jméno přednastavené melodie – viz lekce A13.
pin=microbit.pin0 – není povinné uvádět. Standardně nastavená hodnota je “pin0”, můžeme ale použít i jiný pin na micro:bitu viz číslování (doporučuji max. 1 nebo 2)
wait=True – pokud je nastaveno “True”, pak se čeká až se melodie dohraje a pak následuje teprve další příkaz. Pokud je nastaveno “False”, provádí se další příkazy a melodie se hraje na “pozadí”. Není povinné uvádět, standardní hodnota je “True”.
loop=False – pokud je nastaveno “False”, melodie se příkazem zahraje jen jednou. Pokud je nastaveno “True”, melodie se stále opakuje dokola. Není povinné uvádět, standardní hodnota je “False”.
Příklady :
music.play(music.ENTERTAINER) – hrajeme přednastavenou melodii
music.play(notes, pin=microbit.pin1) – hrajeme vlastní skladbu, která má název “notes” a výstup signálu je na PINU číslo jedna.
A nyní již poslední funkce, která nám umožňuje předčasně zastavit hraní hudby, respektive zastavit opakování, když jsme si pustili hudbu s parametrem “loop=True”:
music.stop(pin=microbit.pin0)
Pochopitelně musíme zastavovat na pinu, na kterém jsme hudbu spustili. A nyní již jen jednoduchý příklad, kdy tlačítkem “A” spouštíme přednastavenou melodii ENTERTAINER a tlačítkem “B” námi napsanou melodii. Je to část preludia od J.S.Bacha.
Na začátku si vytvoříme seznam not (pomlk), tento seznam si pojmenujeme například “notes”. Seznam je obsažen v hranatých závorkách. Všimněte si, že první zápis noty nastaví číslo oktávy a délku noty. Pokud oktávu neměníme, její číslo nemusíme psát. Pokud neměníme délku noty, nemusíme ji psát u další noty.
Text programu si můžete okopírovat přímo do editoru MicroPython.
from microbit import * import music notes = [ 'c4:1', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5', 'c4', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5', 'c4', 'd', 'g', 'd5', 'f5', 'g4', 'd5', 'f5', 'c4', 'd', 'g', 'd5', 'f5', 'g4', 'd5', 'f5', 'b3', 'd4', 'g', 'd5', 'f5', 'g4', 'd5', 'f5', 'b3', 'd4', 'g', 'd5', 'f5', 'g4', 'd5', 'f5', 'c4', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5', 'c4', 'e', 'g', 'c5', 'e5', 'g4', 'c5', 'e5', 'c4', 'e', 'a', 'e5', 'a5', 'a4', 'e5', 'a5', 'c4', 'e', 'a', 'e5', 'a5', 'a4', 'e5', 'a5', 'c4', 'd', 'f#', 'a', 'd5', 'f#4', 'a', 'd5', 'c4', 'd', 'f#', 'a', 'd5', 'f#4', 'a', 'd5', 'b3', 'd4', 'g', 'd5', 'g5', 'g4', 'd5', 'g5', 'b3', 'd4', 'g', 'd5', 'g5', 'g4', 'd5', 'g5', 'b3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'b3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'b3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'b3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'a3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'a3', 'c4', 'e', 'g', 'c5', 'e4', 'g', 'c5', 'd3', 'a', 'd4', 'f#', 'c5', 'd4', 'f#', 'c5', 'd3', 'a', 'd4', 'f#', 'c5', 'd4', 'f#', 'c5', 'g3', 'b', 'd4', 'g', 'b', 'd', 'g', 'b', 'g3', 'b3', 'd4', 'g', 'b', 'd', 'g', 'b', 'g3:4' ] while True: if button_a.was_pressed(): music.set_tempo(bpm=90) music.play(music.ENTERTAINER) if button_b.was_pressed(): music.set_tempo(bpm=60) music.play(notes)
Samozřejmě, že můžete program dále vylepšovat a vyzkoušet si hraní také na jiném pinu.
Přeji Vám pěknou zábavu s hudbou na micro:bitu!