Editor hudby pre programy v pascale
Delphi & Pascal (česká wiki)
Category: KMP (Club of young programmers)
Author: Martin Koleček
Program: Editsnd.pas, Speaker.pas
need: Manual_snd.txt
Author: Martin Koleček
Program: Editsnd.pas, Speaker.pas
need: Manual_snd.txt
S programem EditSnd.exe je mozne generovat soubory s priponou SND. Tyto soubory maji slouzit k ozvuceni programu na profesionalni urovni pomoci PC Speakeru. Vyuziva se k tomu preruseni od casovace nastavene na 100Hz tzn. vzorkovaci frekvence prehravanych zvuku je 100Hz. Nedochazi ke zhrouceni hodin vse je osetreno tak aby sly prehravat zvuky, aby spravne sly hodiny a zaroven aby program mohl vykonavat jine ulohy. Vse bezi na pozadi pres int8 viz. unit speaker.pas.
{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX} Manual k programu EditSND {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX} Obsah: 1. Vyznam editoru 2. Zvukovy format SND 3. Prace s editorem 4. Kontaktni adresa 5. Unit Speaker.pas {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX} 1. VYZNAM EDITORU S programem EditSnd.exe je mozne generovat soubory s priponou SND. Tyto soubory maji slouzit k ozvuceni programu na profesionalni urovni pomoci PC Speakeru. Vyuziva se k tomu preruseni od casovace nastavene na 100Hz tzn. vzorkovaci frekvence prehravanych zvuku je 100Hz. Nedochazi ke zhrouceni hodin vse je osetreno tak aby sly prehravat zvuky, aby spravne sly hodiny a zaroven aby program mohl vykonavat jine ulohy. Vse bezi na pozadi pres int8 viz. unit speaker.pas {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX} 2. ZVUKOVY FORMAT SND Soubor SND generovany programem EditSND.exe je muj vlastni format takze neni mozne pomoci tohoto editoru otevirat soubory s priponou snd ktere se vyskytovaly napr. ve starych hrach, tam je struktura souboru zcela odlisna od te moji. V mem souboru SND jsou dve hlavni casti ato: prvnich 4000 bajtu (2000 wordu - blok dat 1) dalsich 200 bajtu ( 100 wordu - blok dat 2) V souboru snd je mozne ulozit az 50 zvuku [0..49]. Jeden zvuk je popsan dvema cisly: ZACATKEM a DELKOU v tabulce (druhy blok dat) a samotnymi zvukovymi daty (prvni blok dat). Prvnich 2000 wordu(slov) obsahuje hodnoty vysky prehravaneho zvuku. Jsou tam ulozeny hodnoty v rozsahu 0..1000. Pri prehravani se pak jde rychlosti vzorkovaci frekvence word po wordu a nastavuje se vyska prehravaneho tonu na PC Speakeru. Zbyvajicich 200 bajtu: V teto casti je ulozena tabulka jednotlivych zvuku. Kazdy sudy word v teto tabulce predstavuje ZACATEK a kazdy lichy DELKU. Priklad Zvuk[0]: V druhem bloku dat je jeho ZACATEK na nultem wordu a DELKA na prvnim wordu. Priklad Zvuk[49]: V druhem bloku dat word 98 urcuje ZACATEK a word 99 urcuje DELKU Co je to ZACATEK: ZACATKEM zvuku je mineno cislo ktere urcuje kde v prvnim bloku dat zacinaji data tohoto zvuku. Napr zvuk[20] ma ZACATEK=1600 a DELKA=100. Data tohoto zvuku zacinaji v prvnim bloku dat na wordu 1600 a sahaji az k wordu 1700 (ZACATEK+DELKA) Co je to DELKA: Je to pocet wordu(slov) ktere zabira dany zvuk v prvnim bloku dat. Maximalni DELKA jednoho zvuku je 300 wordu coz pri vzorkovaci frekvenci 100Hz odpovida trem vterinam zvuku. Jak asi vyplynulo vysledny soubor snd ulozi 20 vterin ruznych zvuku pro PC Speaker, pri delce jednoho zvuku pul vteriny je to asi 40 zvuku. Pro Zaokrouhleni a taky pro jistotu jsem tam dal moznost ulozit 50 zvuku. {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX} 3. PRACE S EDITOREM Po spusteni programu EditSND.exe se objevi nahore lista a po stisku sipky dolu se otevre menu s nabidkami. Na liste je : napis MENU, napis EDITOR ZVUKU dale je tam soubor= a sem se dosadi jmeno editovaneho souboru a napis F10=EXIT V nabidce ktera se objevi po stisku sipky dolu jsou moznosti: VYTVORIT, ULOZIT, OTEVRIT, EDITOR a NAPOVEDA. V menu se pohybujeme sipkami nahoru a dolu, vyber se provadi stiskem ENTER nebo pomoci klavesovych zkratek. F1 = zobrazi napovedu (ESC=Zpet) F2 = ulozeni, program sam nikde nevyzyva k ukladani proto nezapomente F2 F3 = spusti dialog pro zadani jmena existujiciho souboru k otevreni, jmeno souboru k otevreni stejne jako u vytvareni noveho se zadava ve tvaru jmeno souboru bez pripony dlouhe max. 8 znaku, priponu snd si editor dosazuje sam, potvrezeni jmena se provadi stiskem ENTER F4 = spusti dialog pro vytvoreni noveho souboru, stejne jako u otevirani F5 = pokud mame zadane nejake jmeno souboru a vidime ho na liste tak se spusti graficky editor zvuku (ESC=navrat zpet do textoveho menu) F10 = konec programu F5 Graficky editor zvuku: Zobrazi se seznam jednotlivych zvuku. Co je k videni na jednom radku: Cislo od 0 do 49 udava cislo zvuku, dale ZACATEK=(0..1999), DELKA=(0..300) a ROZSAH kde vidime ktere wordy v prvnim bloku dat ve vyslednem souboru budou obsazeny vybranym zvukem. Sipkami nahoru a dolu se pohybujeme mezi jednotlivymi zvuky na trech obrazovkach (zvuky 0..19 , 20..39 , 40..49 ). Sipkami doleva a doprava menime pozici kurzoru (barevne oznaceni) a vybirame jestli budeme editovat ZACATEK nebo DELKU vybraneho zvuku. Klavesami Insert a Delete pridavame a ubirame jednotky Home a End pridavame a ubirame desitky PgUp a PgDn pridavame a ubirame stovky Rozsahy jake muzeme pomoci techto klaves nastavovat jsou: pro ZACATEK 0..1999 (2000 Wordu = 4000 Bajtu) pro DELKU 0..300 Stiskem Enter nebo F6 na vybranem zvuku spustime obrazovku ktera nam umozni naeditovat jakou podobu bude mit tento zvuk. Na teto obrazovce je dole mala sipka kterou pohybujeme klavesami doprava a doleva a tak se pohybujeme po zvuku po jeho jednotlivych krocich. Vlevo nahore hned vidime jak se meni cislo ktere nam rika jakou vysku bude mit tato cast zvuku. Doleva a doprava se muzeme pohybovat po rozsahu DELKY vybraneho zvuku. Pokud nemame v listu jednotlivych zvuku nastavenou nejakou DELKU zvuku tak se nam na teto obrazovce zobrazi jen delka nula a malou sipkou nepujde pohybovat. Klavesami Insert a Delete pridavame a ubirame jednotky Home a End pridavame a ubirame desitky PgUp a PgDn pridavame a ubirame stovky Rozsah jaky muzeme pomoci techto klaves nastavovat je 0..1000 Jakmile pomoci zminenych klaves nastavime nejake vysky tonu pro PC Speaker vidime to graficky jako sloupce, sloupec se zvysi o jeden pixel pri zvyseni o deset. Muzeme editovat s presnosti i na jednotky pomoci Insert a Delete a vysledny zvuk se bude menit jen to neuvidime na sloupci. Jako cislo v rohu nahore vlevo to vsak videt bude. Stiskem klavesy P muzeme vysledny zvuk hned prehrat, tato moznost prehrani pomoci klavesy P je i v nabidce jednotlivych zvuku tam jak se edituje ZACATEK a DELKA. Navrat do nabidky jednotlivych zvuku provedeme pomoci F5 nebo ESC. Protoze i navrat do textoveho menu se provadi pomoci ESC tak doporucuju spis F5 ale preskoceni az do textoveho menu by nemelo hrozit ani stiskem ESC. Ukladat pomoci klavesy F2 je mozne jak v textovem menu tak v nabidce jednotlivych zvuku tak i na obrazovce s editovanym zvukem. {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX} 4. KONTAKTNI ADRESA Kritiku nebo nejake dotazy ohledne editoru nebo meho formatu snd posilejte na kolecek.martin@email.cz {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX} 5. UNIT SPEAKER.PAS Tato knihovna obsahuje: Procedure InitSound; Procedure ShutdownSound; Procedure LoadSNDFile(Filename:String); Procedure PlaySound(Sample:Byte); Function FPS2s: Boolean; {pomoc pri vypoctu fps pomoci timeru} InitSound Je nutno zavolat na zacatku programu. Tato procedura nastavuje novou obsluhu preruseni 8 (timer) a nastavuje frekvenci timeru na 100Hz. Bez zavolani teto procedury by nebylo mozne prehravat zvuky na pozadi. ShutdownSound Je nutno zavolat na konci programu. Tato procedura vse uvede zase do puvodni podoby, nastavi zpatky starou obsluhu preruseni 8 (timer). LoadSNDFile(Filename:String) Nacte z disku soubor snd se zvuky do pameti. Filename se zadava vcetne pripony napr. LoadSNDFile('test.snd'); PlaySound(Sample:Byte); {Sample v rozsahu 0..49 viz soubor} Spusti prehravani zvuku. Sample=Cislo ktery zvuk z tabulky zvuku chceme prehrat napr PlaySound(20); Pokud hned po jednom zavolani PlaySound zavolame dalsi tak ze se jeste nestacil prehrat predchozi zvuk tak dojde k tomu ze se ten drivejsi zasatavi a zacne hrat novy. Kazde zavolani PlaySound spousti nove prehravani a trvale rusi predchozi. a nakonec funkce FPS2s: Boolean {pro prehravani zvuku neni treba} Toto jsem do unitu pridal jako pomocnou rutinu pri vypoctu fps. Funkce vraci True po dobu jedne vteriny a po dobu druhe vteriny zase vraci False. Pak zase true atd. Priklad programu; USES CRT,Speaker; Begin InitSound; LoadSNDFile('test.snd'); PlaySound(0); Delay(2000); ShutdownSound; End. {XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}