forum speccy.pl

ZX Spectrum => MUZYKA => Wątek zaczęty przez: Abrimaal w 2012.02.27, 00:39:16

Tytuł: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.02.27, 00:39:16
1. Kiedyś to robiłem z łatwością, teraz wszystko wypłynęło. Jak znaleźć muzykę na AY w kodzie gry? Wiem, że zaczynało się to od jakiś dwóch OUT, przypomnijcie proszę.

2. Czy istnieje możliwość skonvertowania muzyki z pliku .ay z powrotem do kodu maszynowego? Jeśli tak, to za pomocą jakiego programu?
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Tygrys w 2012.02.27, 09:46:09
1. Kiedyś to robiłem z łatwością, teraz wszystko wypłynęło. Jak znaleźć muzykę na AY w kodzie gry? Wiem, że zaczynało się to od jakiś dwóch OUT, przypomnijcie proszę.

2. Czy istnieje możliwość skonvertowania muzyki z pliku .ay z powrotem do kodu maszynowego? Jeśli tak, to za pomocą jakiego programu?

1. to co musisz znaleźć to:
LD BC,65533 ; hex: 1,$fd,$ff
OUT (C),A; hex: $ED $79

albo
LD BC,49149 ; hex; 1,$fd,$bf
OUT (C),A ; hex: $ED $79


albo wariacje tych powyższych ;) Zazwyczaj player jest usytuowany na początku banku pamięci, czyli od 49152.
Długość bloku z muzyką zawsze była dla mnie tajemnicą ;) i kopiowałem blok pamięci 'na wyczucie'.


2. Na pewno się da. Trzeba poczytać o formacie AY i wyodrębnić blok binarny z playerem i danymi.
W sumie to ciekawy temat na artykuł. Ktoś chętny do napisania ? (tak, pytanie retoryczne).
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.03.06, 23:24:44
Widziałem na youtube, jak Yerzmyey ładował pliki .stc do ZX 81,
spytałem go o nie: tu odpowiedź.
Pliki STC są właściwie natywnymi plikami Spectrum.
Są to skompilowane songi SoundTrackera 1.1 (bez ustawionego Randomize).
Co innego puszczenie ich w przerwaniach - do tego trzeba się znać na kodowaniu. Umie to uczynić MAT.
Btw, do użycia we własnym programie trzeba im nadać już jakiś adres.
Ja natomiast mam pytanie - jak załadować .stc do emu ZX Spectrum,
czy wystarczy zmienić rozszerzenie np. na tap lub sna? Czy wymaga to bardziej skomplikowanej metody?
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Tygrys w 2012.03.07, 09:17:52
Plik trzeba załadować jako binarny pod konkretny adres. Wiele emulatorów ma taką możliwość.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2012.03.07, 11:06:05
Widziałem na youtube, jak Yerzmyey ładował pliki .stc do ZX 81,


Nooo, tu jest trochę różnica, bo ZX81 ma player przystosowany bezpośrednio do ładowania tych plików (i zczytywania ich z FAT).

Na Spectrum robią to też playery, ale wciąż nie widze chętnego, by przerobić WildPlayer na 128K. ;)
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.03.07, 22:49:14
Plik trzeba załadować jako binarny pod konkretny adres. Wiele emulatorów ma taką możliwość.
... a czy istnieje możliwość wyczytania skądś tego adresu, czy metodą prób i błędów ładować po kolei?
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Tygrys w 2012.03.08, 07:35:19
... a czy istnieje możliwość wyczytania skądś tego adresu, czy metodą prób i błędów ładować po kolei?

W zależności od potrzeb, adres może być różny, a do tego zależny od innych programów/danych.
Napisz konkretnie co chciałbyś zrobić, a ja postaram się pomóc.

Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.03.08, 19:46:46
Chciałbym w przerabianych loaderach, kiedy wyświetla się screen
aby grała muzyka (z tej gry lub inna).
Mogę to zrobić w Basic (PAUSE 1 i oczekiwanie na klawisz) lub w asm.
Do tej pory szukałem w jednym nieskompresowanym demo.
Znalazłem taki fragment kodu, jednak puszczając go w pętli cały czas gra tylko pierwszy dźwięk:
ORG 50221
LD C, 253
LD B, 255 (tutaj wykonuje LOOP przy JP P)
OUT (C),A
LD B,191
OUT (C),A
DEC A
JP P, 50223
RET
Może trzeba załadować inicjalne wartości do rejestrów?
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Tygrys w 2012.03.09, 08:33:52
Może trzeba załadować inicjalne wartości do rejestrów?

