1

Temat: przykladowy SFX_ENGINE

przykład injekcji:


sfx_engine obsluguje 4 kanaly dla sfx - w przykladzie wzbudzam tylko jeden,
zeby SFX_ENGINE nie uzywal konkretnego kanalu należy nadać mu wartosc $80 (np. zarezerwować kanał dla muzyki)
format danych:
linia:
%0 time,audf,audc
%11 repeat,audf,audc
audf
%10 repeat,audf,audc
audc
koniec: 0,1
reload: 0,0

zalety: SFX moze być bardziej skomplikowany od instrumentow uzywanych w playerach muzyki lub np. może być częścią muzyki,
dane mozna generowac do bufora playera muzyki lub bezposrednio do rejestrow,
moze byc samodzielnym silnikiem SFX


silnik:

SFXZP           equ $80     ; ZPAGE
VPOKEY          equ $D200


SFX_ENGINE      lda SFX_ONOFF
                beq @+
                rts              ; mozna tu wyzerować SFX_NO ale to zależy od implementacji
@               ldx #3           ; 3 2 1 0 = Channel
SFX_CONTCH      lda SFX_NO,x
                beq SFX_NXTCH
                bmi SFX_NXTCH    ; zarezerwowany kanał
                ldy SFX_TIME,x
                bne SFX_CONTTONE
                asl @            ; TIME = 0 reload
                tay
                lda SFX_ADR_TAB-2,y   ; adres SFX
                sta SFXZP
                lda SFX_ADR_TAB-1,y
                sta SFXZP+1
                ldy SFX_CNT,x          ; pozcja w SFX
                lda SFX_REPEAT,x
                beq SFX_RELOAD
                dec SFX_REPEAT,x
                inc SFX_TIME,x
                lda SFX_FLAG,x
                asl @
                bcs SFX_DF
                bcc SFX_DC
SFX_RELOAD      lda (SFXZP),Y
                beq SFX_CTRL      ;=0
                asl @                  ; b7 REPEAT?
                bcc SFX_TIM
                asl @                  ; b6 flag
                ror SFX_FLAG,x
                lsr @
                lsr @
                sta SFX_REPEAT,x
                lda #$02               ; /2
SFX_TIM         lsr @                  ; time i wyzeruj C
                sta SFX_TIME,x    ; pierwszy bajt       (%0time,audf,audc)
                iny
SFX_DF          lda (SFXZP),Y
                sta SFX_AUDF,x    ; drugi
                iny
                bcs SFX_N3
SFX_DC          lda (SFXZP),Y
                sta SFX_AUDC,x    ; trzeci
                iny
SFX_N3          tya
                sta SFX_CNT,x     ; ustaw na kolejny bajt w SFX
SFX_CONTTONE    txa               ; zmien na adres w VPOKEY
                asl @
                tay
                lda SFX_AUDF,x
                sta VPOKEY,y      ; nadpisuje to co player muzyki wygenerowal
                lda SFX_AUDC,x
                sta VPOKEY+1,y
                dec SFX_TIME,x    ; SFX_CONTTONE zalezy od implementacji
SFX_NXTCH       dex
                bpl SFX_CONTCH
                rts

SFX_CTRL        iny               ;=0      (0,0) i (0,n)
                lda (SFXZP),y
                tay               ;=0 reload lub <>0 end
                beq SFX_RELOAD
                lda #$00          ; OFF SFX
                sta SFX_NO,x
                sta SFX_CNT,x     ; SFX_TIME = 0
                beq SFX_NXTCH     ; zawsze

SFX_ONOFF  .byte 0                         ; 0 ON
SFX_NO     .byte 0,0,0,0                   ; 0 wolny, numer sfx, $80 zarezerwowany
SFX_CNT    .byte 0,0,0,0                   ; licznik pozcji w sfx
SFX_TIME   .byte 0,0,0,0                   ; licznik trwania nuty
SFX_AUDC   .byte 0,0,0,0
SFX_AUDF   .byte 0,0,0,0
SFX_FLAG   .byte 0,0,0,0                   ; c=1 laduj AUDF, c=0 laduj AUDC
SFX_REPEAT .byte 0,0,0,0                   ; licznik strumienia

SFX_ADR_TAB .word sfx14

sfx14 .HE C5 B0 A7  ; C repeat 5 audf
      .HE A0 90 80 70 60
      .HE C3 50 A6  ; C repeat 3 audf
      .HE 40 30 20
      .HE 01 00 00  ; silencio
      .HE 00 01     ; end

