a mozna dodac do TMC jakis nowy FX w patternie ktory sluzylby do synchronizacji z programem zewnetrznym
player przechowywalby w wydzielonej pamieci kody fx-ow, a user sprawdzlaby jaka to wartosc i odpowiednio reagowal
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
zeST 20250627 - Atari ST w FPGA z turbo! Nowa wersja zeST z trybem turbo 50 MHz i poprawkami Shiftera i MFP
UltraSatan - firmware 1.30 Nowa wersja firmware dla UltraSatana wspiera nowoczesne karty SDHC i SDXC
53 lata marki Atari 53 lata od założenia Atari - firmy, która odmieniła świat gier i komputerów.
Odtwarzanie układów z Atari Falcon Trwa zbiórka na odtworzenie chipów Videl, Combel i SDMA z Atari Falcon
onEscape extEnded and reWorked Poison prezentuje rozszerzoną i poprawioną ścieżkę dźwiękową z gry onEscape.
atari.area forum » Posty przez tebe
a mozna dodac do TMC jakis nowy FX w patternie ktory sluzylby do synchronizacji z programem zewnetrznym
player przechowywalby w wydzielonej pamieci kody fx-ow, a user sprawdzlaby jaka to wartosc i odpowiednio reagowal
oby to byly konwersje takie jak 'Gremlins'
pierwsze slysze, nie znam takiej gry
to moze mi tez podeslecie te_be_@poczta.onet.pl
prace trwaja, juz gra z pseudo patternu, probuje wydobyc z niego jakies ciagle dzwieki, jak na razie nie przypadlo mi to do gust
co do optymalizacji, to bedzie, teraz jednak forma playera ma byc jak najbardziej zrozumiala i podatna na modyfikacje
nowsza wersja
;-------------------
;- Synth Player v1.2
;- 12.02.2004
;-------------------
opt h+
org $b000
tmp equ $00
loop equ tmp+1 ; starszy bajt licznika dla length_Loop
tempo equ 16 ; tempo, ilosc pelnych przebiegow length_Loop
length_Loop equ 450 ; dlugosc petli playera, ile ma odegrac wartosci z sampla
audc1 equ $d201 ;rejestry Pokeya
audc2 equ $d203
audc3 equ $d205
audc4 equ $d207
;------------------------------------
;- PROCEDURKA PLAYER-a DLA 4 KANALOW
;------------------------------------
player equ *
;- kanal #1
clc
del0 lda #0
del0m adc #0
sta del0+1
lda adres0+1
adc #0
sta adres0+1
del0_ lda #0
del0m_ adc #0
sta del0_+1
lda adres0_+1
adc #0
sta adres0_+1
adres0 lda $ff00 ; adres 1-ego sampla
adres0_ adc $ff00 ; adres fali modyfikacyjnej
lsr @ ; dla Covoxa moznaby pominac 'LSR @', wiekszy przedzial wartosci przyjmie Covox
tax
vol0 lda $ff00,x ; adres tablicy glosnosci dla 1-ego sampla
ch0 sta audc1
;- kanal #2
clc
del1 lda #0
del1m adc #0
sta del1+1
lda adres1+1
adc #0
sta adres1+1
del1_ lda #0
del1m_ adc #0
sta del1_+1
lda adres1_+1
adc #0
sta adres1_+1
adres1 lda $ff00 ; adres 2-ego sampla
adres1_ adc $ff00
lsr @
tax
vol1 lda $ff00,x ; adres tablicy glosnosci dla 2-ego sampla
ch1 sta audc2
;- kanal #3
clc
del2 lda #0
del2m adc #0
sta del2+1
lda adres2+1
adc #0
sta adres2+1
del2_ lda #0
del2m_ adc #0
sta del2_+1
lda adres2_+1
adc #0
sta adres2_+1
adres2 lda $ff00 ; adres 3-ego sampla
adres2_ adc $ff00
lsr @
tax
vol2 lda $ff00,x ; adres tablicy glosnosci dla 3-ego sampla
ch2 sta audc3
;- kanal #4
clc
del3 lda #0
del3m adc #0
sta del3+1
lda adres3+1
adc #0
sta adres3+1
del3_ lda #0
del3m_ adc #0
sta del3_+1
lda adres3_+1
adc #0
sta adres3_+1
adres3 lda $ff00 ; adres 4-ego sampla
adres3_ adc $ff00
lsr @
tax
vol3 lda $ff00,x ; adres tablicy glosnosci dla 4-ego sampla
ch3 sta audc4
dey
beq test
jmp player
*-----------------
test lda loop
beq test_
dec loop ; zmniejszenie starszego licznika length_Loop
jmp player
test_ ldy <length_Loop
lda >length_Loop
sta loop
dec tmp ; tempo wyrazone w liczbie powtorzen petli playera
beq HEAD
jmp player
;-----------------------------------
;- dekodowanie patternu
;- ustawienie nowych czestotliwosci
;- glosnosci itp.
;-----------------------------------
HEAD
timer lda #0
inc timer+1 ; licznik na potrzeby testow, ustawia po kolei 32 glosnosci i 32 czestotliwosci
and #$1f
tax
tay
* track 0
lda Adr_Volume,y
sta vol0+2
lda frq,x
sta del0m+1
clc
shift0 adc #3 ; czestotliwosc fali modyfikacyjnej, zwiekszona o wartosc SHIFT wzgledem glownej czestotliwosci
sta del0m_+1
lda #0 ; zerowanie licznika
sta del0+1
sta del0_+1
lda Adr_Instr,x
sta adres0+2
lda >sampl01 ; fala modyfikujaca
sta adres0_+2
* track 1
ldy #0 ;graj cisze
lda Adr_Volume,y
sta vol1+2
lda frq,x
sta del1m+1
clc
shift1 adc #9
sta del1m_+1
lda #0
sta del1+1
sta del1_+1
lda Adr_Instr,x
sta adres1+2
; lda #0
; sta adres1+1
* track 2
ldy #0
lda Adr_Volume,y
sta vol2+2
lda frq,x
sta del2m+1
clc
shift2 adc #9
sta del2m_+1
lda #0
sta del2+1
sta del2_+1
lda Adr_Instr,x
sta adres2+2
; lda #0
; sta adres2+1
* track 3
ldy #0
lda Adr_Volume,y
sta vol3+2
lda frq,x
sta del3m+1
clc
shift3 adc #9
sta del3m_+1
lda #0
sta del3+1
sta del3_+1
lda Adr_Instr,x
sta adres3+2
; lda #0
; sta adres3+1
* let's go
lda #tempo
sta tmp
ldy <length_Loop
lda >length_Loop
sta loop
jmp player
*----
*- tutaj startuje program po wczytaniu do pamieci
*----
main
lda 20
cmp 20
beq *-2
sei ;wylaczenie ROM-u i wszystkich przerwan
lda #0
sta $d40e
sta $d400
lda #$fe
sta $d301
lda #0 ;zerujemy POKEY
sta $d208
lda #3
sta $d20f
ldx #33
ldy #0 ;ustawiamy 4-bit w tablicach glosnosci dla Pokeya
cnv0 lda volume,y ;w przypadku Covoxa, nie musielibysmy tego robic
ora #%00010000
cnv1 sta volume,y
iny
bne cnv0
inc cnv0+2
inc cnv1+2
dex
bne cnv0
ldy #0 ; wyliczamy tablice czestotliwosci
lda #24 ; pierwsza czestorliwosc
crea sta frq,y
clc
adc #3 ; stala addycja
iny
cpy #32
bne crea
jmp HEAD ; startujemy od zera (timer=0)
*----
*- tablice na 4-ej stronie
*----
org $0400
*----
*- instrumenty, czyli 256-bajtowe sample (32)
*----
Sampl00
:256 dta b(1) ; fala prostokatna
; :32 dta b(4)
; :32 dta b(8)
; :32 dta b(4)
; :32 dta b(0)
Sampl01 ; fala trojkatna
:8 dta b(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
Sampl02 ; fala modyfikujaca
:8 dta b(0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,7,7,6,6,5,5,4,4,3,3,2,2,1,1,0,0)
;- adresy instrumentow
Adr_Instr
:32 dta h(Sampl02)
*----
*- tablice z opuznieniami dla kazdej z czestotliwosci (nuty)
*----
;- oryginalna z INERTI (2 bajtowe wartosci L, H)
; dta l(50),l(53),l(57),l(60),l(63)
; dta l(67),l(71),l(76),l(80)
; dta l(85),l(90),l(95),l(101)
; dta l(107),l(113),l(120),l(127)
; dta l(135),l(143),l(151),l(160)
; dta l(170),l(180),l(190),l(202)
; dta l(214),l(227),l(240),l(254)
; dta l(270),l(286),l(302),l(320)
; dta l(339),l(360),l(381),l(404)
; dta l(428),l(453),l(480),l(508)
; dta l(539),l(571),l(605),l(641)
; dta l(679),l(719),l(762)
*- i dla obecnego playera, wziete z kosmosu :), trzeba je dobrac porzadniej
*- 32 wartosci
frq
:32 brk
*----
*- tablica ze starszymi adresami glosnosci (33)
*----
Adr_Volume
dta h(volume,volume+$100,volume+$200,volume+$300,volume+$400,volume+$500,volume+$600,volume+$700)
dta h(volume+$800,volume+$900,volume+$a00,volume+$b00,volume+$c00,volume+$d00,volume+$e00,volume+$f00)
dta h(volume+$1000,volume+$1100,volume+$1200,volume+$1300,volume+$1400,volume+$1500,volume+$1600,volume+$1700)
dta h(volume+$1800,volume+$1900,volume+$1a00,volume+$1b00,volume+$1c00,volume+$1d00,volume+$1e00,volume+$1f00)
dta h(volume+$2000)
*----
*- 33 tablice z glosnosciami, kazda po 256 bajtow
*- dla Pokeya, trzeba ustawic 4-bit we wszystkich tablicach
*----
org $1000
volume ins 'volume.tab'
*---
run main
Pokey to tylko dla testow, docelowo pozostalby Covox, a tam nie ma takich znieksztalcen jak w Pokey-u
...
przyklad jest tutaj
http://atariarea.histeria.pl/forum/viewtopic.php?t=1508
tyle ze tablicy glosnosci tam nie ma :) (wazy ponad 8KB)
brzmi to jak do-re-mi-fa-sol-la
zrobilem fale prostokata i trojkatna, ale zadnej perkusji nie uslyszalem, tylko jakby wybrzmiewajace nuty
Dely spojrz lepiej pod posta Swietego, a nie zobaczysz tam ikonki e-mail
wiec do kogo kurfa te txty 8O
jeszcze jeden taki post Dely a posmaruje Twoja łysine odzywka do włosów :lol:
p.s.
czuje sie dobrze i mam sokoli wzrok
Swiety podaj e-maila
do Zielonego wyslalem, ale do Ciebie Świety e-maila nie mam, podaj go to tez wysle pseudo player do synthow
;-------------------
;- Synth Player v1.0
;- 20.02.2004
;-------------------
opt h+
org $b000
tmp equ $00
tempo equ 6 ; tempo, ilosc pelnych przebiegow length_Loop
length_Loop equ 255 ; dlugosc petli playera, ile ma odegrac wartosci z sampla
audc1 equ $d201 ;rejestry Pokeya
audc2 equ $d203
audc3 equ $d205
audc4 equ $d207
;------------------------------------
;- PROCEDURKA PLAYER-a DLA 4 KANALOW
;------------------------------------
player equ *
;- kanal #1
clc
delay0 lda #0
delay0m adc #0
sta delay0+1
lda adres0+1
adc #0
sta adres0+1
adres0 ldx $ffff ; adres 1-ego sampla
volume0 lda $ff00,x ; adres tablicy glosnosci dla 1-ego sampla
ch0 sta audc1
;- kanal #2
clc
delay1 lda #0
delay1m adc #0
sta delay1+1
lda adres1+1
adc #0
sta adres1+1
adres1 ldx $ffff ; adres 2-ego sampla
volume1 lda $ff00,x ; adres tablicy glosnosci dla 2-ego sampla
ch1 sta audc2
;- kanal #3
clc
delay2 lda #0
delay2m adc #0
sta delay2+1
lda adres2+1
adc #0
sta adres2+1
adres2 ldx $ffff ; adres 3-ego sampla
volume2 lda $ff00,x ; adres tablicy glosnosci dla 3-ego sampla
ch2 sta audc3
;- kanal #4
clc
delay3 lda #0
delay3m adc #0
sta delay3+1
lda adres3+1
adc #0
sta adres3+1
adres3 ldx $ffff ; adres 4-ego sampla
volume3 lda $ff00,x ; adres tablicy glosnosci dla 4-ego sampla
ch3 sta audc4
dey
beq test
jmp player
*-----------------
test ldy #length_Loop
dec tmp ; tempo wyrazone w liczbie powtorzen petli playera
beq HEAD
jmp player
;-----------------------------------
;- dekodowanie patternu
;- ustawienie nowych czestotliwosci
;- glosnosci itp.
;-----------------------------------
HEAD
inc timer+1 ; licznik na potrzeby testow, ustawia po kolei 32 glosnosci i 32 czestotliwosci
timer lda #0
and #$1f
tay
tax
; ldx #0 ; numer sampla i czestotliwosc
* track 0
lda Adr_Volume,y
sta volume0+2
lda frq,x
sta delay0m+1
lda #0
sta delay0+1
lda Adr_Instr,x
sta adres0+2
lda #0 ; mlodszy adres sampla =0
sta adres0+1
* track 1
lda Adr_Volume,y
sta volume1+2
lda frq,x
sta delay1m+1
lda #0
sta delay1+1
lda Adr_Instr,x
sta adres1+2
lda #0
sta adres1+1
* track 2
lda Adr_Volume,y
sta volume2+2
lda frq,x
sta delay2m+1
lda #0
sta delay2+1
lda Adr_Instr,x
sta adres2+2
lda #0
sta adres2+1
* track 3
lda Adr_Volume,y
sta volume3+2
lda frq,x
sta delay3m+1
lda #0
sta delay3+1
lda Adr_Instr,x
sta adres3+2
lda #0
sta adres3+1
* let's go
lda #tempo
sta tmp
ldy #length_Loop
jmp player
*----
*- tutaj startuje program po wczytaniu do pamieci
*----
main
lda 20
cmp 20
beq *-2
sei ;wylaczenie ROM-u i wszystkich przerwan
lda #0
sta $d40e
sta $d400
lda #$fe
sta $d301
lda #0 ;zerujemy POKEY
sta $d208
lda #3
sta $d20f
ldx #33
ldy #0 ;ustawiamy 4-bit w tablicach glosnosci dla Pokeya
cnv0 lda volume,y ;w przypadku Covoxa, nie musielibysmy tego robic
ora #%00010000
cnv1 sta volume,y
iny
bne cnv0
inc cnv0+2
inc cnv1+2
dex
bne cnv0
jmp timer ;startujemy od zera (timer=0)
*----
*- tablice na 4-ej stronie
*----
org $0400
*----
*- instrumenty, czyli 256-bajtowe sample (32)
*----
Sampl00 ; fala prostokatna
:128 dta b($0f)
:128 dta b($00)
Sampl01 ; fala trojkatna
:8 dta b(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
;- adresy instrumentow
Adr_Instr
:32 dta h(Sampl01)
*----
*- tablice z opuznieniami dla kazdej z czestotliwosci (nuty)
*----
;- oryginalna z INERTI (2 bajtowe wartosci L, H)
; dta l(50),l(53),l(57),l(60),l(63)
; dta l(67),l(71),l(76),l(80)
; dta l(85),l(90),l(95),l(101)
; dta l(107),l(113),l(120),l(127)
; dta l(135),l(143),l(151),l(160)
; dta l(170),l(180),l(190),l(202)
; dta l(214),l(227),l(240),l(254)
; dta l(270),l(286),l(302),l(320)
; dta l(339),l(360),l(381),l(404)
; dta l(428),l(453),l(480),l(508)
; dta l(539),l(571),l(605),l(641)
; dta l(679),l(719),l(762)
*- i dla obecnego playera, wziete z kosmosu :), trzeba je dobrac porzadniej
*- 48 wartosci
frq
dta l(050,053,056,059,062,065,068,071,074,077,080,083)
dta l(086,089,092,095,098,101,104,107,110,113,116,119)
dta l(122,125,128,131,134,137,140,143,146,149,152,155)
dta l(158,161,164,167,107,173,176,179,182,185,188,191)
*----
*- tablica ze starszymi adresami glosnosci (33)
*----
Adr_Volume
dta h(volume,volume+$100,volume+$200,volume+$300,volume+$400,volume+$500,volume+$600,volume+$700)
dta h(volume+$800,volume+$900,volume+$a00,volume+$b00,volume+$c00,volume+$d00,volume+$e00,volume+$f00)
dta h(volume+$1000,volume+$1100,volume+$1200,volume+$1300,volume+$1400,volume+$1500,volume+$1600,volume+$1700)
dta h(volume+$1800,volume+$1900,volume+$1a00,volume+$1b00,volume+$1c00,volume+$1d00,volume+$1e00,volume+$1f00)
dta h(volume+$2000)
*----
*- 33 tablice z glosnosciami, kazda po 256 bajtow
*- dla Pokeya, trzeba ustawic 4-bit we wszystkich tablicach
*----
org $1000
volume ins 'volume.tab'
*---
run main
ktos tu zzieleniał ze złości :lol:
Ale do rzeczy.
Zaraz przygotuje przykladowa procedurke (wycieta z inertii), bez strony zerowej itp, tak zeby bylo latwo modyfikowac.
I chce zobaczyc jak zajebiscie i wyk**** szybko modyfikujecie ją, dodajac obsluge coraz to nowszych fx-ow z MOD-a :D Jestem ciekaw jak szybko teoria przechodzi w praktyke.
p.s.
jak na aarea mozna dodac plik do posta (trzeba miec swoj serwer ?)
kilka kopierow dodalem Ja i Pajero do bazy plikow aarea, kopiery dotycza Turbo2000 i Blizzard
gratuluje wytrwalosci
ano SoftSynth to nie zwykly MOD player
waxsoft, kto przyslal Ci ten list, i z kim prowadzisz monolog ?
zamieszczony fragment jest identyczny z tym jaki wystepuje w playerach MOD-ow (Inertia, ProTracker)
czy jednak dla tak krotkich 256 bajtowych sampli, nie bedzie zbyt szybki?
najwiekszy problem stanowila implementacja chocby polowy fx-ow jakie udostepnia np. format MOD, przeciez samo odegranie sampla o okreslonej fali, obwiedni to nie problem, ale co dalej
przeciez nie moze to brzmiec jak Neo, gdzie wogole nut nie slychac, zadnej modulacji dzwieku
jak grac 256 bajtowymi probkami, aby wyszla z nich muza w stylu chiptunes, na PC tworza takie kawalki w XM czy tez MOD (dzwieki SID-owe)
ktory efekt sprawia ze tak krotki sampl brzmi jak SID-wo, czy to portamento, zreszta nawet nie wiem co to portamento ?? rozpiska wszystkich fx-ow z MOD-a byla, tylko nie mial kto wytlumaczyc co taki efekt robi z samplem
skoro PWM takie wazne, to budujac indywidualnie fale, mozemy to PWM sobie ustawic jak chcemy, tylko gdy konczy sie 256-a wartosc probki, licznik sie przekreci i bedzie zgrzyt, chyba ze koncowka sampla pokrywa sie z jego poczatkiem, chociaz gdy index odwolujacy sie do sampla bedzie zbyt duzy to i tak beda zgrzyty
czyli napiszemy nowego SoftSyntha
1. edycja fali
wartosci, odzwierciedlaja wysokosc slupka 0..15 dla Pokeya, 0-255 dla Covoxa. W samplach 8-bit np. WAV sa wartosci od -127..128
1122334455665544332211
itd. w sumie 256 bajtow opisujacych fale
2. obwiednia, czyli glosnosc sampla
glosnosc to bedzie kilkadziesiat tablic, ktore odpowiednio beda modyfikowaly wartosci opisuajace fale
ldx fala,y
lda volume,x
ok. mamy juz edytor fali i obwiedni, teraz jakie operacje beda mozliwe na tak krotkich samplach :)?
a do czego sluzy PWM ??
modulacja współczynnika wypełnienia, z czym to zjesc ?
nie chcecie miec problemow, uzywajcie markowych czesci
u mnie wszystko smiga, tylko dlatego ze mam Intela w parze z Nvidia :twisted: ;)
p.s.
Lewis zmien AMD na Intela
no i oto chodzilo
a czy ta obwiednia, to nie oznacza liczby powtorzen bajtow sampla, czyli nute ?
a Ktos, jakies konkretniejsze dane na temat SoftSyntha poda ?
moze scan numeru Bajtka z opisem SoftSyntha
no tak, obciazenie byloby i 100%, SoftSynth wykorzystuje na max-a CPU
chodziloby o nowszy, przyjazniejszy sposob tworzenia obwiedni, czy czegos tam co sie robi w SoftSynth, no i na pewno jakas optymalizacje szybkosci w stosunku do oryginalu tez daloby sie zrobic
moze by tak odswiezyc pamiec na temat Softsyntha, sposobu tworzenia i odtwarzania przez niego instrumentow
i stworzyc cos bardziej przyjaznego w obsludze
czy ktos juz interesowal sie Softsynthem od srodka ? jak on dziala ?
moja teoria, ktora chodzi mi po glowie, to odgrywanie probek 256 bajtowych + liczne operacje na nich, cos jak MOD-y czy XM-y na PC w stylu chiptunes, tez tam sa krotkie sampelki, nawet mniej niz 256 bajtow a brzmia jak SID :)
co Wy na to ? tedy droga, czy cos pominalem ?
a kto w XXI wieku uzywa magnetofonu :lol:
atari.area forum » Posty przez tebe
Wygenerowano w 0.087 sekund, wykonano 16 zapytań