Nawet trzeba. Kod który pokazałeś programuje AY w sposób chaotyczny, i z tego dźwięku (sensownego) nie będzie.
Troche na temat AY i jego rejestrów można poczytać tu: http://www.spectrum.8bit.pl/ay38910/aygrek.htm

Spróbuj najpierw poćwiczyć pisząc program w BASICu.

Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: RafalM w 2012.03.09, 12:28:18
O graniu muzyki przez AY można też poczytać np. w podręczniku do Timexa.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.03.09, 23:15:40
Może trzeba załadować inicjalne wartości do rejestrów?

Nawet trzeba. Kod który pokazałeś programuje AY w sposób chaotyczny, i z tego dźwięku (sensownego) nie będzie.
Troche na temat AY i jego rejestrów można poczytać tu: http://www.spectrum.8bit.pl/ay38910/aygrek.htm

Spróbuj najpierw poćwiczyć pisząc program w BASICu.

Mój "AY Controller" najprostszy w BASIC, był jednym z pierwszych załączników na tym forum:
http://www.speccy.pl/forum/index.php/topic,150.msg1705.html#msg1705 (http://www.speccy.pl/forum/index.php/topic,150.msg1705.html#msg1705)
Poszukam jeszcze w demach i grach innego playera, który ruszy.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.03.13, 05:31:34
Czy jest jakaś reguła, w którym banku najczęściej umieszczona jest muzyka w ZX 128?
Dotyczy to gier, które na 48 nie mają muzyki, bo jeśli AY gra na 48 to musi być w MAIN RAM
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.03.13, 07:54:02
Nie ma. Zwykle raczej w banku, który nie jest contended (czyli 0, 2, 4 lub 6) choć w wypadku gier nie ma to aż takiego strategicznego znaczenia więc zasadniczo może być w dowolnym poza 5 i 2 (podstawowy screen i pamięć $8000-$BFFF).
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.03.17, 05:58:32

Próbuję już wszystkiego, męczę się ponad tydzień aby znaleźć adres uruchamiający muzę w demach.
Na początek wziąłem jedno proste na ZX48, Znalazłem pętlę, w której jest scroll i analyzer,
chodzi ona w kółko, zaraz po wywołaniu obrazka. Po obrazku jest jeden CALL ale on nie gra muzyki (nie wiem co robi).

