Rozdział 19


BEEP

 

Podsumowanie

BEEP

 

Jeśli jeszcze nie odkryłeś, że ZX Spectrum posiada wbudowany głośnik, przeczytaj broszurę wprowadzającą, zanim przejdziesz do tego rozdziału.

Głośnikiem steruje się przy pomocy polecenia:

 

BEEP czas trwania, wysokość dźwięku

 

gdzie, jak zwykle, czas trwania oraz wysokość dźwięku są dowolnymi wyrażeniami liczbowymi. Czas trwania jest podawany w sekundach, a wysokość w półtonach ponad środkowym C — nuty poniżej środkowego C uzyskuje się za pomocą wartości ujemnych.

Na poniższym rysunku przedstawiono wartości półtonów dla wszystkich nut jednej oktawy na pianinie:

 

 

Aby otrzymać wyższe lub niższe nuty, musisz dodawać lub odejmować 12 dla każdej oktawy, która jest powyżej lub poniżej.

Jeśli masz przed sobą pianino, gdy programujesz jakąś melodię, ten rysunek będzie prawdopodobnie wszystkim, co potrzebujesz do wyznaczenia wartości nut. Jeśli jednak przepisujesz prosto z zapisu nutowego, to sugerujemy ci, abyś narysował sobie rysunek pięciolinii z wartościami dźwięków zapisanych przy każdej linii i między liniami, biorąc pod uwagę klucz i tonację.

Na przykład, wpisz:

 

10 PRINT "Frere Gustav"
20 BEEP 1,0: BEEP 1,2: BEEP .5,3: BEEP .5,2: BEEP 1,0
30 BEEP 1,0: BEEP 1,2: BEEP .5,3: BEEP .5,2: BEEP 1,0
40 BEEP 1,3: BEEP 1,5: BEEP 2,7
50 BEEP 1,3: BEEP 1,5: BEEP 2,7
60 BEEP .75,7: BEEP .25,8: BEEP .5,7: BEEP .5,5: BEEP .5,3: BEEP .5,2: BEEP 1,0
70 BEEP .75,7: BEEP .25,8: BEEP .5,7: BEEP .5,5: BEEP .5,3: BEEP .5,2: BEEP 1,0
80 BEEP 1,0: BEEP 1,-5: BEEP 2,0
90 BEEP 1,0: BEEP 1,-5: BEEP 2,0

 

Gdy to uruchomisz, powinieneś otrzymać marsz pogrzebowy z pierwszej symfonii Mahlera, ten kawałek, gdzie gobliny grzebią amerykańskiego kawalerzystę.

Przykładowo załóżmy, że twoja melodia jest zapisana w tonacji c-moll, jak kawałek Mahlera powyżej. Początek wygląda tak:

 

 

a wartości nut możesz zapisać następująco:

 

 

Zwróć uwagę, że e-mol w tej tonacji wpływa na E nie tylko u góry, zmieniając je z 16 na 15, lecz również na dole, gdzie zmienia je z 4 na 3. Teraz powinno już być łatwo znaleźć wartość dowolnej nuty na pięciolinii.

Jeśli chcesz zmienić tonację danego utworu, najlepiej ustawić sobie zmienną t i dodawać ją do każdej wartości nuty: w ten sposób drugi wiersz przyjmie postać:

 

20 BEEP 1,t+0: BEEP 1,t+2: BEEP .5,t+3: BEEP .5,t+2: BEEP 1,t+0

 

Zanim uruchomisz taki program, musisz zmiennej t nadać odpowiednią wartość — 0 dla tonacji C, 2 dla D, 12 dla C o oktawę wyżej, itd. Możesz dostroić komputer do innego instrumentu przez regulację t wartościami ułamkowymi.

Musisz również wyliczyć czasy trwania każdej nuty. Ponieważ jest to dosyć wolny utwór, wybraliśmy jedną sekundę na ćwierćnutę i oparliśmy resztę na tym wyborze, ósemka pół sekundy itd.

Bardziej elastycznie jest utworzenie zmiennej c, aby przechowywała długość ćwierćnuty i określenie pozostałych czasów względem niej. Wtedy wiersz 20 przyjmie postać

 

20 BEEP c,t+0: BEEP c,t+2: BEEP c/2,t+3: BEEP c/2,t+2: BEEP c,t+0

 

Nadając zmiennej c odpowiednie wartości, możesz z łatwością zmieniać tempo odtwarzania utworu.

Pamiętaj, że z powodu wyposażenia komputera w tylko jeden głośnik, możesz naraz odgrywać jedną nutę, zatem jesteś ograniczony do utworów nie zawierających akordów. Jeśli chcesz więcej, musisz sobie sam dośpiewać. (W rzeczywistości nie jest to prawda - komputer ZX Spectrum potrafi odgrywać również akordy za pomocą techniki próbkowania jednobitowego, jednakże nie da się tego zrobić z poziomu języka BASIC, przyp. tłum.)

Spróbuj zaprogramować sobie parę piosenek — rozpocznij od dosyć prostych, jak "Three Blind Mice". Jeśli nie masz ani pianina, ani nut, zdobądź jakiś bardzo prosty instrument, jak flet, piszczałka lub magnetofon i popracuj na tym nad melodiami. Mógłbyś sobie zrobić tabelę zawierającą wartości dla każdej nuty, którą możesz wygrać na tym instrumencie.

 

