Pascal és Assembly nyelven Szerző: László József Kiadó: ComputerBooks Kiadó, 1999 oldalszám: 530 ISBN: 963 618 197 7
A könyvről A Hangkártya Programozása című könyv először 1995-ben jelent meg a ComputerBooks kiadó gondozásában. A kötet tartalmazta azokat az alapvető ismereteket, amelyek az akkor forgalomban lévő hangkártyák programozásához szükségesek voltak. Az azóta eltelt idő alatt fény derült a kötet néhány hiányosságára és az apróbb hibákra, mindemellett természetesen a számítógép-technika is jelentős fejlődésen ment keresztül. A kiadó és a szerző ezért egyaránt úgy ítélték meg, hogy szükséges az ismeretanyag átdolgozása, a hibák korrigálása és az újdonságok bemutatása is. A könyv eredeti fejezeteit tehát átdolgoztuk, javítottuk, újakkal egészítettük ki. Ezt a módosított és bővített kiadványt tartja most kezében az Olvasó, amely az első kiadáshoz hasonlóan azokhoz a programozókhoz, fejlesztőkhöz (minden korosztályhoz iskolástól a gyakorlott rendszerfejlesztőig) szól, akik eléggé elszántak a számítógép alacsony szintű – de nem alacsony színvonalú – hardverközeli programozásához.
A számító-gépes hangfeldolgozás igen széles skálájú tudomány, amely magában foglalja a digitális jelfeldolgozást, a digitális beszédfeldolgozást, a hangszintetizálást és a hangfelismerést is. Hogy mindezekre teljes részletességgel kitérjünk, ahhoz még tíz ilyen könyv is kevés lenne. Itt most csak az IBM PC hangkeltési lehetőségeiről lesz szó. Az IBM PC-hez több különböző típusú hangkártyát gyártanak, amelyek közül három-négy eléggé elterjedt Magyarországon is. Ezeknek a kártyáknak a programozását írjuk le ebben a könyvben.
A programozáshoz szükség lesz valamilyen programozási nyelvre is. A hangkártyákat szerintünk – mint általában a legtöbb hardverelemet – alacsony szintű nyelven lehet programozni a leghatékonyabban. Ezért a könyv példáinak megértéséhez elengedhetetlen az ASSEMBLY nyelv, az Intel processzorok gépi kódú programozásának ismerete. Programjainkat BORLAND PASCAL-ban fog-juk írni, amelyben lehetőség van assembly betétek elhelyezésére és külső assembly modulok beillesztésére.
Az első fejezetekben a digitális jelfeldolgozás és a hangkeltés alapfogalmairól szólunk. Megnézzük majd, hogy mik is azok a jelalakok, milyen, zenében használatos fogalmakat kell ismerni, hogyan történik az analóg jelek mintavételezése és a digitális hangminták lejátszása. Ez után a különböző hangkártyák regisztereit és azok használatát ismertetjük. Rövidebb (és néhol talán kicsit hosszabb) példaprogramok mutatják majd be az adott lehetőségeket, az elterjedt programozói módszereket, egy-egy alapvető feladat tipikus megoldását.
Nem állítjuk persze, hogy mindez könnyű lesz. Ahhoz, hogy valaki hatékonyan tudjon programozni egy hangkártyát, egy kicsit zenésznek, egy kicsit fizikusnak és matematikusnak és termé-szetesen gyakorlott programozónak is kell lennie! Bizony egyik-másik program elsőre kissé talán bonyolultnak tűnhet. Hogy az Olvasó könnyebben megérthesse ezeket, példáinkban ezért nem töre-kedtünk az optimális sebességre vagy a méretre, inkább az érthetőséget és az áttekinthetőséget tartottuk elsődleges szempontnak.
Reméljük, hogy a Hanghártya Programozása első kiadásához hasonlóan ez a javított és módosított változat is hasznos forrása lesz az Olvasónak.
Tartalomjegyzék
Előszó
Bevezetés
Alapfogalmak
Analóg jelek osztályozása A hang Hullámforma AM, FM és a többiek Amplitúdómoduláció (AM) Frekvenciamoduláció (FM) Hangszín Spektrum Burkológörbe, ADSR generátor Analóg jelek digitális feldolgozása Mintavételezés és kvantálás Analóg-digitális átalakítás (ADC) Digitális-analóg átalakítás (DAC) Periodikus függvények Fourier-analízise (sorba fejtés) Zene, zene, zene Kotta és hangjegyek Hangsorok, akkordok Gitárakkordok
A beépített Assembler használata
Assembly blokkok Direktívák Szimbólumok Címkék Assembly eljárások és függvények Paraméterek és visszaadott értékek
Az ADLIB hangkártya
Az ADLIB kártya regisztereinek elérése Az ADLIB regiszterkészlete Az ADLIB kártya programozása Az ADLIB unit Egyetlen hang kiadása A regiszterek csoportos módosítása A hang kitartása a Sustain szinten Az burkológörbe szakaszainak manipulálása A skálatényező (KSR bit) használata Összetett hangzások, az operátorok eltérő beállítása Nyomkövetés, hibafelderítés Több csatorna használata A ritmushangszerek használata Megszakításvezérelt lejátszóprogram Események Az adathalmaz formátuma A lejátszó (player) Típusok Állandók Változók Eljárások A főprogram A fordító (compiler) Típusok Állandók Változók Eljárások A főprogram Szintaktikai szabályok Példaprogramok a lejátszóhoz Egyszerű hangsor egy csatornára Összetett hangsor egy csatornára Akkordok több csatornán Az ADLIB alkalmazása játékprogramokban Elméleti alapok Dinamikus csatornaallokáció, prioritások Megvalósítási szempontok az ADLIB kártyán Végrehajtó egység Hangprogram utasítások Az FMDRV egység Hangprogramok készítése, szerkesztési szabályok Példa az FMDRV unit használatára
A SOUND BLASTER hangkártya
ADLIB kompatibilitás Szoftveres támogatás A DSP egység A DSP egység inicializálása Parancs és adat kiírása a DSP egységre Adat beolvasása a DSP-ről DSP átviteli módok felvételkor DSP átviteli módok lejátszáskor ADPCM DSP parancsok A DSP egység programozása A DSP unit Típusok, állandók Eljárások, függvények Hullámformák előállítása a DSP egységgel Változók Eljárások A főprogram Hangfelvétel direkt módon a DSP-vel Hangfelvételek visszajátszása direkt módon Hosszabb hangfelvételek készítése Visszajátszás A DMA vezérlő és a megszakításvezérlő A DMA vezérlő programozása A DMA átvitel korlátai Az IRQ vezérlő programozása Az egyciklusú DMA átvitel Az SB_DMA unit Állandók, változók Eljárások Felvétel DMA átvitellel Lejátszás DMA átvitellel Időállandók kiszámítása Az auto-init DMA átvitel Az SB_AIDMA unit Hullámforma generálás auto-init DMA módban Hangfelvétel auto-init DMA módban Lejátszás auto-init DMA módban Az egyciklusú és az auto-init DMA összehasonlítása Összegzés
A Sound Blaster Pro hangkártya
Hardverbeállítások Csatlakozók Szoftveres támogatás I/O-kiosztás Az FM chip programozása Egyéb módosítások A keverő programozása Regisztertükrök Az SBPRO unit Sztereó hang a kimeneten Összefoglalás
A Sound Blaster 16 hangkártya
A Sound Blaster 16 lehetőségei Hardverbeállítások Csatlakozók Telepítés (installálás), szoftveres támogatás Az OPL–3 FM chip programozása Négyoperátoros FM hanggenerálás OPL–3 regiszterkészlet AM Op1 Állandók, változók Eljárások Négyoperátoros hang A továbbfejlesztett DSP egység (ASP) DSP parancsok Bájtszekvenciális parancsok A keverő programozása Az SB16MIX unit A 16 bites DMA használata Az SB16DMA unit 16 bites hullámforma generálás 16 bites felvétel 16 bites lejátszás Összefoglalás
Sound Blaster AWE 32/64 Belső felépítés Joystick port MIDI port Bus Interface MCU (MIDI Controller Unit) ASP (Advanced Sound Processor) D/A Mixer Waveblaster MCD Interface Amplifier EMU8000 subsystem A Sound Blaster kártyák szoftvertámogatása Diagnose Mixerset DRV könyvtár SAMPLES könyvtár Az autoexec.bat és a config.sys módosítása A PNP kártyák beállítása
A Sound Blaster kártyák alkalmazása játékprogramokban
A digitális hangminták algoritmikus kezelése A hangerő (amplitúdó) megváltoztatása A hangminták típuskonverziója A hangminták keverése A hangmagasság megváltoztatása Interpolálás, decimálás A SAMPLES unit Virtuális csatornák Megvalósítás, feltételek, szempontok Megszakításos feed AZ SB_IDRV unit Hangkeltés az SB_IDRV unittal Auto-init DMA feed A blokkok feldolgozása A hangminták összekeverése blokkokban Az SB_DDRV unit Hangkeltés az SB_DDRV unittal Összefoglalás
A GRAVIS ULTRASOUND hangkártyák
A Gravis Ultrasound lehetőségei Hardver áttekintés Csatlakozók I/O címek A GUS DRAM memória MIDI interfész Joystick A GF1 hangprocesszor (Voice Sound Synthetizer) Különböző verziójú kártyák A Gravis Ultrasound regiszterei Az ULTRASND környezeti változó Regiszterek MIDI regiszterek GF1 globális regiszterek GF1 csatornaparaméter regiszterek Általános regiszterek Törtszámok Automatikus hangerő-szabályozás „Megszakadok . . . " A GUS unit Állandók Eljárások, függvények A Gravis Ultrasound tesztelése Egyszerű szinuszos hang előállítása Oktávok Hangminta lejátszása Megszakítások A Gravis Ultrasound Extreme hangkártya A Gravis Ultrasound PNP hangkártyák Verziók, kompatíbilitás Hardver paraméterek Szintézer Effektusok Codec Más hangkártyák emulációja Szoftvertámogatás Setup Iwinit MOD lejátszó Gravis kártyára Hiányosságok A Gravis Ultrasound hangkártyák alkalmazása játékprogramokban Hangkeltés a GUSGAME unittal
Egyéb megoldások játékprogramokhoz
Összetett audio driver készítése Hangkártya típusok Detektálás A hangok tárolása Inicializálás, befejezés Hangkeltés A botkormány kezelése A botkorány állapotának lekérdezése Kalibráció Digitális botkormányok illesztése a PC-hez
Zenefájl formátumok
Az SBI fájlok formátuma Az SBI unit A CMF fájlok formátuma CMF fejléc A CMF fájlok lejátszása A VOC fájlok formátuma A WAV fájlok formátuma A MOD fájlok formátuma Effektus parancsok Extra effektus parancsok Hangminták MOD fájlok kilistázása A MID fájlok formátuma Az idő tárolása: dinamikus adathossz MIDI események Hang csatornaüzenetek Rendszerüzenetek MID fejléc Exkluzív üzenetek Metaesemények A GENERAL MIDI szabvány A ROLAND GS MIDI szabványa
Összegzés
ADLIB Sound Blaster 1.0 Sound Blaster 1.5 Sound Blaster 2.0 Sound Blaster Pro 1.0 Sound Blaster Pro 2.0 Sound Blaster 16/16ASP Sound Blaster AWE 32/64 Gravis Ultrasound Gravis Ultrasound PNP
A. Függelék
MIDI adattáblázatok
B. Függelék
SBI hangszerek paraméterei
C. Függelék
Sound Blaster AWE 32 nem regisztrált MIDI paraméterek
D. Függelék
A CT-VOICE.DRV meghajtóprogram funkciói
E. Függelék
Az SBFMDRV.COM meghajtóprogram funkciói (CMF driver)
F. Függelék
CSATLAKOZÓK
G. Függelék
Az OPL-2 és OPL-3 FM chipek regiszterkészlete
H. Függelék
Sound Blaster DSP parancsok Sound Blaster PRO egyéb DSP parancsok Sound Blaster 16 egyéb DSP parancsok Sound Blaster PRO kerevő regiszterek Sound Blaster 16 keverő regiszterek
Irodalomjegyzék
Tárgymutató
|