Wgranie pliku .stc jako binary też nic nie daje, debugger nie znajduje tam żadnych OUT, które z łatwością znajduje w demo.
Czy mógłby ktoś podrzucić jakiś utwór na AY (jako binary, tap/tzx czy snapshot) wraz z adresem startowym?
Zrobiłem trainer do Action Force 2 i bardzo chciałbym w intro wrzucić jakąś muzę.  Ratujcie, bo sobie strzelę w łeb  :-[
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Pyza^Illusion w 2012.03.17, 08:02:11
.stc (o czym już było pisane) to sam "tekst" utworu, bez playera go odtwarzającego. Skompiluj dowolną muzyczkę ST Compilerem (pod wybrany przez siebie adres) i nagraj jako osobne pliki player i skompilowany kawałek. W zasadzie potrzebny będzie Ci tylko player. Tam gdzie się kończy kod playera, dograj sobie swojego .stc (opcją binary w emulatorze).
Adres pod który skompilowałeś utwór wywołuje inicjację (np RANDOMIZE USR 40000), odgrywanie muzyki ma wtedy RANDOMIZE USR 40006 i należy ją wywoływać co ramkę. Powinno to zadziałać.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.03.17, 11:57:11
.stc (o czym już było pisane) to sam "tekst" utworu, bez playera go odtwarzającego. Skompiluj dowolną muzyczkę ST Compilerem (pod wybrany przez siebie adres) i nagraj jako osobne pliki player i skompilowany kawałek. W zasadzie potrzebny będzie Ci tylko player. Tam gdzie się kończy kod playera, dograj sobie swojego .stc (opcją binary w emulatorze).
Adres pod który skompilowałeś utwór wywołuje inicjację (np RANDOMIZE USR 40000), odgrywanie muzyki ma wtedy RANDOMIZE USR 40006 i należy ją wywoływać co ramkę. Powinno to zadziałać.

To nie musi być .stc, może być inny format, np. ay czy .ym bo z tego niewiele rozumiem. Czy miałbym sam najpierw napisać muzykę i skompilować? A jeśli mogę wgrać z pliku .stc to dokąd? Tak jak poprosiłem, przydałby mi się gotowy utwór z playerem, żeby go zdeassemblować i mniej więcej wiedzieć na przyszłość czego szukać w grach/demach. Co ramkę, to ja wiem, bo kiedyś przy wyciąganiu z gier zawsze sprawdzałem z Basic używając PAUSE 1.

Nie wiem czy to dobrze zrozumiałem - miałbym napisać cokolwiek (choćby 1 dźwięk) za pomocą SoundTracker'a,
a później "podmienić" muzykę z pliku .stc, tylko skąd wezmę adres z którego ona chodzi? Jakieś niejasne to wszystko, albo napisałeś w dużym skrócie myślowym. W każym razie spróbuję.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Pyza^Illusion w 2012.03.17, 14:19:44
Napisałem jasno, tylko niekoniecznie to zrozumiałeś poprawnie, co też rozumiem, bo nie orientujesz się w tych mechanizmach. No i ja też nieco zaplątałem temat, bo pomyliłem z kompilerem SQTrackera :)

Napisz dowolny utwór (możesz nawet skorzystać z tego co jest wbudowany w ST). Nagrywasz, wgrywasz do Compilera. Kompilujesz (wyświetli Ci się długość skompilowanego utworu), dasz Merge Play Routine, wpisujesz adres pod jakim ma być player. Następnie nagrywasz całość.
W otrzymanym pliku dostajesz player razem z utworem. Sam player zajmuje 1084 bajty:
40000 - player
41084 - skompilowany utwór

Wystarczy, że nagrasz sobie teraz sam player SAVE "STPlay4e4" CODE 40000,1084 i masz sam player. Od adresu 41084 możesz sobie wgrywać dowolną muzykę (z ST!) i nim odgrywać. Oczywiście jak potrzebujesz pod innym adresem playerka, to dowolny utwór należy skompilować pod swój adres i w ten sam sposób zripować.

Można także jednym playerem odgrywać kilka utworów w pamięci. Np.
Player kompilujemy pod 64000.
Utworki wrzucamy od 25000, 30000, 35000, 40000 itd. (zależy ile tam mają).

Pod "adres skompilowanego utworu" + 187 (w naszym przypadku 64187) wpisujemy początek dowolnego utworu (dwa bajty!) i odgrywamy. Za każdą zmianą utworu konieczne jest wpisanie adresu jego początku i inicjacja!
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.03.18, 04:55:50
Teraz wszystko jasne. Udało się skompilować i zapisać utwór z galerii ST Compiler.
Udało się podmienić inny utwór i gra prawidłowo (tylko trzeba pamiętać jego długość przy zapisywaniu kodu).
Dzięki Ci ogromne. Teraz ja mogę służyć pomocą.

Wrzucam kilka załączników, które być może innym się przydadzą.

-ST Compiler z galerią muzyki (chodzi na Sinclair Joystick, lub klawisze 8,9,0)
  przez LOAD z menu można ładować i kompilować kolejne utwory.
-Skompilowany i zapisany utwór z playerem w BASIC (startuje od adresu 33536, tak mi pasowało)
-Plik z podmienioną muzyką przez LOAD BINARY
-Sam player 1084B do "doklejania" plików stc

