Odborné články Základní vzdělávání Kódování v Pythonu skrze hudbu
Odborný článek

Kódování v Pythonu skrze hudbu

24. 2. 2026
Základní vzdělávání
Autor
Pavel Konrád

Anotace

Článek otevírá téma programování a generování hudby v jazyce Python a jeho použití ve vzdělávání. Jde o názornou ukázku, že matematické definice, které jsou doménou matematiků, mají určité paralely v abstraktním světě hudby, jemuž naopak všichni intuitivně rozumíme. Python a programování tak nemusí být výhradně pro programátory, ale může se stát populárním tématem i pro laiky, kteří jej mohou použít ve vědě, vzdělávání, marketingu i umění. Tento článek je pro všechny, kteří by rádi zkusili programovat, a rozvinuli tak svoji digitální kompetenci na další úroveň, aby byli připraveni pro svět umělé inteligence 21. století.

Abstrakce

Každý kód – i ten hudební – předpokládá určitou míru abstrakce a logického myšlení pro jeho správnou interpretaci. Hudba prošla složitým více než dvoutisíciletým vývojem. Noty jsou komprimovanou metodou pro její matematické vyjádření a my dokážeme hudbu pomocí zlomků jasně matematicky definovat. Ať už poměrem myslíme výškové frekvence mezi jednotlivými tóny, kterým říkáme intervaly, nebo i pravidelné časové intervaly, ve kterých noty skládáme do rytmu. Horizontální a vertikální reprezentace notového systému jasně demonstruje přísné spojení s matematikou.

Když teoreticky rozebereme stupnici, zjistíme, že se jedná o řadu osmi tónů, které jdou za sebou podle určitých pravidel. Zcela triviální poučka ve světě muzikanta se stává pro hudebníka zapeklitým problémem, jestliže ji chceme vyjádřit matematicky. Intervalům a stupnicím hudebníci rozumějí velmi dobře. Nemusíme být přímo virtuosové, abychom poznali, že kapela potřebuje vyměnit bubeníka nebo když nedoceněný kytarista uletí se svým sólem mimo spektrum konvenčně znějících tónů. Expert si nicméně kromě toho dokáže představit celou tónovou řadu, jak ji abstraktně hraje směrem nahoru i dolů. Zná jednotlivé poměry tónů a ví, kde přesně se v této řadě zrovna nachází.

K tomu, abychom dokázali programovat v jazyce Python, nepotřebujeme znát přímo matematické definice pro tvorbu tónu ani být hudebními teoretiky. Stačí nám cit pro hudbu, který sám o sobě potvrzuje naše kognitivní vnímání abstrakce a předurčuje nás k jejímu kódování. Na hudebních principech, které jsou pro nás intuitivní, si následně ukážeme základní principy programování. A proč zrovna Python?

Python je jedním z dostupných programovacích jazyků pro výuku. Díky tomu roste jeho popularita a nová generace programátorů dokazuje, že je možné jej nasadit ve všech možných oblastech. Lze v něm programovat hry, weby i aplikace, nicméně jeho nejsilnější stránkou jsou data, umělá inteligence a multimédia. Obzvláště v dnešní době vidíme, že umělá inteligence se postupně stává běžnou záležitostí v našich každodenních životech.

     I.         Kód

Pojďme trochu obecně rozebrat, co je to vlastně kód. Pakliže máme nějaké sdělení, myšlenku či nápad, můžeme ji uchovat pomocí kódu. Můžeme určité sdělení zakódovat do různých symbolů a znaků. Tyto symboly pak vzájemně interagují v rámci konkrétních systémů jako např. gramatika nebo noty. Máme několik možností kódování nebo také jinak řečeno šifrování. Můžeme určitou informaci zakódovat např. do Morseovy abecedy nebo do jakékoliv podoby, která reprezentuje naši realitu.

Samotný kód ovšem potřebuje nějakého interpreta k tomu, aby se daná akce uskutečnila. Podobně jako v hudbě je interpretem hudebník, který skrze kód notové osnovy přehrává daný part nebo na základě definovaných funkcí generuje náhodné tóny v improvizaci, tak i počítačový (zdrojový) kód musí mít „v partě“ někoho, kdo procesoru řekne, co a v jaké chvíli má udělat. Počítačový kód ve své podstatě uchovává pouze informaci o pravdivostní hodnotě. Nejmenší jednotkou v digitálním prostředí je tzv. bite, který má buď hodnotu 1, nebo 0. Tedy pravda, nebo lež. Nebo lépe zapnuto/vypnuto. Pro nás lidi tento údaj nemá žádnou smysluplnou hodnotu, pokud tedy nezpovídáme manžela, když chceme zjistit jednoznačnou pravdivostní hodnotu, jestli byl včera s kolegyní v práci, anebo v baru.

Zjistit pravdu může být náročný úkol, ale ve světě počítačů má celkem jednoznačné řešení. Tzv. zdrojový kód (to, co píšeme), musíme počítači nějak přeložit, aby věděl, co má dělat. Způsobů, jak sdělit počítači, co se po něm chce, je několik a každý programovací jazyk používá trochu jinou metodu. K rozběhnutí programu napsaného v jazyce Python potřebujeme interpreta.

