Norbert Kilen - Programowanie Kart Dzwiekowych w Turbo Pascalu.pdf

(622 KB) Pobierz
436331399 UNPDF
Wydanie pierwsze
ISBN 83-85455-69-8
SPIS TREŚCI
Spis treści
SPIS ILUSTRACJI 6
WSTĘP 7
1. SOUND BLASTER - PODSTAWY 9
2. OBSŁUGA PLIKÓW VOC 11
2. l STRUKTURA PLIKU VOC 11 2.2 STEROWNIK CT-VOICE 16
SPOSÓB KORZYSTANIA ZE STEROWNIKA 16 OMÓWIENIE FUNKCJI STEROWNIKA 20
ZASADY KORZYSTANIA Z FUNKCJI 27 BIBLIOTEKA VOC.TPU 28 PRZYKŁADY 38 2 3
OBSŁUGA WIĘKSZYCH PLIKÓW 42
SPIS TREŚCI
3. OBSŁUGA PLIKÓW CMF 53
3.1 STRUKTURA PLIKÓW CMF 53 Blok nagłówka 54 Blok instrumentów 55 Blok
muzyczny 55
3.2 FORMATY SBI i IBK 55
3.3 STEROWNIK SBFM 57
SPOSÓB KORZYSTANIA ZE STEROWNIKA 58 OPIS FUNKCJI STEROWNIKA 59
ZASADY KORZYSTANIA Z FUNKCJI 63 BIBLIOTEKA CMF.TPU 64
3.4 PRZYKŁADY 73
4. PROGRAMOWANIE DSP 79
4.1 ZASADY OBSŁUGI DSP 79 Zerowanie DSP 80 Zapis do DSP 80 Odczyt z
DSP 81 Obsługa przerwania DSP 81
4.2 TRYB BEZPOŚREDNI 82
4.3 Tryb DMA 93
4.4 OBSŁUGA ZŁĄCZA MIDI 97 Tryb bezpośredni 98 Tryb przerwań 99
4.5 KOMENDY DSP 99 Rozkaz 1xh 99 Rozkaz 2xh 101 Rozkaz 3xh 101 Rozkaz
40h 102 Rozkaz 7xh 102 Rozkaz Dxh 102 Rozkaz E l h 103
4.6 BADANIE KONFIGURACJI SB 104
5. PROGRAMOWANIE SYNTEZERA FM 109
5. l FUNKCJONOWANIE SYNTEZERA FM 109
SPIS TREŚCI
5.2 ZASADY OBSŁUGI SYNTEZERA FM 112 Zapis danej do rejestru 113 Odczyt rejestru
statusowego 113
5.3 PRZYKŁADY 122
6. SYGNAŁY l ICH PRZETWARZANIE 131
6. l Co to są sygnały i jak je dzielimy 131
6.2 Przetwarzanie analogowo-cyfrowe 133 Próbkowanie 134 Kwantyzacja 135
6.3 Filtracja cyfrowa 136
6.4 Analiza widmowa sygnału 139
6.5 Rozpoznawanie mowy ludzkiej 140
7. FORMAT WAV 147 LITERATURA 151
6
SPIS ILUSTRACJI
1.
2.
3.
4.
5.
6.
7.
8.
9.
Karta Sound Blaster w wersji 2.0 10
Struktura pliku VOC z pętlą Repeat Loop 15
Mechanizm odwoływania się do funkcji CT-VOICE 17
Obwiednia ADSR (Attack/Decay/Sustain/Relase) 110
Synteza operatorowa 112
Dwa typy obwiedni 116
Synteza FM i addytywna 120
Kształt fali generowanej przez oscylator operatora 121
Widmo prążkowe 132
10. Przetwarzanie analogowo-cyfrowe 134
11. Efekt niejednoznaczności 134
12. Aliasing 135
13. Przykładowa charakterystyka kwantyzatora 136
14. Charakterystyki filtrów dolno- i środkowoprzepustowego 137
15. Wpływ dobroci na kształt charakterystyki filtru 137
16. Ograniczenie zakresu zmian amplitudy 141
17. Przykładowy wykres widmowy 144
18. Widmo prążkowe 145
19. Aproksymacja przebiegu wykresu widmowego 145
WSTĘP
WSTĘP
Od kilku już lat multimedia to dziedzina zdobywająca coraz większą popularność. Kluczową rolę w technice
multimedialnej odgrywa dźwięk. Jego źródłem są specjalne karty - np. opisywany w książce Sound Blaster.
Karty takie są też obsługiwane przez programy rozrywkowe. Niestety mało jest publikacji poświęconych
zasadom ich programowania i omawiających to zagadnienie w sposób wyczerpujący. Mam nadzieję, że moja
książka wypełni choć w części tę lukę i okaże się pomocna dla wszystkich zainteresowanych tworzeniem
oprogramowania współpracującego z kartami SB. Wszystkie przykłady prezentowane w pracy zostały
przygotowane przy użyciu kompilatora Turbo Pascal w wersji 6.0 firmy Borland Inc. Ich teksty źródłowe
oraz kompilaty znajdzie Czytelnik na dyskietce dołączonej do książki. Zakładam, że Czytelnik ma
umiejętność programowania w dowolnym języku oraz elementarną wiedzę na temat funkcjonowania
systemu DOS i architektury komputerów PC.
Mimo że przedstawione przykłady napisane zostały w Pascalu, nic nie stoi na przeszkodzie, aby opisywane
w pracy algorytmy wykorzystać pisząc programy w innych językach - np. C, Assembler. Ostatni rozdział
poświęcony jest zagadnieniom związanym z przetwarzaniem dźwięku: filtrom cyfrowym, analizie
widmowej, rozpo-
WSTĘP
znawaniu mowy. Traktować go należy wyłącznie jako wprowadzenie do opisywanych tematów.
Na koniec chciałbym podziękować Matce oraz Kasi Byczkowskiej bez pomocy której książka ta być może w
ogóle by nie powstała
Autor
9
SOUND BLASTER - PODSTAWY
l. SOUND BLASTER - PODSTAWY
Karta Sound Blaster po raz pierwszy zaprezentowana została w 1989 roku. Kilka miesięcy później była już
najlepiej sprzedającym się rozszerzeniem muzycznym przeznaczonym dla komputerów PC. Przyczyny
niewątpliwego sukcesu to z pewnością dość duże możliwości i niska cena przy zachowaniu zgodności
programowej z wcześniejszym dominantem - kartą AdLib firmy AdLib Inc. Obecnie, nawet w chwili gdy
faktycznym standardem są już karty 16-bitowe, poczciwy SB wciąż trzyma się dobrze. Dzieje się tak między
innymi dlatego, że najprostszą kartę zgodną ze standardem SB 2.0 nabyć już można za cenę niższą niż 100
złotych.
Oto garść podstawowych informacji na temat parametrów karty Sound Blaster:
• 11-głosowy syntezer FM. Może pracować w dwóch trybach:
w trybie melodycznym (9 głosów) i w trybie rytmicznym (możliwość syntezy sześciu różnych brzmień i
korzystania z pięciu brzmień perkusyjnych: bęben basowy, talerz, werbel, bębenek i high hat). Syntezer
FM zapewnia zgodność z kartą AdLib -oparty jest na tym samym układzie (FM1312).
• Możliwość zapisu i odtwarzania próbkowanych dźwięków. Konwersja analogowo-cyfrowa i cyfrowo-
analogowa realizowana jest przez serce karty SB - układ DSP [Digital Sound Processor).
ROZDZIAŁ 1
Próbkowanie i odtwarzanie kolejnych próbek dźwięku może odbywać się z różną (w zależności od wersji karty)
częstotliwością. l tak dla kart w wersjach l.x maksymalna częstotliwość próbkowania wynosi 12 kHz,
maksymalna częstotliwość odtwarzania - 23 kHz, w wersji 2.0 (wymiana DSP z 1.05 na 2.00) maksymalna
częstotliwość próbkowania to 15 kHz, a odtwarzania - 44,1 kHz. Zapis dźwięku we wszystkich wersjach karty
jest dokonywany z 8-bitową rozdzielczością. Układ DSP zapewnia możliwość kompresji samplowanego
sygnału w czasie rzeczywistym według trzech algorytmów (ADPCM 4:1, 3:1, 2:1). Dekompresja może być
realizowana w czasie rzeczywistym.
• Możliwość współpracy z urządzeniami MIDI. Urządzeń wyposażonych w złącza typu MIDI niestety nie możemy
połączyć bezpośrednio do karty Sound Blaster - konieczne jest użycie tzw. Sound Blaster MIDI Kit. Jest tak,
ponieważ na karcie nie znajdują się standardowe gniazda MIDI (DIN).
• Możliwość współpracy z joystick'iem analogowym. W wersji 1.0 karty znajduje się też moduł CMS upgrade. Był
on instalowany w celu zapewnienia zgodności z poprzednim wyrobem firmy - kartą Gamę Blaster, zawierającą
układ 12-głosowej syntezy AM.
Rysunek l przedstawia rozmieszczenie najważniejszych elementów karty Sound Blaster 2.0.
h UNE-IN LLJP W E MIKROFON
|Potefiqomeł fegutwy gtosnosd
WYStUCHAWK.
Złqcze JOY/MO
Rys.! Karta Sound Blaster w wersjl 2.0
11
OBSŁUGA PLIKÓW VOC
2. OBSŁUGA PLIKÓW TOĆ
Format VOC (Creative Voice File) to przyjęty przez firmę Creative Labs Inc. format zapisu plików
zawierających dane dźwiękowe. Pliki tego typu obsługują programy dołączane do kart serii Sound Blaster.
Przykładem mogą być programy VOXK1T i VEDIT. Zaletą jest duża funkcjonalność i uniwersalność
plików VOC. Ich obsługa jest bardzo prosta - informacje w nich zawarte całkowicie opisują sposób
odtwarzania (w strukturze VOC znalazło się miejsce na dane dotyczące częstotliwości próbkowania
dźwięku, a także sposobu kompresji danych). Tematem tego rozdziału jest stosowanie sterowników
dostarczanych przez Creative Labs Inc. przy programowaniu obsługi plików zapisanych w tym formacie.
2.1 STRUKTURA PLIKU VOC
Zasadniczo w strukturze pliku VOC wyróżnić można dwa bloki: blok nagłówka i blok danych. Blok
nagłówka lo blok przechowujący identyfikator pliku, numer wersji oraz (bardzo ważne przy
programowaniu) adres początku bloku danych. Blok danych to naturalnie część pliku przeznaczona do
przechowywania danych dźwiękowych. Może być on podzielony na kilka, funkcjonalnie różnych, części.
ROZDZIAŁ 2
Blok nagłówka
Położenie względem początku pliku
Opis
0-19
20-21
21-23
24-25
Opis pliku. W tym miejscu przechowywany Jest napis:
,.Crealive Voice File" oraz bajt o wartości szesnastkowej 1A.
Przesunięcie początku bloku danych względem początku pliku. Wartość lego stówa wykorzystujemy programując
obsługę pliku VOC (długość nagłówka dla różnych wersji formatu może być przecież inna).
Numer wersji formatu pliku. Młodszy bajt przechowuje mniej znaczącą część numeru, starszy - bardziej znaczącą.
Kod identyfikacyjny pliku VOC ułatwiający rozpoznanie pliku zapisanego w tym formacie. Jest równy sumie słowa
przechowującego numer wersji formatu i słowa o wartości szesnastkowej 1234.
Blok danych
Ta część pliku podzielona jest na wiele podbloków spełniających różne funkcje. Regułą jest tu, że pierwszy bajt
podbloku specyfikuje jego typ. W zasadzie programista nie musi wnikać w strukturę poszczególnych podbloków,
gdyż za odpowiednią interpretację zawartych w nich danych odpowiedzialne są funkcje sterowników CT-VOICE i
CVDSK, opisywane w dalszej części rozdziału. Znajomość funkcji podbloków jest jednak konieczna do pełnego
wykorzystania możliwości dostarczanych programiście.
A oto jak przedstawiają się dostępne typy podbloków:
• Typ O - Terminator (podblok kończący)
Pojedynczy bajt o wartości O (BLKTYPE=0). Ten podblok kończy cały blok danych. Procedura odtwarzająca
dźwięk kończy działanie po napotkaniu tego podbloku.
• Typ l - Voice Data (dane dźwiękowe)
Podblok przechowujący spróbkowany dźwięk wraz z opisem. Jego struktura przedstawia się następująco:
1 OBSŁUGA PLIKÓW VOC
Przesunięcie Opis
O Bajt o wartości l używany przy identyfikacji podbloku (BLKTYPE=1).
l Trzy bajty opisujące ilość bajtów zajmowanych przez blok (BLKLEN). Liczba bajtów
przeznaczonych na próbkę to wartość pola BLKLEN pomniejszona o 2.
4 Bajt, którego wartość informuje o częstotliwości z jaką dźwięk był spróbkowany (SR).
Przechowywaną w nim liczbę obliczyć można korzystając ze wzoru:
SR = 256- 1000000/f gdzie f to częstotliwość wyrażona w Hz.
5 Bajt opisujący metodę zastosowanej kompresji danych (PACK). Znaczenie różnych wartości:
O - bez kompresji
1 - kompresja metodą 4-bit
2 - kompresjo metodą 2.6-bit
3 - kompresjo 2-bit
6 Początek ciągu bajtów próbki.
Typ 2 - Voice Continuation (kontynuacja)
Podblok przechowujący dane będące kontynuacją zapisanych w podbloku typu l. Ten typ podbloku
przydatny jest w sytuacjach, gdy długość zapisywanej próbki jest na tyle duża, że 3 bajty pola BLKLEN
w podbloku l nie okazują się nie wystarczające.
Przesunięcie Opis
O Bajt BLKTYPE o wartości 2.
l Trzy bajty opisujące długość bloku (BLKLEN).
4 Początek ciągu bajtów próbki.
Typ 3 - Silence (cisza)
Podblok definiujący okres ciszy. Użycie podbloków tego typu może okazać się przydatne tam, gdzie
zależy nam na oszczędności pamięci dyskowej (także operacyjnej na czas odtwarzania), a próbka
dźwiękowa zawiera okresy ciszy (przynajmniej względnej).
ROZDZIAŁ 2
Przesunięcie Opis
Bajt BLKTYPE o wartości 3.
Trzy bajty pola BLKLEN. Wartość tego pola dla tego typu podbloku wynosi zawsze 3.
Dwubajtowe pole PERIOD określające czas trwania ciszy wyrażony w jednostkach cyklu próbkowania
(odwrotność częstotliwości próbkowania wyrażonej wHz).
Bajt pola SR, którego wartość wyliczamy według wzoru przedstawionego przy opisie typu
Voice Data.
Typ 4 - Marker
Funkcja podbloku tego typu jest dość specyficzna. Mianowicie sterownik CT-VOICE, podczas odtwarzania
dźwięku, modyfikuje słowo statusowe wartością przechowywaną w tym podbloku. Badanie słowa statusowego
pozwala więc sprawdzić, która część bloku danych pliku VOC jest aktualnie odtwarzana. Ułatwić lo więc może
realizację prezentacji graficzno-dźwięko-wych, gdzie kluczową rolę spełnia synchronizacja dźwięku z
wyświetlanym obrazem.
Przesunięcie Opis
O Bajt BLKTYPE o wartości 4.
l Pole BLKLEN o długości trzech bajtów i stałej wartości 2.
4 Dwubajtowy marker o wartości zawierającej się w przedziale (l.FFFEh).
Typ 5 - ASCII text (tekst ASCII)
W zasadzie funkcja tego podbloku ograniczona jest do przechowywania ciągu znaków ASCII. Zastosowanie tego
typu jest raczej ograniczone (w zasadzie wyłącznie komentarze dodawane do zdigitalizowanych dźwięków).
Przesunięcie Opis
O Jednobajtowe pole BLKTYPE przechowujące wartość 5.
1 OBSŁUGA PLIKÓW VOC
l Pole BLKTYPE o długości 3 bajty i wartości równej długości ciągu znaków ASCII
powiększonej o l.
4 Początek ciągu ASCII zakończonego bajtem o wartości równej 0.
Typ 6 - Repeat Loop (początek pętli repetycji)
Jeżeli zdarzy się, że jakiś dźwięk chcemy odtwarzać cyklicznie większą ilość razy, to idealnym
rozwiązaniem wydaje się być zastosowanie podbloku tego typu. Pozwala on na wielokrotne odtwarzanie
próbki dźwiękowej umieszczonej w podblokach umieszczonych po nim. Przy założeniu, że plik zawierać
ma odgłos (np. strzału - do wykorzystania w grze zręcznościowej) powtarzany cyklicznie n razy i
zapisany w podbloku typu Voice Data, struktura tego pliku wyglądać może jak na rysunku 2.
Nagłówek pliku
BInkAmych
——^ Repeat Loop Vaice Dola
——— End Repeat Loop Terminator
Rys. 2 Struktura pliku VOC z pętlą Repeat Loop Struktura podbloku Repeat Loop:
Przesunięcie Opis
Typ bloku (BLKTYPE=6). Pole BLKLEN o wartości 2.
Dwa bajty przechowujące licznik repetycji (COUNT). Słowo przechowywane w tym polu
determinuje liczbę powtórzeń. Po napotkaniu podbloku End Repeat Loop sterownik CT-
YOICE powtórzy odtwarzanie następujących po Repeat Loop COUNT razy. Łączna suma
odtworzeń jest więc równa COUNT+1. Warto wiedzieć, że jeśli zadana liczba powtórzeń
równa będzie FFFFh, pętla realizowana będzie bez końca (tzn. aż do momentu użycia
funkcji zakończenia operacji - nr 8).
POZDZIAŁ 2
Typ 7 - End Repeat Loop
Podblok tego typu należy umieścić zaraz po ciągu podbloków, które chcemy objąć działaniem pętli
zainicjowanej przez pod-blok typu Repeal Luop.
Przesunięcie Opis
Pole BLKTYPE o wartości 7. Pole BLKLEN o wartości 0.
2.2 STEROWNIK CT-VOICE
Sterownik CT-VOICE (Crealive memory modę Voice driver) jest dołączany, wraz z resztą oprogramowania, do
kart dźwiękowych serii Sound Blasier. Jego kod znajduje się w pliku CT-VOICE.DRV. Udostępnia on
Zgłoś jeśli naruszono regulamin