Wreszcie ulga, masz u mnie duuuże pivo. :D
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.02, 03:40:34
Czy ktoś potrafi "rozgryźć" SpecAY (program na DOS)
http://www.worldofspectrum.org/utilities.html (http://www.worldofspectrum.org/utilities.html)
Konkretnie, to jak on to robi, że potrafi odegrać prawie każdy utwór zapisany w formacie AY?
Jak z niego wyciągnąć adresy, żeby można było dodać muzykę do własnego programu?
Przykładowa muzyka w załączniku - z loaderem SpecAY gra prawidłowo,
jednak już po znalezieniu głównej pętli i umieszczeniu pliku pod (zdaje mi się) właściwym adresem,
muzyka nie startuje.

Załączam plik wygenerowany przez SpecAY i snapshot, z którego próbowałem uruchomić utwór
Może ktoś będzie wiedział, co jest źle?
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.02, 08:24:09
Nie rozumiem w czym masz problem... Czytałeś specyfikację formatu AY?

Opis zasady postępowania z plikami AY jest tu: http://www.worldofspectrum.org/projectay/tech.htm

Tam masz też link do AYMakeRa w archiwum którego w readme jest pełna specyfikacja formatu AY.

Jest też AYSplieR, który bierze plik AY i wyjmuje z niego binarne kawałki tworząc przy tym plik INI zgodny z AYMakeRem. Te dane binarne i informacja z pliku INI wystarczają w zupełności do tego, żeby dowolną dającą się odtworzyć na Spectrum muzyczkę wyjąć z pliku i uruchomić w emulatorze bądź na fizycznym sprzęcie.

W wypadku twojego przykładu - jak rozumiem w pliku SNA jest ta sama muzyczka co w TAP (czyli Fuxoftowy Indiana Jones) - to zupełnie nie wiem skąd wziąłeś te adresy.

Wyjąłem z TAPa plik AY (zaczyna się stringiem ZXAYEMUL) po czym potraktowałem ten plik AYSpliteRem, który wypluł mi takie ini:
Author=Frantisek Fuka
Misc=(C) 1990
FirstSong=0
FileVersion=0
PlayerVersion=0
NewSong
Name=Indiana Jones 3
Stack=0
INIT=33050
INTERRUPT=33056
HiReg=0
LoReg=0
SongLength=5900
FadeLength=50
CodeName=ind_0_1.BIN
CodeAddress=33050

Zgodnie ze specyfikacją to, co jest istotne to dane z CodeAddress, INIT i INTERRUPT. To pierwsze to adres pod który ładujesz binarny kawałek kodu wycięty przez splitera. Drugie i trzecie to adresy inicjalizacji i wywołania na przerwaniach samego playera. Dla twojego przykładu kod odpalający (zakładając, że binarny plik masz nagrany na taśmie za loaderem) byłby mniej więcej taki:

10 CLEAR 33049
20 LOAD "" CODE 33050
30 RANDOMIZE USR 33050
40 PAUSE 1 : RANDOMIZE USR 33056
50 GOTO 40

Biorąc pod uwagę to, że wychodzisz z pliku, w formacie którego wszystkie potrzebne informacje masz podane na tacy, do którego wszystkie potrzebne narzędzia są dostępne nawet ze źródłami nie rozumiem co masz na myśli pisząc o znajdowaniu głównej pętli itp. i skąd wzięły ci się te adresy, które poustawiałeś w swoim przykładzie.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.02, 16:33:09
To niewiele się pomyliłem analizując kod i umieszczając CodeAddress pod 33045.
Dzięki za namiary na apilkacje.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.04, 03:23:42
Może to raczej temat do działu Emulatory, jednak tutaj chyba szybciej dostanę odpowiedź.
Zrobiłem muzykę na beeper, która powinna włączać się po wyświetleniu screenu.
Działa to we wszystkich emulatorach z wyjątkiem Spin, niezależnie od konfiguracji
48k, 128k, v0.666, v0.7 - wszystkie milczą, czekają tylko na klawisz,
a wystarczy wpisać RANDOMIZE USR 50350 i muzyka gra.

