Specifikace: Syntezátor zvuku

Slo by vlastne o dve casti:

*Za prve* crossplatformne (zacal bych jenom jednim OS - linuxem, pripadne
windowsem, a pokud bych to stihal, tak bych dodelal dalsi, ale uz ze
zacatku bych to stavel na rozvetveni teto casti kodu pro ruzna OS)
implementovat co nejvic low level audio APIs jednotlivych OS. Nevim, do
jake hloubky by bylo vhodne jit, samozrejme bych mohl pouzit treba
PortAudio a o nic se nestarat, ale spis bych to videl na ALSA na linuxu a
WASAPI na windowsu. V C++ si myslim, ze by se s tim pracovalo nejlip.

*Za druhe* samotne uzivatelske ovladani syntezy. Nechci delat graficke
rozhranni, videl bych to spise jako knihovnu. Tedy mozna export jako C++
knihovnu pro python, kde by si uzivatel mohl psat relativne jednodussi kod
v Pythonu stylem: nadefinoval by si nejake oscilatory, jednim by ovladal
druhy, nejaky by sel do output zarizeni, namapoval by si treba input na
midi klavesy, co by ovladaly frekvenci apod. Druha moznost, co me napada,
je vytvorit nejaky "pseudojazyk", ktery by muj program parsoval a na zakade
toho vytvarel tyto oscilatory, mapoval input apod.

Takze vlastne mam jednu cast, kde se musim akorat rozhodnout do jake
hloubky jit v tech APIs a druhou cast, kterou bych pripadne dorovnal volbu
vyssich levelu APIs, kdybych delal nejake parsovani tohoto psedojazyka, aby
to nebylo moc trivialni.

*Priklad myslenky zmineneho "pseudojazyka":*

oscilator *wobble *{ /* nadefinuju predpis vlnove funkce, frekvenci,
amplitudu */  }

oscilator *sine* { /* ... */ }

*wobble *-> *sine*.amp // oscilator "wobble" meni amplitudu oscilatoru
"sine"

input *keys *{ /* namapuju klavesnici, nebo midi klavesy, cokoliv... */ }

*keys *-> *sine*.freq // input "keys" ovlada frekvenci oscilatoru "sine"

sequence *c7 *{ /* vypisu treba frekvence nejakeho akordu, postupne jako
sekvenci v nejakem rytmu */ }

*c7 *-> *sine*.freq // sekvence "c7" ovlada frekvenci oscilatoru "sine"

device *out *{ /* nejak urcim prehravaci zarizeni */ }

*sine *-> *out *// output oscialtoru "sine" se prehraje v reproduktorech