w zalaczniku przyklad - klawiszem 1 generujemy kolejne SFX (wszystkie na jednym kanale)

Ostatnio edytowany przez xxl (2021-05-25 11:05:18)

Post's attachments

sound_engine.obx 371 b, liczba pobrań: 12 (od 2021-05-22) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

2

Odp: przykladowy SFX_ENGINE

Super, szukałem czegoś takiego.

3

Odp: przykladowy SFX_ENGINE

Dane do efektów dźwiękowych pobieramy z ?

4

Odp: przykladowy SFX_ENGINE

format danych jest dosc prosty - mozna zrobic tez np. asapscana i masz golusienkie dane ktore niestety trzeba sobie recznie "skompresowac"

---
najprosciej zwalic na muzyka ale jak juz bieda to szukasz odpowiedniego sfx w jakiejs grze i robisz zrzut rejestrow ;-)

Ostatnio edytowany przez xxl (2021-05-22 21:32:27)

http://atari.pl/hsc/ad.php?i=1.

5

Odp: przykladowy SFX_ENGINE

tu masz sfx z Donkey Konga wyciagniety metoda "na asapscana" ;-)

Post's attachments

sound_engine.obx 258 b, liczba pobrań: 13 (od 2021-05-22) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

6

Odp: przykladowy SFX_ENGINE

mozna tez dodac sfx na podobe tych pseudo sampli jak w DropZone (tak samo odtwarzane raz na ramke):




wlasciwie to przdalaby sie taka baza sfx :/ szkoda ze archowum sapow nie obejmuje sfxow :(

Post's attachments

sound_engine.obx 342 b, liczba pobrań: 11 (od 2021-05-23) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

7

Odp: przykladowy SFX_ENGINE

male rozszerzenie na format linii:

%0 time,audf,audc
%11 repeat,audf,audc
audf
%10 repeat,audf,audc
audc

co pozwala w pelni kontrolowac AUDC lub AUDF w zalaczniku dwa przklady - szczeggolnie proponuje porownac ten z DropZone z poprzednim :-) drugi efekt to zwykle slide.

Post's attachments

sound_engine-dc.obx 718 b, liczba pobrań: 7 (od 2021-05-25) 

sound_engine_df.obx 281 b, liczba pobrań: 5 (od 2021-05-25) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

8

Odp: przykladowy SFX_ENGINE

zrodlo silnika w pierwszym poscie zaktualizowane.

wlasciwie to juz mozna rippowac dowolny SFX z gry :D albo pisac swoje.

jeszcze jeden przyklad.


jakby ktos mial dobre przklady z gier albo pomysly na SFX to zapraszam, za kilka dni jak zrodla dojrzeja zrobie stronke z SFX i silnikiem do pobrania do swoich projektow.

Post's attachments

sound_engine.obx 234 b, liczba pobrań: 7 (od 2021-05-25) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

9

Odp: przykladowy SFX_ENGINE

a tu demonstracja jak prosto zrobic fajne SFX:

definicje smierc, ziewanie i respawn z BruceLee przy okazji demonstracja komendy repeat audc i repeat audf. sliczne i kompaktowe

sfxBL1 ; smierc
 .HE 86 54 A2         ; rept audc
 .HE 44 A6 48 A8 4A AA
 .HE 8A 00 4A
 .HE AA 4A AA 48 A8 46 A4 42 A2 42
 .HE 01 00 00  ; silencio
 .HE 00 01     ; end

sfxBL2 ; ziewanie
 .HE 02 B0 C2
 .HE 04 B0 C4
 .HE 03 B0 C6
 .HE 0B AA C8
 .HE 02 AA C6
 .HE 02 AA C4
 .HE 03 AD C4
 .HE 01 AD C2
 .HE 03 B0 C2
 .HE 01 00 00  ; silencio
 .HE 00 01     ; end


sfxBL3 ; respawn
 .HE CE 1E A2     ; rept audf
 .HE 0F 0C 1C 10 09 19 11 06 16 13 04 12 13 03
 .HE 01 00 00  ; silencio
 .HE 00 01     ; end
Post's attachments

sound_engine.obx 305 b, liczba pobrań: 5 (od 2021-05-25) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

10

Odp: przykladowy SFX_ENGINE

najs!

Ostatnio edytowany przez zbyti (2021-05-25 13:17:03)

11

Odp: przykladowy SFX_ENGINE

troszke zmian i mamy +10 do kompaktowosci: juz nie trzeba wygaszac kanalow w definicji SFX