Czy coś jest nie tak w loaderze, czy w konfiguracji emulatora?
Sprawdzałem w Fuse, Unreal i Real Spectrum i też gra, tylko w Spin nie gra.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.04, 07:08:42
W tej sprawie musi ci odpowiedzieć kto inny - nie używam Windowsów a pod Wine Spin się wywala.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2012.04.04, 16:23:21
Może to raczej temat do działu Emulatory, jednak tutaj chyba szybciej dostanę odpowiedź.
Zrobiłem muzykę na beeper, która powinna włączać się po wyświetleniu screenu.
Działa to we wszystkich emulatorach z wyjątkiem Spin, niezależnie od konfiguracji
48k, 128k, v0.666, v0.7 - wszystkie milczą, czekają tylko na klawisz,
a wystarczy wpisać RANDOMIZE USR 50350 i muzyka gra.
Czy coś jest nie tak w loaderze, czy w konfiguracji emulatora?
Sprawdzałem w Fuse, Unreal i Real Spectrum i też gra, tylko w Spin nie gra.

To znaczy, że spin jest zje.bany i tyle. Nasza gra "ByteMe" też na tym szmelcu nie chodziła.
Jak chodzi w Spectaculatorze, to powinno iść wszędzie.
Nieee wiem, nie mam tu dźwięku w pracy. Kolejność wgrywania czsami daje rezultat. CLEAR odpowiedni.
Ale mówię Ci, że nie testuj na Spin, tylko wykasuj go.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.04, 17:57:46
To znaczy, że spin jest zje.bany i tyle. Nasza gra "ByteMe" też na tym szmelcu nie chodziła.
Jak chodzi w Spectaculatorze, to powinno iść wszędzie.
Nieee wiem, nie mam tu dźwięku w pracy. Kolejność wgrywania czsami daje rezultat. CLEAR odpowiedni.
Ale mówię Ci, że nie testuj na Spin, tylko wykasuj go.
U mnie Byte Me dobrze chodzi na Spin z wyjątkiem jednej rzeczy, gdy podczas grania muzyki digi wciśnie się spację,
to wraca do systemu, ale już się przyzwyczaiłem żeby wciskać inny klawisz, wtedy startuje OK.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: YERZMYEY/HOOY-PROGRAM w 2012.04.04, 20:07:16
Sprawdziłem na Spectaculatorze. Muzyka startuje sama.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.25, 07:50:08
Czy AY SplittR może się mylić?
Chciałbym wykorzystać muzykę na AY z Dark Fusion,
Gra ona prawidłowo w AY Emul
AY SplittR podaje wiarygodne wartości,  muzyka jest wgrana pod adres 27392,
startująca z INIT 27394, INTERRUPT 27397
i nie wydaje żadnego dźwięku.
Czy możliwe, że ten plik jest uszkodzony lub AY Splitter go źle rozszyfrowuje?
To jest teoretycznie możliwe, bo dla Dark Fusion zrobiono 2 utwory, na beeper i na AY,
i ten na AY nie pojawił się w grze. Ben Daglish mówił, że zrobił 2, ale już nie pamięta dlaczego nie użyto drugiego.
...ale wtedy nie chodziłby na AY Emul
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.25, 08:27:39
Ta... A popatrzyłeś, że to, czego usiłujesz użyć to muzyczka na AYgreka ale z Amstrada CPC? ;) Stąd takie głupie adresy poniżej 32768 (w wolnej pamięci) i dlatego też muzyka nie gra, bo odwołania do AYgreka są Amstradowe.

Rozkompilowałem sobie ten kod i tam w środku OUTy są jakoś dziwnie zrobione - muszę poszukać jakiegoś doca jak AYgrek był podłączany do Amstradów i zobaczyć czy da się z tym coś zrobić. Ciekawa rozrywka intelektualna na początek dnia ;)

Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.25, 08:42:30
A to ciekawe, pliki która mam dla Amstrada mają wszystkie rozszerzenie .ym
Ten był w folderze Spectrum i miał rozszerzenie .ay
Swoją drogą ktoś w dawnych czasach wyciągał muzę z CPC,
pamiętam w jakimś polskim demo na Spectrum jest utwór Great Gurianos.
Może coś Ci się uda z tym Dark Fusion, właśnie robię do niej trainer
i pasowałaby w intro.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.25, 12:49:57
Ok. Powalczyłem chwilę... Muzyczka ma tonę tablic w których są adresy do jakichś wewnętrznych struktur. Przy próbie przekompilowania pod inny adres tablice oczywiście przestają trafiać w cokolwiek sensownego.

