ZX Spectrum > PROGRAMOWANIE

Pytania od bardzo początkującego

<< < (12/12)

Tygrys:
Nie, nie można. Podczas wykonywania BEEP .. wykonuje się tylko BEEP.

Jeżeli chcesz mieć muzykę to musisz bardzo mocno pomieszać komendy BEEP z innymi instrukcjami, tak aby czas wykonywania tych innych był na tyle krótki, aby dźwięki z głośniczka stanowiły rodzaj muzyki.

W przypadku efektów dźwiękowych jako wynik naciśnięcie klawisza czy innej akcji jest znany stary sposób, np taki:

--- Kod: ---10 FOR i=0 TO 10
20 BEEP .01,i*1
50 NEXT i

--- Koniec kodu ---

Dobór czasu trwania oraz wysokości dźwięku musisz sobie dobrać sam, lub też stworzyć tablicę i z niej czytać dane... lub też wprowadzić szereg BEEPów po kolei.

Mam nadzieję że chociaż trochę pomogłem ;) Jeżeli nie - będziemy myśleć dalej.\

damik:
Lepiej do muzyczki w trakcie gry stosować generatory AY'ka bo nie wstrzymują wykonywania programu podczas generowania dźwięku, jednak tutaj trzeba by bawić się już instrukcjami OUT programując bezpośrednio jego rejestry sekwencyjnie np w głównej pętli programu z jakiejś tablicy DATA lub wcześniej załadować te dane rejestrów do DIM.
BEEP w Basic'u będzie Ci dość mocno spowalniał program a żeby tego uniknąć trzeba będzie stosować bardzo krótkie milisekundowe dźwięki, a jeśli dźwięk/ton miałby trwać dłużej to trzeba by go szatkować co daje efekt popierdywania pisząc to w samym Basicu.  ;D

mad1:
Dziękuję za odpowiedzi, szczerze mówiąc spodziewałem się takich ale jednocześnie miałem nadzieję, że jest jakiś patent. Tygrys dzięki za podpowiedź,  potestuję i zobaczę czy gra jest warta świeczki. Damik AY to póki co dla mnie zbyt odległy temat na dziś, nie chce wchodzić w te rejony. Jeśli program znacznie ucierpi na szybkości to rzeczywiście nie ma sensu się w to bawić. 

damik:
Patent jakiś chyba jest, ale wymaga już raczej znajomości assemblera i ogarnięcia mechanizmu kontroli przerwań procka Z80 ;)
Jednak to już temat do innego wątku... ale co ja tam się będę wymądrzał kiedy są tu na forum już od tego specjaliści w kodowaniu (ja tam tylko ogarniam mały śrubokręt i lutownicę)  8)

Kiedyś już gdzieś widziałem jakąś gotową procedurkę w kodzie maszynowym ładowaną z Basic'a w kodzie maszynowym grającą muzyczki w tle na przerwaniach podczas wykonywania Basic'owych programów, tylko teraz już nie jestem pewien czy to było na ZX Spectrum czy na Amstrad CPC.
Może ktoś podpowie gotowca... ;)

matofesi:
Prosta sprawa - w samym BASICu się nie da i nie ma co kombinować - BEEP wyłącza przerwania, żeby dźwięk brzmiał "przyzwoicie". Jak się zmodyfikuje ROM i usunie to wyłączanie to BEEP dalej zajmuje tyle samo czasu i zatrzymuje wykonanie programu, ale za to przerwania działają a to powoduje, że BEEP "pierdzi" ;)
Można oczywiście zrobić jakiś player w ASMie beepający na przerwaniach, ale żeby brzmiał sensownie będzie zjadał kosmiczne ilości procesora a efekt nadal będzie taki sobie. Proste efekty można uzyskać metodą sugerowaną przez Tygrysa, ale cokolwiek bardziej skomplikowanego albo zje procesor albo będzie brzmiało mocno tak sobie. Albo oba na raz.
AY można "popychać" OUTami ale to też raczej do prostych efektów - cokolwiek więcej będzie wymagało na tyle dużo OUTów, że znowu zje procesor a efekt będzie średni. Sensowne rozwiązanie to muzyczka AY grająca na przerwaniach (da się zrobić stosunkowo prosto) oraz program w BASICu unikający instrukcji wyłączających przerwania.

Nawigacja

[0] Indeks wiadomości

[*] Poprzednia strona

Idź do wersji pełnej