test na bardziej ambitnych SFX czyli tych z AlleyCat: mialczenie kota i szczekanie psa

sfxAC3          ; szczekanie
 .HE 01 90 A0
 .HE 01 8E A1
 .HE 01 8C A1
 .HE 01 8A A2
 .HE 01 88 A2
 .HE 01 35 A3
 .HE 01 3A A3
 .HE 01 43 A2
 .HE 01 51 A2
 .HE 01 64 A1
 .HE 01 7B A1
 .HE 00 01     ; end
sfxAC4
 .HE C6 2F 83   ; rep audf
 .HE 2D 2B 29 27 14 14
 .HE 02 13 82
 .HE 02 12 81
 .HE 00 01     ; end

jaka gra ma jeszcze ambitne SFX? chce sprawdzic czy silniczek to obsluzy

Post's attachments

sound_engine_cat.obx 337 b, liczba pobrań: 8 (od 2021-05-25) 

sound_engine_dog.obx 283 b, liczba pobrań: 7 (od 2021-05-25) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

12

Odp: przykladowy SFX_ENGINE

World Karate

13

Odp: przykladowy SFX_ENGINE

ale tam sa sample. ten silnik gra raz na ramke.

http://atari.pl/hsc/ad.php?i=1.

14

Odp: przykladowy SFX_ENGINE

Fajny silniczek. Czy aby na pewno okrzyki w IK są na samplach? Bo np to http://asma.atari.org/asmadb/search.php?play=1839 chyba nie...

hex, code and ror'n'rol!
niewiedza buduje, wiedza rujnuje

15

Odp: przykladowy SFX_ENGINE

a jakby ktos chcial uslyszec jak powinno brzmiec przelatywanie obiektu w Stealth ... to ma okazje bo w grze - sprawdzalem dwa zrodla jest blad :-) i nie slychac calego efektu.

sfxST1
 .HE C3 38 01  ; rep audf
 .HE 34 30 2C
 .HE C3 28 02
 .HE 24 20 1C
 .HE C3 18 03
 .HE 14 10 0C
 .HE C1 08 04
 .HE 04
 .HE C1 04 05
 .HE 08
 .HE C1 0C 04
 .HE 10
 .HE C1 14 03
 .HE 18
 .HE 01 1C 02
 .HE C1 20 01
 .HE 24
 .HE 00 01
Post's attachments

sound_engine_st.obx 267 b, liczba pobrań: 8 (od 2021-05-26) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

16

Odp: przykladowy SFX_ENGINE

cos dla prawdziwych konsumentow

pole siłowe:
.HE 90 0B 21
.HE 22 22 23 23 24 24 25 27 27 26 25 24 23 22 21 21
.HE 00 01

i dwa przyklady, pierwszy do wszystkie SFX z gry Stealth a drugi to przyklad bardzo specyficznego podejscia do SFX z gry Joust :-)

Post's attachments

sound_engine-J.obx 356 b, liczba pobrań: 10 (od 2021-05-26) 

sound_engine-ST.obx 863 b, liczba pobrań: 9 (od 2021-05-26) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

17

Odp: przykladowy SFX_ENGINE

dodalem dwie funkcje do biblioteki:

xSFX_START  in:  A=sfx, X=channel, C=1 (force)
                 A=sfx, C=0 (find free channel)
            out: C=1 no free channel
                 C=0 ok
(inicjuje odtwarzanie konkretnego SFX ma wybranym kanale lub na pierwszym wolnym kanale)

xSFX_STOP   in:  X=channel
(natychmiast przerwij odtwarzanie SFX - gdybysmy mieli zapetlone SFX lub chcemy zrobic miejsce na kolejne)

zauwazylem ze gry implementuja funkcjonalnosc uprzywilejowanych SFX ktore musza byc odtworzone nawet kosztem przerwania innego

zmienilem tez format kodu petli - teraz mozna skakac wewnatrz SFX a nie tylko do jego poczatku - dosc wazne :-)


o czym zapomnialem?


w przykladzie wlasnie taki zapetlony SFX z Pacmana


padlo pytanie ile czasu zabiera ten silnik: zabiera mniej niz 1 linie skaningowa na kanal, przy czym jesli nie korzystamy z wszystkich kanalow warto ustawic taki na nieobslugiwany co jeszcze przyspiesza procedure

Ostatnio edytowany przez xxl (2021-05-27 11:51:18)

Post's attachments

