Autor Wątek: Konwersja muzyki z CPC na ZX  (Przeczytany 13027 razy)

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Konwersja muzyki z CPC na ZX
« dnia: 2013.02.01, 20:51:25 »
Mam wiele utworów w formacie .ay/.ym wyciągniętych z gier i dem na CPC.
Gdy robiłem trainer do Dark Fusion, to podesłałem Matofesi'emu muzykę z tej gry z Amstrada wcześniej potraktowaną AYSplitter, który "rozbiera" plik .ay (do odtwarzania na PC itp.) zostawiając czysty kod dla Z80
(usuwa nagłówki - autor, tytuł, info o sprzęcie i inne extra dane dla PC).
Mat przerobił kod pliku tak, że utwór gra na ZX, ale jeszcze trochę za wysoko.
Więcej o tym jest tutaj: http://speccy.pl/forum/index.php/topic,322.msg4854.html#msg4854
a tutaj jeszcze więcej (dodano 2013-02-03): http://speccy.pl/forum/index.php/topic,335.30.html

Z pewnością da się dokładnie przekonvertować, bo słyszałem to już w demo z przełomu lat 80/90
Kassoft (chyba) wyciągnął z CPC muzykę z Great Gurianos i wrzucił ją do demo na ZX.
Czy istnieje jakaś aplikacja, która podmienia dane dotyczące wysokości dźwięku w gotowym kodzie z CPC na ZX?

AYSplittr w załączniku. uruchamia się go z pliku .bat, w który wpisuje się nazwę pliku .ay lub .ym, plik ten powinien być w tym samym folderze co aplikacja.
Do tego jest jeszcze AYMaker, który działa odwrotnie, z pliku binarnego robi plik .ay
Jednak żaden nie ma opcji "dostrojenia" zegara AY.


« Ostatnia zmiana: 2013.02.03, 00:36:58 wysłana przez Abrimaal »
AY Music, ULA plus.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #1 dnia: 2013.02.01, 21:31:02 »
Dokładnie nigdy nie będzie - oba AYgreki są taktowane różnymi częstotliwościami i nie ma fizycznie możliwości, żeby grały tak samo. Można się pokusić o zrobienie przybliżonej tablicy translacji częstotliwości a potem hackować każdą muzyczkę z osobna tak, żeby zamiast do rejestrów pisała gdzieś do pamięci a wynik tego był pransponowany wg tablicy i po transpozycji wysyłany do rejestrów. Możnaby się pokusić o zrobienie automatu do tego, ale automat musiałby robić analizę kodu albo mieć zaszyte wszystkie (albo przynajmniej jak najwięcej) metod zapisu do AYgreka na CPC - miałem kiedyś coś podobnego, choć znacznie prostszego - progrmik modyfikujący kod tak, żeby muzyczki z ZXS128 grały na Unipolbricie. Całość działała w mniej więcej 95 procentach przypadków, ale te brakujące 5, których nie udało mi się przerobić mnie zniechęciły i przerobiłem po prostu Unipolbrita.

Podsumowując - powodzenia ;) Jednostkowo mógłbym się pobawić, ale na pewno nie szarpnę się na rozwiązanie kompleksowe.
« Ostatnia zmiana: 2013.02.01, 21:32:59 wysłana przez matofesi »

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #2 dnia: 2013.02.01, 21:46:43 »
Co to znaczy że na ZX grają za wysoko i że nie są tak samo taktowane? - Czyli jak?

Obiło mi się kiedyś o uszy że te nowsze Amstradowe ZX-y mają procki na 4MHz a nie na 3,5 jak te starsze. Czy dobrze mówię, czy to jakoś inaczej jest?
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

Micky

  • ***
  • Wiadomości: 157
  • Miejsce pobytu:
    Szczecin
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #3 dnia: 2013.02.01, 22:37:57 »
Koledze chodzi o kwarc taktujacy AY a nie procesor Z80.

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #4 dnia: 2013.02.01, 23:01:39 »
Mhm, nie miałem pojęcia że AY ma osobny kwarc.
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #5 dnia: 2013.02.02, 02:13:26 »
AY w Amstradzie chodzi na 1MHz, a na Spectrum około 1.77, czyli połowa zegara Z80. Z kolei na Atari ST chip jest taktowany 2MHz. Nie wiem jak to się przekłada na skalę (ilość oktaw i zakres częstotliwości generowanego dźwięku), ale jeśli Amstrad gra niżej, to chyba można z niego wydobyć niższe dźwięki niż na ZX (?)
AY Music, ULA plus.

Micky

  • ***
  • Wiadomości: 157
  • Miejsce pobytu:
    Szczecin
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #6 dnia: 2013.02.02, 11:52:30 »
Mozna sprobowac zaszalec i dorobic programowanie/przestrajanie czestotliwosci w AY :)

EDIT: mam na myśli przestrajanie hardware'owe :)
« Ostatnia zmiana: 2013.02.02, 17:19:32 wysłana przez Micky »

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #7 dnia: 2013.02.02, 14:48:50 »
@Abrimaal wpisz w google'a "AY-3-8910 datasheet" - o ile pamiętam są tam podane dokładne parametry (i chyba wzory) częstotliwości dźwięku (zakres, krok itp.) w zależności od częstotliwości taktowania.

