Norbert Kilen - Programowanie Kart Dzwiekowych w Turbo Pasca.doc

(661 KB) Pobierz

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 WE 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:

13

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)

...

Zgłoś jeśli naruszono regulamin