sound_engine-pac.obx 281 b, liczba pobrań: 5 (od 2021-05-27) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

18

Odp: przykladowy SFX_ENGINE

i mala korekta formau rozkazu REP:

%10|11 RTIME, REP, AUDF, AUDC

przykład z Gossip: dzwonek telefonu i pseudo synteza "Hello"

klawiszem "1" uruchamiamy, klawiszem "2" natychmiast przerywamy - korzystajac z funkcji xSFX_START i xSFX_STOP :-)

Post's attachments

sound_engine-phone1.obx 537 b, liczba pobrań: 8 (od 2021-05-28) 

sound_engine-phone2.obx 439 b, liczba pobrań: 5 (od 2021-05-28) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

19

Odp: przykladowy SFX_ENGINE

no i prosze, silniczek gotowy:

http://xxl.atari.pl/sfx-engine/

przyklad uzycia w zalaczniku

Post's attachments

sound_engine-g.obx 803 b, liczba pobrań: 5 (od 2021-05-28) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

20

Odp: przykladowy SFX_ENGINE

duza zmiana (nie uaktualniona na stronie)

nowy format danych (bardziej czytelny) a przy okacji daje mozliwosc wprowadzenia podprocedur modyfikujacych wartosci - dodatkowo moze skrocic SFXy... moze posluzyc np. do zmiany losu meskiego na zenski w tym przykladzie z pseudo synteza mowy ;-)

testowy import muzy z Soundmachine ;-) ale mozna z dowolnego programu :p

Post's attachments

sound_engine-piscol.obx 955 b, liczba pobrań: 5 (od 2021-05-30) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

21

Odp: przykladowy SFX_ENGINE

za duzo danych? dwa dodatkowe rozkazy pozwalajace znacznie skrocic ilosc danych:

1. TIME,AUDF,AUDC ; play
2. REPF,COUNT     ; repeat audf C0
3. REPC,COUNT     ; repeat audc 80
4. 00,LOOP        ; loop
5. 00,FF          ; end/rts
6. JSR nnnnn      ; jsr nnnnn  A+sfx no !=0
7. JMP nnnnn      ; jmp nnnnn  E+sfx no !=0

dzieki JSR i JMP mozna wywolywac instrumenty z wlasnego SFX. przyklad muzyki z Preliminary Monty

ins5
.HE 09 39 AA
.HE C0 07
.HE 22 1D 44 2B 22 39 22
.HE 00 FF
ins6
.HE 09 87 AA
.HE C0 07
.HE 55 44 AB 72 55 87 55
.HE 00 FF
ins7
.HE 07 5B AC
.HE C0 18
.HE 36 2D 44 36 22 5B 36 2D 44 36 22 36 22 1B 2D 1B 17 36 22 1B 2D 1B 17 1B
.HE 00 FF
ins8
.HE 07 87 AC
.HE C0 18
.HE 5B 44 6B 5B 36 87 5B 44 6B 5B 36 5B 36 2D 44 2D 22 5B 36 2D 44 2D 22 44
.HE 00 FF
ins9
.HE 05 6B AE
.HE C0 1C
.HE 48 36 2B 55 36 2B 24 6B 48 36 2B 55 36 2B 24 48 2B 24 1B 36 24 1B 15 2B 24 1B 15 12
.HE 00 FF
insA
.HE 05 90 AE
.HE C0 1C
.HE 6B 55 48 6B 55 48 36 90 6B 55 48 6B 55 48 36 55 48 36 2B 48 36 2B 24 36 2B 24 1B 15
.HE 00 FF

sfx1
.HE A5 A7 A9 A5
.HE 09 1D AA
.HE C0 0B
.HE 2B 1D 15 39 22 1D 2B 1D 1A 18 15
.HE A7 A9
.HE 00 FF

sfx2
.HE A6 A8 AA A6
.HE 09 44 AA
.HE C0 0B
.HE 72 44 39 87 55 44 72 44 39 40 44
.HE A8 AA
.HE 00 FF

nalezy pamietac ze jesli zalezy nam na super szybkiej procedurze to korzystamy tylko z rozkazu 1 ;-)

Post's attachments

sound_engine-pr.obx 614 b, liczba pobrań: 4 (od 2021-05-30) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

22

Odp: przykladowy SFX_ENGINE

i kolejna zmiana:

;1. TIME,AUDF,AUDC ; play
;2. REPF+FUNC,COUNT     ; repeat audf C0 +FUNC NO
;3. REPC+FUNC,COUNT     ; repeat audc 80 +FUNC NO
;4. 00,LOOP        ; loop
;5. 00,FF          ; end/rts
;6. JSR nnnnn      ; jsr nnnnn  A0+sfx no !=0
;7. JMP nnnnn      ; jmp nnnnn  E0+sfx no !=0
;8. SET,ENV        ; set env E0,nn


mozemy juz robic SFX proceduralne, mozemy robic SFX ktore pobieraja wartosci z dowolnych rejestrow, mozemy przekazywac parametry z SFX do pluginu


ale może jesteśmy przywiązani do zapisu nutowego, albo edytor którego używamy zapisuje indeksy do wartości nut? za pomocą funkcji możemy otrzymywać wartość zależną od parametru. przkladowo mozemy za pomoca pluginu czytac dane muzyki z jakiegos edytora i konwertowac na podstawie tablicy czestotliwosci, mozemy tez w ten sposob zrobic obwiednie i przekazywac parametry ADSR (czasowe) z danych ale...

dostajemy nowa komende SETENV

format rozkazu SET zmieni się, obecnie obwiednie są predefiniowane bez ograniczen wielkosci ale być może obwiednie powinny być pobierane z danych SFX, albo definiowane jak funkcje? jeszcze nie wiem.

w zalaczniku przkladowa muzyka z the Goonies - klawisz "1" - on, "2" off

Ostatnio edytowany przez xxl (2021-05-31 16:04:33)

Post's attachments

sound_engine-tg.obx 1.09 kb, liczba pobrań: 9 (od 2021-05-31) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

23

Odp: przykladowy SFX_ENGINE

mam klopoty z nazewnictwem, jak "fachowo" nazwac:

1. efekt nakladany na wartosc audf co ramke
2. efekt nakladany na wartosc audc co ramke
3. efekt nakladany na audf lub audc co jednostke "speed" utworu np. raz na 4 ramki przy pobieraniu kolejnej wartosci z utworu

obecnie "2" nazywam Envelope a "3" Plugin, "1" - ?

http://atari.pl/hsc/ad.php?i=1.

24

Odp: przykladowy SFX_ENGINE

proceduralne SFX? dlaczego nie... :-)

przykladowe uderzenie pioruna z Cavelord:

.HE A0 81     
.HE C0 01 1C 00
.HE 00 02 0A 00

w zalaczniku uderzenie pioruna i wybuch wulkanu z Cavelord

Post's attachments

sound_engine_cl.obx 673 b, liczba pobrań: 8 (od 2021-06-01) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.

25

Odp: przykladowy SFX_ENGINE

mono napisał/a:

Fajny silniczek. Czy aby na pewno okrzyki w IK są na samplach? Bo np to http://asma.atari.org/asmadb/search.php?play=1839 chyba nie...

po malych modyfikacjach mozna uzywac instrumentow z RMT jako SFXy, tu przeniesiony fragment utworu Rastra.

sfxEngine swietnie sobie radzi z odtwarzaniem muzyki albo SFX takze podczas wczytwania danych :-) xB


===

kolejne zmiany:
podzial funkcji (dla kazdego kanalu osobno)
1. funkcje ktore dzialaja 1x, 2x, 3x, 4x... na ramke zawsze przed zapisem do rejestrow dzwieku (moga sluzyc np. do realizacji obwiedni)
2. funkcje ktore dzialaja na czytanych danych dla rejestrow AUDF/AUDC podczas pobierania danych z SFXa
3. funkcje sterujace, np. POKE adres,dana, wlaczanie/wylaczanie funkcji nr. nn typu 1 lub 2, JMP, JSR, RTS, LOOP, OFF

dzieki funkcji typu 1 mozemy przeniesc dowolny instrument z edytorow muzycznych
dzieki funkcji typu 2 mozemy przeniesc dowolny utwor z tych edytorow

funkcje 3 zwlaszacza POKE pozwala synchronizowac nasze SFX z akcja w grze... wywolujemy naszego SFX ktory w pewnm moemencie sam zglosi wykonanie zadania ;-) np. podobnie jest synchronizowany kot w AlleyCat z muzyka w ktorej gra instrument "miałłłłłłłł"

Ostatnio edytowany przez xxl (2021-06-03 00:40:45)

Post's attachments

sound_engine-rmt.obx 1.16 kb, liczba pobrań: 9 (od 2021-06-02) 

Tylko zalogowani mogą pobierać załączniki.
http://atari.pl/hsc/ad.php?i=1.