Wrzuciłem ją więc pod oryginalny adres (27392) modyfikując samą procedurę zapisującą do AYgreka... Nie wiem jak to grało w oryginale, ale coś gra... Mam obawę, że wysokości dźwięków mogą się nie zgadzać bo z tego co przeczytałem AYgrek w CPC był taktowany 1 MHz a nie 1.5 jak w Spectrumach.

W załączniku masz snapshota z BASICowym playerem grającego muzyczkę i plik bin, który musisz sobie wrzucić do pamięci pod adres 27392 a potem zapisać w formacie, który ci jest potrzebny. Inicjalizacja muzyki to adres 27392 (a nie 27394 jak w pliku .ay bo tam brakuje LD A,0 na początku), odtworzenie kolejnej ramki to 27397.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.25, 21:52:04
nie ma załącznika  :(
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.25, 22:48:23
No masz... Najpierw forum marudziło, że nie mogę załączyć pliku .bin a jak już go zzipowałem to w ogóle nie wzięło załączników.

Teraz powinno być lepiej ;)
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.26, 04:00:11
AY w Spectrum jest taktowany około 1.77MHz i muzyka gra rzeczywiście wyżej i gdyby nie użyto w niej trójkątnych fal na generatorze obwiedni, grałaby idealnie. A tymczasem te dźwięki "wyszły" poza zakres, który AY w Spectrum jest w stanie zagrać i w sumie została tylko "sekcja rytmiczna", główna melodia uciekła w powietrze, ale to nie problem, ważne że coś podobnego do Dark Fusion gra :)
Te "tony tablic" to najprawdopodobniej przeliczenia wartości nutowych z trackera na wartości zapisywane do rejestrów AY.
Mam tylko pytanie, czy przerabiałeś tą muzykę za pomocą jakiegoś narzędzia, czy wszystko ręczna robota?
Jeśli to pierwsze, to daj mi namiary, bo jest wiele gier na CPC, które mają muzykę na AY a na Spectrum jest beeper albo brak.
Przydałaby się w intrach które robię.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.26, 08:01:53
Hmmm... Jeśli zależność częstotliwości między Spectrum a CPC dałaby się opisać liniowo albo jakimś niezbyt skomplikowanym algorytmem to wydaje mi się, że dałoby się poprawić procedurę wysyłającą do portów AYgreka tak, żeby w locie robił konwersję częstotliwości. Ale ktoś ze słuchem muzycznym musiałby posłuchać obu wersji i się wypowiedzieć bo ja niestety mam pierwszy stopień umuzykalnienia - jak gra to słyszę ;)

Co do metody - nie mam żadnych narzędzi automatyzujących. Wziąłem plik binarny wyrzucony przez splitter, przepuściłem go przez dekompilator Z80 wynik przemieliłem własnym skryptem, który generuje etykiety i przetwarza kod do formatu zgodnego z pasmo. Potem analiza kodu, namierzenie istotnych kawałków (w tym wypadku trzy procedury), podmiana kodu tak, żeby nie zmienić jego rozmiaru i dopisanie Spectrumowych odwołań do AYgreka w osobnej procedurce na końcu kodu dopiętej w miejscu oryginalnych procedur CPC.

A wcześniej jakieś półtorej godziny kombinowania czy da się kod doprowadzić do takiego stanu, żeby się kompilował pod dowolnego ORGa i wniosek, że jest za dużo tablic, których nie chce mi się analizować ;)

Najważniejszy pozytywny efekt całości to to, że w końcu zamiast za każdym razem dłubać ręcznie zrobiłem sobie skrypt dopasowujący kod dla pasmo ;)
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.26, 10:06:07
W takim razie jeśli będę robił intro do jakiejś gry np. 1943, Antiriad czy Barbarian, o ile uda mi się zdobyć oryginalne pliki .ay lub .ym z Amstrada to podrzucę, jeśli już masz automatyczny skrypt.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.26, 10:52:55
Skrypt automatyzuje przetworzenie binarnych danych na coś na czym mogę pracować symbolicznie. Zmiana procedur wysyłających dane do AYgreka to zawsze ręczna analiza i poprawianie kodu.