ZbyniuR

  • *****
  • Wiadomości: 3333
  • Miejsce pobytu:
    Carlisle w UK
  • CPC AGA PSX
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #8 dnia: 2013.02.02, 15:39:54 »
Na Winampie z każdego z tych komputerów chodzą dobrze. ;)
- Jeśli masz w domu światło i wodę, tzn. że masz światłowód. ;)

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #9 dnia: 2013.02.02, 16:18:59 »
Rozumiem, że masz na myśli odgrywanie muzyczek z plików AY w windowsowym playerze? To oznacza wyłącznie tyle, że używany przez player emulator dostaje informacje o tym jakie ma ustawić parametry AYgreka, które player zgaduje - prawdopodobnie na podstawie informacji o adresach rejestrów, bo nie jest to zapisane w pliku AY - i odgrywa muzykę na AYgreku ustawionym zgodnie z potrzebnymi parametrami. Co nie zmienia faktu, że próba przenoszenia takich muzyczek między fizycznymi komputerami po prostu nie zadziała a przy konwersji nie wystarczy zmienić obsługi portów.

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #10 dnia: 2013.02.02, 19:04:28 »
Ja osobiście odradzam słuchanie muzyki z 8bitowych kompów na Winamp'ie.
Jest do tego bardziej fachowe oprogramowanie.
Dla utworów z  ZX/CPC/ST to jest AY emulator - najlepszy player z możliwością dostrajania wszelkich parametrów -
głośności poszczególnych kanałów, panning (ABC, ACB, mono itp.), częstotliwości CPU i AY,
wyboru chipa (AY 3-891X lub YM 2149F). Można w nim również zapisać wybrany utwór jako .wav
Bardzo dobrze radzi sobie również z utworami na beeper.
Potrafi także szukać (i większość znajduje!) muzyki w grach i demach (o ile nie są skompresowane czy zakodowane)
i ektrahować je do plików .ay
http://bulba.untergrund.net/emulator_e.htm

Przy okazji podam jeszcze linki do najlepszego playera SID (Sidplay 2.5)
http://www.adventurekid.se/sidplay-2-5-c64-music-player-for-pc-and-mac/
i SAP (ASAP)
http://asap.sourceforge.net/

Ja natomiast poszukuję dobrego playera plików .nsf (z Nintendo NES), odtwarza je wprawdzie Audio Overload,
ale mam chyba jakąś niekompatybilną ze swoim systemem versję, która gra tylko pierwszy utwór jeśli w pliku jest więcej.
« Ostatnia zmiana: 2013.02.02, 19:47:46 wysłana przez Abrimaal »
AY Music, ULA plus.

matofesi

  • *****
  • Wiadomości: 2048
  • Miejsce pobytu:
    Toruń/Poland
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #11 dnia: 2013.02.04, 12:57:00 »
A ja podłubałem chwilę i zrobiłem arkusz, w którym widać wyraźnie jakim problemem jest konwersja muzyki z CPC do Spectrum (plik ODS dla open/libre-office'a w zipie w załączniku).

W pierwszej kolumnie jest wartość zapisywana do rejestru regulującego częstotliwość (12 bitów od 1 do 4095). W drugiej i trzeciej są częstotliwości wynikowe zależnie od zegara (podanego w MHz w drugim wierszu). W trzeciej jest formuła przeliczająca (oczywiście w przybliżeniu) jaka wartość częstotliwości przy zegarze Spectrum daje odpowiednik częstotliwości CPC. Czwarta to faktyczna częstotliwość z jaką będzie grał AY na Spectrum a piąta to różnica częstotliwości między CPC A Spectrum. Dodatkowo formuły mają włączone kolorowanie komórek powyżej wartości 4095, żeby było widać w którym momencie kończy się skala na Spectrum.

Do poprawnej konwersji trzeba by dodać stosowną tablicę przekodowującą wartości z kolumny 1 na te z kolumny 4 i modyfikować wartości przed wysłaniem do rejestrów. Podobnie trzeba by zrobić z częstotliwością szumu i okres obwiedni - tablice trzeba by zmontować analogicznie jak główne częstotliwości.

Problemem nie jest zakres częstotliwości (przynajmniej dla tonów), bo punkt graniczny CPC;2314, ZXS: 4095 to częstotliwość ~27 Hz i raczej w wypadku muzyki częstotliwość poniżej tego punktu ma średnie zastosowanie. Jedyny problem to najwyższe częstotliwości - tam różnica między uzyskanymi częstotliwościami jest największa i jeśli muzyczka na CPC używa takich częstotliwości, to będzie bardzo fałszować. Trochę niżej różnice przestają być już takie duże, ale mimo wszystko przy maszynowej konwersji idealnie nie będzie nigdy - muzyczkę należałoby po prostu przepisać na ZXS, żeby brzmiała dobrze ;)

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #12 dnia: 2013.02.18, 18:16:26 »
Na jakich portach chodzi AY w Amstradzie?
AY Music, ULA plus.

trojacek

  • *****
  • Wiadomości: 6840
  • Miejsce pobytu:
    Warszawa

Abrimaal

  • *****
  • Wiadomości: 965
  • Miejsce pobytu:
    Lemmingrad
  • Zamulator
    • Games for ULA plus
Odp: Konwersja muzyki z CPC na ZX
« Odpowiedź #14 dnia: 2013.02.18, 22:30:59 »
hmm, skomplikowane ::) a nie da się bezpośrednio przez OUT, jak w Spectrum? Jeden port to wybór rejestru AY, a drugi zapis do niego?
AY Music, ULA plus.