OldComp.cz
http://oldcomp.cz/

Tvorba hudby + programování v assembleru
http://oldcomp.cz/viewtopic.php?f=119&t=3537
Stránka 1212

Autor:  defor [ 11.01.2021, 11:54 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Ahoj. Držím palce s programováním.
Mám pár nedůležitých dotazů:
1. Jestli to dobře chápu, tak si děláš svůj vlastní formát skladby. Řešíš nějak i editování? Jak skladbu vytváříš? Máš na to bokem nějaké udělátko nebo to děláš old-school programátorsky - tedy "dc.b xx,yy,zz, ..." apod.?
2. Tvůj kód obsahuje i syntézu zvuků (nástrojů) k přehrávání? Pokud ano, pak opět bod 1. Jak to edituješ a zkoušíš?

Autor:  Lisiak4 [ 12.01.2021, 00:16 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Ano, mám můj vlastní formát, editace je přímo v assembleru pomocí DC. Hudební rutina pracuje pouze se samply. Ale lze načíst i sampl o délce třeba 1 byte. Mám podprogram na vibrato, arpeggio.

Včera jsem rutinu předělával. Ještě není hotovo. Základ hudebního formátu je 4 byte pro 4 kanály, zde se zadává i vibrato. Pak volitelné jsou 4 byte pro hlasitost 4 kanálů (info o hlasitosti 6 bitů na kanál. První byte má ještě jiný účel), 4 byte pro arpeggio, 4 byte pro jemnou práci se samply v rámci časování, tohle lze ale dělat v jednom momentě pouze v 1 kanály.

V současné době zkouším zahrát v 1 Longu 1 řádek v běžném trackeru. Můžu narazit na problém, že sampl bude hrát dlouho a po zvukové stránce mi to může zanést do zvuku i nechtěný bordel. Sample zatím tlumim přímo ve formátu, nedělá se automatický výpočet, kdy sampl ztlumit. Můžu použít podprogram pro jemnou práci se samply, ale jen pro 1 kanál v jednom momentě. Před tím jsem to dělal tak, že 1 řádek v klasickém trackeru byl v mém formátu zapsán pomocí třeba 4 Longů a tam jsem si již určil, jestli sampl ztumim v prvním, druhém, nebo třeba ve 4.Longu. Co bylo přesnější. V těchhle situacích třeba použiju alespoň 2 Longy. Uvidím.

Autor:  Busy [ 12.01.2021, 09:26 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Lisiak4 píše:
Hudební rutina pracuje pouze se samply. Ale lze načíst i sampl o délce třeba 1 byte.
Aky zvuk bude mat taky jednobajtovy sampel (napr. hodnota 128) ? ;)

Autor:  defor [ 12.01.2021, 11:49 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Lisiak4 píše:
Ano, mám můj vlastní formát, editace je přímo v assembleru pomocí DC.

Rozumím. Tak to je značně hard-core. Ale třeba si editor někdy uděláš. Přece jen skládat nějakou hezkou melodickou hudbu v assembleru je asi docela obtížné.

Autor:  Lisiak4 [ 12.01.2021, 15:02 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Pardon, jednoduše lze zahrát sampl o velikosti 1 sinusovky.

Zatím jen predelávám skladby z Atari 800 XL/XE.

Mne jednoduše vadila cizí hudební rutina s kódem, kterému nerozumím, ale nepočítal jsem, že na tom budu dělat tak dlouho... .

Autor:  Lisiak4 [ 16.01.2021, 01:32 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Takhle vypadá můj formát. První longy jsou noty, Úplně nahoře long s bytem AD je předsekvence pro sample. Je zde využít každý bit jen ne teď a nahrávám sampl s hodnotou dvou bitů na 00. Long s bytem CD nastavuje hlasitost. V tomhle Longu jsou nevyužité 2 bity.

Dnes jsem opravil u mně asi jednu z nejhorších chyb v ASM. Celkem slušně jsem to vše rozpitval. Snad to již bude vše ok.

Ve 2 přílohách tedy vzhled formátu a předsekvence pro práci se samply. Časem chci udělat popis, ale ještě je brzo.

Přílohy:
predsekvencePrepinaniSamplu8.zip [565 bajtů]
19 krát
format.png
format.png [ 21.97 KiB | Zobrazeno 520 krát ]

Autor:  Lisiak4 [ 19.01.2021, 11:36 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Přemýšlel jsem o situaci, kdy budu potřebovat načíst 5 samplů naráz. 3 sample do kanálu 1-3 a 2 sample pro práci s jemným časováním do kanálu 4. A zároveň mi vadilo, že i když taková situace jen tak nenastane a můžu použít info třeba z 3. a 4. kanálu pro zahrání 2 samplů s jemným časováním v kanálu 4, tak si tím blokují vždy minimálně 1 kanál, neboli budu moci v ten moment kromě 2 samplů do 4.kanalu nahrát ještě 2 sample a tedy neosadit samply všechny 3 zbylé kanály. Přizval jsem si tedy na pomoc volné bity z předsekvence pro hlasitost a asi tuhle možnost dám i do předsekvence arpeggio. Ta funkčnost by pak měla být zřejmá snad i z popisu. Pokud tedy nepouziju predsekvenci sampl, předsekvence volume ponese info o rychlosti hraní skladby, to je prvních 5 bitů. Predsekvenci volume ještě jen doprogramuji.

Kód:
************************************
* predsekvence sampl (s casovacem) *
************************************
 pocet bitu 32 / funkce
-------------------------------------------
 5 casovac - 2.smp        (4.kanal, sampl 1-8)
 3 sampl 1-8     (casovac, aktivace nahrani 2.smp pres 4.kanal)
-------------------------------------------
 6 frekvence     (casovac, 4.kanal, sampl 1-8)
 1 ztlumeni smp? (casovac, 4.kanal, sampl 1-8)
 1+
-------------------------------------------
 2=3 sampl 1-8              (aktivace nahrani smp pres 3.kanal)
 3 2) kanal 1-4  (sampl 1-8, aktivace nahrani smp pres 2.kanal)
 3 1) kanal 1-4  (sampl 1-8, aktivace nahrani smp pres 1.kanal)
-------------------------------------------
 ----nove
 1 predsekvence
 2 jen hlasitost, jen sampl (s casovacem),
   arpeggio (10,01,11), stav 00 volny
 5 casovac - rychlost hrani skladby

*********************************************************
* predsekvence hlasitost (nepouzita predsekvence sampl) *
*********************************************************
 pocet bitu 32 / funkce
-------------------------------------------
 6 hlasitost 1-64 - 1.kanal (0-3Fh)
-------------------------------------------
 6 hlasitost 1-64 - 2.kanal (0-3Fh)
-------------------------------------------
 6 hlasitost 1-64 - 3.kanal (0-3Fh)
-------------------------------------------
 6 hlasitost 1-64 - 4.kanal (0-3Fh)
-------------------------------------------
 1 predsekvence
 2 hlasitost, sampl, arpeggio (10,01,11), stav 00 volny
 5 casovac - rychlost hrani skladby

*******************************************************
* predsekvence hlasitost (pouzita predsekvence sampl) *
*******************************************************
 Pro zahrani 2 samplu v jeden moment ve formatu

 000000XX - XX = ton ze stupnice ve kterem se hraji 2 sample
                 nahrani prvniho ze dvou samplu

 pocet bitu 32 / funkce
-------------------------------------------
 6 hlasitost 1-64 - 1.kanal (0-3Fh)
-------------------------------------------
 6 hlasitost 1-64 - 2.kanal (0-3Fh)
-------------------------------------------
 6 hlasitost 1-64 - 3.kanal (0-3Fh)
-------------------------------------------
 6 hlasitost 1-64 - 4.kanal (0-3Fh)
-------------------------------------------
 1 predsekvence
 2 hlasitost, sampl, arpeggio (10,01,11), stav 00 volny
 3 sampl 1-8 (4.kanal)
 1 nahrat sampl 1-8? (4.kanal, pro prvni ze 2 samplu)
 1 pouzit nastaveni hlasitosti? (1-4.kanal)

 (nulova hlasitost se dosahuje primo ve formatu pomoci 00)

Autor:  defor [ 22.01.2021, 10:33 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Zápis informací přímo v hexa číslech je hodně nepřehledné. Obvykle se ani autor po nějaké době ve formátu nevyzná. Proto se obvykle číslům přiřazují symbolická jména a větší celky se pak konstruují z nich. Dají se využít i makra. Třeba něco takového?
Kód:
  CMD_PLAY = $1
  CMD_STOP = $2
  CMD_WAIT = $3
  ....
  ....
  E_NONE = $0
  E_ARPEGIO = $1
  E_VIBRATO = $3
  ....
  ....

  macro COMMAND ; command, time, volume, effect
    dc.l (((\1)&$f)<<24)|(((\2)&$ff)<<16)|(((\3)&$ff)<<8)|((\4)&$f)
  endm

   ....
   ....

Commands:
  COMMAND CMD_STOP,10,0,E_NONE
  COMMAND CMD_PLAY,32,63,E_ARPEGIO
  COMMAND CMD_WAIT,200,0,E_NONE
  ....
  ....

Je to pak z dlouhodobého hlediska asi čitelnější. Nemluvě o možnosti snáze vše zpětně upravovat.

Autor:  Lisiak4 [ 22.01.2021, 13:11 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Díky moc za příklad, možná později ;)

Autor:  Lisiak4 [ 23.01.2021, 10:30 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Dokončena možnost nahrávat 5 samplů v jeden moment. Tak snad základ hudebního formátu dokončen. Mám i hotových prvních 5 patternů (3 různé) z 2.nepublikované skladby. Ještě si bude muset sednout to, na kolik Longů se bude hrát v mé hudební rutině 1 řádek klasického formátu v běžném trackeru. Ale to je již jen věc časování a ne mého formátu, ten může hrát 1 a více Longů po sobě, jen se natahuje objem dat. S tímhle uvidím hlavně kvůli tomu ztlumovani samplů. Ale rozhodně i na 1 Long bez zásahů je skladba poslouchatelná.

@defor: a kolik taktů si vezmou ti makra? Spíše mi jde o míru zatížení než o přesný počet. Asi jsem úchyl, ale mně se zatím více líbí to zarovnání na bajty :)

A ještě si dovolím mou reakci na současný stav rutiny i když vibrato a arpeggio jsou není v poslední době odzkoušené...
:jump:

Autor:  defor [ 26.01.2021, 10:58 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Lisiak4 píše:
@defor: a kolik taktů si vezmou ti makra? Spíše mi jde o míru zatížení než o přesný počet. Asi jsem úchyl, ale mně se zatím více líbí to zarovnání na bajty :)

Nerozumím. Makra si "berou" tolik taktů podle toho, do jakých instrukcí je assembler rozvine. Ale v tom mém příkladu makro obsahuje pouze deklaraci "dc.l", která jen vytváří v paměti long-word o dané hodnotě - žádnou instrukci. Schopnost psát makra je standardní vlastností všech modernějších assemblerů. Usnadňují programování opakujících se bloků kódu a zvyšují jeho přehlednost a použitelnost. Nic víc, nic míň.

Autor:  Lisiak4 [ 27.01.2021, 13:15 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

@defor: ok :)

@ALL: přemýšlel jsem jestli tam jsem schopen narvat ty zásahy do samplů v rámci jejich ztlumovaní a jsem. Myslím v mezičase, kdy se čeká na zpracování další smyčky v mé rutině a tak, aby jsem nerozšiřoval rozsah již použitých 3 Longů (3 krát 4 byte=noty, hlasitost, arpeggio) a mělo by to jít. Testování proběhne 3 krát. V 1/4, 1/2 a 3/4 jedné smyčky rutiny. Nezůstane volný žádný bit :). Tohle platí pro kanály 1 až 3. Čtvrtý kanál může zasahovat ještě jemněji. Pro představu teď je to tak 14 krát.

Tuhle verzi rutiny co teď mám si nechám jako odlehčenou. Ale větší jistota je pro mne to o čem jsem teď psal. Tak snad se to povede :)

Autor:  Lisiak4 [ 28.02.2021, 04:07 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

Koukám že na OC jsou nějaké nové příspěvky. Zatím nemám úplně hotovo, musím ještě přeprogramovat predsekvenci pro sample a udělat pár dalších drobností a kontrol v programu. Zaměřil jsem se na ztlumovaní samplů v 1/4, 1/2, 3/4 taktu v kanálu 1 až 3. Ve čtvrtek jsem dokončil hlavní logiku. Jedná se o 3.verzi. postupně jsem to zjednodušoval a tedy i v rámci náročnosti na CPU urychloval. Ještě jsem vůbec netestoval. Ale něco zahrát to již mohlo. Bylo ticho. Včera večer jsem tam hodil správnou práci s DMA, a to si pak ještě zkontroluji, ale nepomohlo no a jak jsem se vzbudil ve 2:30, tak jsem si říkal, dám do registrů natvrdo všude plnou hlasitost, ale taky nepomohlo, pak jsem si všiml, jak DMAčku dávám, nebo nedávám pokyn aby hrálo, protože místo 80 hexa jsem dával do registru pouze 8. Tak minimálně mi to zatím alespoň hraje. Tak zas někdy :lol:

Autor:  Lisiak4 [ 28.02.2021, 04:09 ]
Předmět příspěvku:  Re: Tvorba hudby + programování v assembleru

A je 3:08, mně to ukazuje o hodinu vyšší čas :lol:

Stránka 1212 Všechny časy jsou v UTC + 1 hodina [ Letní čas ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/