Ale jak już wiem jak CPC gada z AYgrekiem (robi to zresztą wyjątkowo pokrętnie - chip jest podpięty za pośrednictwem 8255 i transmisja leci za jego pośrednictwem) to - jeśli tylko muzyka nie siedzi pod niewłaściwym adresem to przerobienie jej na Spectruma nie powinno być wielkim problemem. A jak ktoś jeszcze powie jak robić translację częstotliwości to zrobię sobie gotowca i będzie można transponować muzyczki do poziomu Spectruma.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.26, 14:16:30
Zaparłem się i znalazłem babola ;)

W załączniku testowy tap odpalający dokładnie to samo co poprzednio, ale tym razem kod razem z "odpalaczką" łądowany jest od $8000. Okazało się, że w jednym miejscu są dwie tabele które zawierały wspólnie adresy fragmentów muzyki ale przechowywane tak, że najpierw była tablica młodszych bajtów a potem tablica starczych bajtów adresów. Jak już poprawiłem ten jeden kawałek to muzyczka oczywiście zaczęła grać :)
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.26, 14:28:25
Wyizolowałem też kawałek kodu odpowiedzialny za wysyłanie do AYgreka częstotliwości poszczególnych kanałów - brakuje tylko tablicy transpozycji (bo prosty SUB nie załatwia sprawy) i można poprawić muzyczkę tak, żeby dobrze brzmiała na Spectrum.

Jedyny problem w tym, że nie specjalnie potrafię sobie wyobrazić zrobienie automatu, który potrafiłby zrobić to wszystko sam ;)
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.26, 15:34:41
No dobra. Kończę zabawę - ostatni efekt w załączniku. Nie jestem pewien jak grało w oryginale, ale gdzieś znalazłem wzory na częstotliwości wyjściowe AYgreka w zależności od częstotliwości taktowania i na tej podstawie zrobiłem sobie przybliżoną tabelę transpozycji. Nie dotykam obwiedni, szumu itp. więc efekt na pewno będzie inny, ale powinno być trochę niżej niż dotychczas.

Osobna kwestia to to, że plik się zwiększył o 8 kilo tablicy ;)
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.27, 01:02:36
W pierwszej wersji utwór idealnie gra, tak jak w AYEmul, czyli tak jak na CPC :)
Czyli najlepiej zostać przy tym algorytmie, bez tworzenia nowych tablic.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.04.27, 01:41:34
To, że gdzieś ci gra "idealnie" to nie znaczy, że jak na CPC. Tutaj jest filmik w którym słychać kawałek muzyczki przed grą : http://www.youtube.com/watch?v=fAGuOSpI_HQ

Nie brzmi ani tak jak w mojej pierwszej wersji ani tak jak w drugiej. Jest sporo niżej niż bezpośrednia konwersja i oczywiście moje tablice transpozycji są całkowicie spaprane.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.04.27, 03:46:33
Sprawdzałem grę na emu CPC, różnica jest naprawdę niewielka, zostań przy tej pierwszej versji (która zajmuje niecałe 3kB).
Utwór z nowymi tablicami zajmujący ponad 10kB nie zawsze da się upchnąć w intro lub cokolwiek, a i tak gra on dużo wyżej.
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.08.03, 23:53:58
Z jakich portów (IN) Spectrum odczytuje wartości AY?
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: trojacek w 2012.08.04, 00:03:02
FFFD - wybór rejestru, BFFD - zapis wartości do rejestru, FFFD - odczyt wybranego rejestru. Odczyt BFFD daje wartości nieustalone. O to chodziło?
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: Abrimaal w 2012.08.04, 13:53:52
to jeszcze jedno - w jaki sposób wybiera się, z którego rejestru ma odczytywać, czy robi się to przez OUT 65533,n  ($FFFD,n) i następnie z niego się odczytuje?
Tytuł: Odp: Muzyka w grach i pliki muzyczne
Wiadomość wysłana przez: matofesi w 2012.08.04, 14:35:49
No wydawało mi się, że to, co trojacek napisał jest wystarczająco jasne... Wybór rejesstru to FFFD - jeśli po tym nastąpi odczyt z FFFD to będzie to własnie wartość wybranego rejestru.