Pro nás lidi mají symboly a písmena určité významy, ale pro stroje jsou to pouze sady jedniček a nul. Jako např. číslo 0100 0001 ve dvojkové soustavě reprezentuje symbol velkého A v naší abecedě. Samozřejmě že proces, jakým náš požadavek doputuje k procesoru, který na základě nějakého dalšího pod-kódu a dalšího programu provede to, co jsme zamýšleli, je celkem složité téma, které by se obsahově do tohoto článku nevešlo.

Mezi programátory je zažitá tradice, která má i hluboký filozofický kontext, a to ověřit funkčnost celého jazyka mocným kreacionistickým zvoláním „Hello World“. Je to důkaz, že tímto jazykem můžeme s počítačem komunikovat. Můžeme si klidně otevřít webový prohlížeč a najít některý z online interpretů jazyka Python a zkusit spustit první program.

Print („Hello World!“)

Generování informace

Když půjdeme ještě dále, uvědomíme si, že hudba a její matematická definice mají přísnou vazbu. Již zmíněná stupnice má jasně daná pravidla a podmínky, podle kterých ji bude interpret hrát. K tomu, abychom mohli určit, jaká pravidla budeme aplikovat, je potřeba nejdříve definovat rozsah, ve kterém se budeme pohybovat.

scale = ["c", "c#", "d", "d#", "e", "f", "f#", "g", "g#", "a", "bb", "b",]

Když máme takto definovaný rozsah, můžeme ho nějakým způsobem podmínit určitým pravidlům. Když budeme počítat vzdálenost mezi jednotlivými tóny, můžeme definovat názvy jednotlivých intervalů.

if vypocet == 0:

   interval = prima

elif vypocet == 1:

   interval =  malaSekunda

elif vypocet == 2:

     interval = malaTercie

Na základě toho můžeme dále definovat durovou stupnici. Když k tomu ještě přidáme podmínku, v případě molové a durové stupnice získáme jednoduchý algoritmus, který dokáže definovat tóny durové a molové stupnice.

if stupnice == dur:

Tone = prima, velkaSekunda, velkaTercie, cistaKvarta, cistaKvinta, velkaSexta, velkaSeptima

 

elif stupnice == mol:

Tone = prima, velkaSekunda, malaTercie, cistaKvarta, cistaKvinta, velkaSexta, malaSeptima

Zatím ale pouze definujeme pojmy a přiřazujeme jim čím dál tím větší abstrakci. Tato metoda po chvíli narazí na své limity, jelikož abstrakce má také svůj limit, na jehož hraně již nejsme schopni určit, jaký význam tato abstrakce vlastně obsahuje.

Kdybychom chtěli počítač přinutit, aby vygeneroval tóny stupnice nezávisle na jejich neustálém definování a aby tuto činnost zautomatizoval, museli bychom postupovat trochu jinak. Jakmile do hry vstupuje automatizace, musíme do kódu vložit smyčku. Např. chromatiku bychom mohli vygenerovat tímto způsobem:

scale = ["c", "c#", "d", "d#", "e", "f", "f#", "g", "g#", "a", "bb", "b",]

tone = 0

while pocetTonu < 12:

print(scale[ton])

ton += 1

pocetTonu += 1

V tuto chvíli by stačilo definovat frekvence jednotlivých tónů a teoreticky by mohl počítač začít přehrávat jednotlivé tóny. Mohli bychom jít ještě dál a vytvořit algoritmus, který by podle nějakého pravidla definoval jednotlivé frekvence. O to se ostatně pokoušelo v průběhu čtyř tisíciletí několik vědců včetně Pythagora a až poměrně nedávno se to konečně podařilo rozlousknout. Takový algoritmus se ovšem do tohoto úvodního článku nevejde.

Tento úvod má posloužit jako demonstrace toho, co všechno můžeme algoritmizovat, a že to ve své podstatě všechno spočívá ve správném definování a abstrakci, kterou automatizujeme. Generování hudby otevírá spoustu výukových aktivit, na kterých můžeme demonstrovat složitá témata spojená s programováním. Kód hudby a kód programu mají k sobě velmi blízko právě kvůli svojí abstrakci. Informace obsažené v akordu c může mít několik podob zhmotnění. Může to být vizuální informace v notové osnově, znějící akord v témbru klavíru nebo symfonický orchestr hrající jeho rozšířenou harmonii. A to vše v jediném abstraktním pojmu „c dur“.

Autor
Pavel Konrád

Hodnocení uživatelů

Článek nebyl prozatím komentován.

Váš komentář

Pro vložení komentáře je nutné se nejprve přihlásit.

Zařazení do seriálu:

Tento článek je zařazen do seriálu Python v hudbě.
Ostatní články seriálu:

RVP do 2024

Materiály s klíčovým slovem NPO 3.1 DIGI vytvořil tým metodiků v projektu Podpora škol v kontextu digitalizace (Národní plán obnovy 3.1 DIGI) pro podporu pedagogů při ICT revizích.

Další informace, metodické materiály i inspiraci do výuky jednotlivých předmětů i napříč předměty najdete na webu https://digitalizace.rvp.cz/