Wpisz:

 

FOR n=0 TO 1000: BEEP .5,n: NEXT n

 

To będzie grało tak wysokie nuty, jak można, a następnie zatrzyma się z raportem B integer out of range (B liczba całkowita poza zakresem). Możesz wypisać n, aby dowiedzieć się, jak wysoko program faktycznie zaszedł.

Wypróbuj podobną rzecz, idąc jednakże w dół do tonów niskich. Najniższe nuty będą brzmiały jak trzaski; w rzeczywistości wyższe noty również są uzyskiwane z trzasków w taki sam sposób, lecz szybciej, więc ucho nie potrafi ich rozróżnić.

Dla muzyki dobre są w zasadzie jedynie środkowe dźwięki; niskie nuty brzmią za bardzo jak trzaski, a nuty wysokie są cienkie i mają małą tendencję do ćwierkania.

 

Wpisz ten wiersz programu:

 

10 BEEP .5,0: BEEP .5,2: BEEP .5,4: BEEP .5,5: BEEP .5,7: BEEP .5,9: BEEP .5,11: BEEP .5,12: STOP

 

Odgrywa to gamę C dur, która na pianinie używa wszystkich białych klawiszy od środkowego C do następnego C u góry. Sposób odgrywania tej gamy jest dokładnie taki sam jak na pianinie, a nosi nazwę stroju równomiernie temperowanego, ponieważ odstęp wysokości półtonów jest taki sam wzdłuż całej skali. Jednakże skrzypek zagrałby tę gamę nieco inaczej, strojąc wszystkie nuty tak, aby brzmiały przyjemniej dla ucha. Może to zrobić, po prostu przesuwając swoje palce nieco w górę lub w dół struny, czego z kolei nie potrafi pianista.

Skala naturalna, czyli ta grana przez skrzypka, brzmi tak:

 

10 BEEP .5,0: BEEP .5,2.039: BEEP .5,3.86: BEEP .5,4.98: BEEP .5,7.02: BEEP .5,8.84: BEEP .5,10.88: BEEP .5,12: STOP

 

Być może nie będziesz mógł wykryć różnicy pomiędzy tymi dwoma skalami; niektórzy ludzie to potrafią. Pierwszą zauważalną różnicą jest to, że trzecia nuta jest nieco niższa w skali naturalnie temperowanej. Jeśli jesteś prawdziwym perfekcjonistą, mógłbyś programować swoje melodie tak, aby używały skali naturalnej, zamiast równomiernie temperowanej. Wadą jest to, że chociaż działa to doskonale w tonacji C, w innych tonacjach działa już mniej dobrze — wszystkie one posiadają swoje własne skale naturalne — a w niektórych tonacjach działa to naprawdę paskudnie. Skala równomiernie temperowana jest jedynie nieco rozstrojona, lecz działa równie dobrze we wszystkich tonacjach.

Oczywiście na komputerze stanowi to mniejszy problem, ponieważ możesz stosować sztuczkę z dodawaniem zmiennej t.

 

Niektóre rodzaje muzyki — głównie muzyka indyjska — używa interwałów wysokości dźwięku mniejszych od półtonu. Taką muzykę bez problemu możesz zaprogramować przy pomocy poleceń BEEP; na przykład ćwierćton powyżej środkowego C ma wartość wysokości dźwięku .5.

 

Możesz zmusić klawiaturę do wydawania pisków zamiast kliknięć za pomocą polecenie

 

POKE 23609,255

 

Druga liczba w tym rozkazie określa długość pisku (wypróbuj różne wartości pomiędzy 0 a 255). Gdy wynosi 0, pisk jest tak krótki, iż brzmi jak miękkie kliknięcie.

 

Jeśli jesteś zainteresowany uzyskaniem więcej z dźwiękiem generowanym przez Spectrum, jak np. słuchaniem dźwięku wydawanego przez BEEP na czymś innym od wewnętrznego głośnika, to sygnał ten jest obecny na obu gniazdach "MIC" i "EAR". Wyższy poziom ma na wyjściu "EAR", lecz poza tym sygnały się nie różnią. Możesz wykorzystać to do podłączenia słuchawek do Spectrum. Nie spowoduje to wyłączenia wewnętrznego głośnika. Jeśli naprawdę interesuje cię narobienie mnóstwa hałasu, to podłącz się do wzmacniacza — tutaj poprawny poziom sygnału uzyskasz najprawdopodobniej na gnieździe "MIC" — możesz również nagrać melodię na magnetofon kasetowy  i kazać Spectrum grać równolegle ze samym sobą.

Nie zniszczysz Spectrum, nawet jeśli zrobisz zwarcie na gniazdach "MIC" lub "EAR", zatem eksperymentuj do woli, aż odkryjesz najlepsze urządzenie odtwarzające.

 

Ćwiczenia

1. Przepisz program odtwarzający muzykę Mahlera tak, aby wykorzystywał pętle FOR do powtarzania taktów.

Zaprogramuj komputer tak, aby odgrywał nie tylko marsz pogrzebowy, lecz również resztę pierwszej symfonii Mahlera.

 

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2018 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe