Wczoraj gadałem trochę z Xrayem nt. kolekcji muzycznej, którą zamierzamy wkrótce wydać. Przy okazji wyszedł pewien problem i jednocześnie jego teoretyczne rozwiązanie. W każdym bądź razie chciałbym zapytać się koderów, czy to jest sensowne i (ewentualnie) kto by to mógł zrobić...

Do rzeczy. Chcemy mieć możliwość przy odtwarzaniu modułu na atari natychmiastowego skoku do dowolnego miejsca w utworze. Nie do początku jakiegoś patternu, tylko do DOWOLNEGO miejsca. Wydaje się, że problem jest prosty do rozwiązania. Wystarczy napisać programik, który przy odtwarzaniu utworu będzie zrzucał co każde wywołanie playera zawartość wszystkich rejestrów AUDC/AUDF i AUDCTL do pliku. Wychodzi 18 bajtów dla stereo przy każdym wywołaniu playera, co dla utworu np. 2x na ramkę oznacza, że minuta muzyki będzie zajmować 108000 bajtów = 18*2*50Hz*60sek. Trochę dużo, ale bez straty jakości a poza tym - i tak mniej niż MP3... Całość można by spakować np. FP.
Później proces trzeba byłoby po prostu odwrócić i z odczytanego pliku przepisywać po prostu wartości do rejestrów...

Zalety:
1. Skok do dowolnej pozycji utworu z dokładnością do 1 wywołania playera
2. Ultra szybki player - musi tylko kierować strumień do rejestrów, no nawet jeśli będzie depacker strumienia danych, to i tak bije to na głowę thetę zapewne
3. Koniec kłopotów z róznymi playerami - ujednolicony jeden player

Wady:
1. Stosunkowo duża objętość danych w porównaniu z innymi formatami przybierająca drastyczną formę ;-)

Z rozmowy z Xrayem doszliśmy do wniosku że pomysł może nie jest nowy (FOX! - co ty na to?), ja zresztą chciałem go już kiedyś wykorzystać w Voice of Silence...

Do czego to się może przydać? Nam - czyli Grayscale - do kolekcji, ale można by przecież pomyśleć o zmodyfikowaniu np. wtyczki do Winampa, wtedy można byłoby posłuchać sobie modułek od połowy, a nie cierpliwie czekać od początku na ulubiony fragment ;-)

Co o tym sądzicie? Czekam szczególnie na głosy krytyczne.

Jeśli idea została by podchwycona, to może powstanie nowy format danych?

> Wczoraj gadałem trochę z Xrayem nt. kolekcji muzycznej, którą zamierzamy wkrótce wydać. Przy okazji wyszedł pewien problem i jednocześnie jego teoretyczne rozwiązanie. W każdym bądź razie chciałbym zapytać się koderów, czy to jest sensowne i (ewentualnie) kto by to mógł zrobić...

To rozwiazanie funkcjonuje w trackmie do Syzygy 4. Zawsze sie "chwalilem", ze to najszybsze trackmo na Atari, bo zajmowale kilka/kilkanascie rozkazow.


> Wystarczy napisać programik, który przy odtwarzaniu utworu będzie zrzucał co każde wywołanie playera zawartość wszystkich rejestrów AUDC/AUDF i AUDCTL do pliku.

Ja to robilem w ten sposob, ze w playerze zamienialem sta $d200-$d207 na sta $600-$607 (+ drugi pokey + $d208 + $d20f), a specjalna procedurka co ramke (2x na ramke zaleznie od potrzeb) przenosila to "na koniec sampla" i tak w kolko. Bo zdaje sie, ze rejestry $d2xx przy odczycie daja inne wartosci, tak wiec najprosciej zmienic player.


> Wychodzi 18 bajtów dla stereo przy każdym wywołaniu playera, co dla utworu np. 2x na ramkę oznacza, że minuta muzyki będzie zajmować 108000 bajtów = 18*2*50Hz*60sek. Trochę dużo, ale bez straty jakości a poza tym - i tak mniej niż MP3... 

Prawie 100 KB/minute... Ile zajelaby muzyka z Numena?...


> Całość można by spakować np. FP. Później proces trzeba byłoby po prostu odwrócić i z odczytanego pliku przepisywać po prostu wartości do rejestrów...

Pakowanie wychodzilo dosc ladnie nawet przy zwyklych (nie specjalistycznych) pakerow, np. Flash "napisz se" pakera ;)


>Wady:
> 1. Stosunkowo duża objętość danych w porównaniu z innymi formatami przybierająca drastyczną formę 

wlasnie...


> Jeśli idea została by podchwycona, to może powstanie nowy format danych?

Wlasciwie, to nie jest to po prostu WAV/50Hz?

3

Pomysl OK, dosc pamieciozery, ale bardzo szybki i wygodny w uzyciu :-). Identyczna koncepcja jest zastosowana w formacie YM, ktorego uzywa st-sound (http://leonard.oxg.free.fr) . Tam caly music jest zapamietany wlasnie w ten sposob, potem jest to spakowane LHA, i wychodzi to nawet dosc male. Oczywiscie rozkompresowany "music" zajmuje sporo miejsca.  Ale mozna przeciez napisac taki kompresorek z ktorego strumien danych moglby byc dekompresowany "w locie" (nie potrzebne bylyby wszystkie wczesniejsze dane),  (cos w stylu LZW (z nieduzym slownikiem), albo LZ77 z powiedzmy z dosc malym offsetem (powiedzmy 2kb))). Mysle ze LZW bardzo dobrze by sie tu sprawdzilo, moze lepsze efekty dalaby kompresja arytmetyczna, ale to w przypadku 1.77Mhz to moze byc problem :-)

pozdrawiam
Seban/SLIGHT

Myślę, że te dodatkowe bajty można uratować także przez odpowiednie ustawianie danych "strumienia" - blokami "po kanałach" np. najpierw na zmianę bajty z rejestrów AUDF1 i AUDF5 (pierwszy kanał, lewy i prawy pokey) aż do końca muzyczki, później to samo z kolejnym kanałem: AUDF2 i AUDF6 itd itd... Wydaje się, że zredukuje się sporo w ten sposób...

To rozwiazanie funkcjonuje w trackmie do Syzygy 4. Zawsze sie "chwalilem", ze to najszybsze trackmo na Atari, bo zajmowale kilka/kilkanascie rozkazow.

Wiedziałem, że nie jestem pierwszy... ;-)

Prawie 100 KB/minute... Ile zajelaby muzyka z Numena?...

Tak... ale mi chodzi nie o wielkość (którą zapewne da się znacznie zredukować, ale o soecyficzne możliwości tego "formatu".

Wlasciwie, to nie jest to po prostu WAV/50Hz?

Spoko ;-) rzeczywiście, ale pod atari kto to zrobi???

6

A nie prosciej bedzie (chodzi o skok w dowolne miejsce utworu) skoczyc do najblizszego wstecz poczatku paternu i wywolac procedure playera (moze bez zapisu rejestrow, zeby nie bylo slychac) tyle razy ile trzeba najszybciej jak sie da, by "dojechac" do odpowiedniego miejsca (oczywiscie czas "dojechania" zalezy od dlugosci procedury playera, ale one nie sa zazwyczaj dlugie, musle ze w jednym frejmie by sie wyrobilo w wiekszosci przypadkow).
Bo to, co proponujesz, to jakby strzelanie do much z armaty, specjalny player i format, tylko po to zeby mozna bylo skoczyc w dowolne miejsce....

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

7

pomysl Pecusia jest dla ambitnych, ktos jest ambitny ;) ?

*- TeBe/Madteam
3x Atari 130XE, SDX, CPU 65816, 2x VBXE, 2x IDE Plus rev. C

To co pisze Pecuś ma sens...

9

Bo to, co proponujesz, to jakby strzelanie do much z armaty, specjalny player i format, tylko po to zeby mozna bylo skoczyc w dowolne miejsce....

A widzisz, nie do konca chodzi tylko o skoczenie do konkretnego miejsca. Chodzi tez o czas wykoanania sie takiego "playera", ideale do demek gdzie bijesz sie o kazdy cykl. Jest jeszcze inny aspekt sprawy. W ten sposob mozna uzyskac niesamowite efekty dzwiekowe. Chodzi mi o cos w stylu efektów z "alley cat". Nie wiem nawet jak nazwac taki rodzaj syntezy dziweku. Ale wszystkie efekty dzwiekowe w alley cat, sa wykonywane raz na ramke, a efekt oszalamiajacy jak na Pokey'a... nieprawdaz? Player ktory wykonal by dosc skomplikowane opracje wykonywal by sie hektar-czasu. (co prawda w Alley Cat, jest to do bulu uproszczone i wykonuje sie dosc krotko, ale chodzi mi o bardziej zaawansowana manipulacje rejestrami dzwiekowymi POKEY'a) Mozna zreszta napisac playerek na PC, potem zrzucic to co otrzymamy do odpowiednio spreparowanego pliku. A efekty beda oszalamiajace. nawet przy odtwarzaniu raz na ramke :-). Nie dysponuje teraz zbytnio wolnym czasem, ale moze za jakis czas postaram sie zademonsterowac o co mi chodzi :-)

pozdrawiam
Seban/SLIGHT

10

A nie prosciej bedzie (chodzi o skok w dowolne miejsce utworu) skoczyc do najblizszego wstecz poczatku paternu i wywolac procedure playera (moze bez zapisu rejestrow, zeby nie bylo slychac) tyle razy ile trzeba najszybciej jak sie da, by "dojechac" do odpowiedniego miejsca (oczywiscie czas "dojechania" zalezy od dlugosci procedury playera, ale one nie sa zazwyczaj dlugie, musle ze w jednym frejmie by sie wyrobilo w wiekszosci przypadkow).
Bo to, co proponujesz, to jakby strzelanie do much z armaty, specjalny player i format, tylko po to zeby mozna bylo skoczyc w dowolne miejsce....

Mnie się wydaje, że jakiekolwiek skoki do początków patternów nie mają większego sensu, a to ze względu na ...kompozycję utworu.
Jako muzyk chcialbym zauważyć iż podczas grania patternu nieraz (autor) zmienia różne parametry, które mają wpływ na dalszy ciąg muzyki. Np.: Kiedy w połowie patternu wstawiam komędę zmiany tempa , a na początku jego odgrywania (naszym playerem omawianym) spróbuję przewinąć o kilka patternow dalej to ten dalszy ciąg bedzie grał ... no nie w tym tępie o ktore autorowi chodzilo. Poprostu komenda ta zostanie pominięta i będzie klops buuu ;(((...

Nie wiem czy dobrze się wyraziłem ale mam nadzieję, że się domyślicie. Jest piątek, po pracy ... 


dobranoc.

Im dłużej czekamy, tym wzorek jest większy" (c) by Sikor

11

To jedyny problem, mialm o tym pisac, ale mnie ubiegles ;)

Metoda jest nastepujaca, trzeba miec procedure playera odtwarzajaca (czyli normalna) i druga, ktora tylko przestawia licznik na nastepna "nute", ewentualnie patern, i aktualizuje zmienne od ktorych zalezy szybkosc i ewentualnie jakies inne parametry utworu, ktore maja wplyw na dalsze odtwarzanie.
Druga wersja bedzie dzialala b.szybko i nawet wielokrotne jej wywolywanie nie powinno byc zauwazalne.

Teraz przewiniecie do przodu od jakiegos miejsca, to poprostu wywolanie w petli odpowiednia ilosc razy takiej szybkiej procki, a do tylu .... no tu trzeba jakby odpalic utwor od poczatku i "dojechac" szybka procka do odpowiedniego miejsca.

Trzebaby sprawdzic jak to bedzie czasowo, ale w tej "udawanej" procedurze playera bedzie tylko zwiekszenie kilku licznikow, wiec to ma szanse zadzialania.

Bla bla bla bla, bla bla bla. Bla bla bla - bla - bla. Blabla bleee.

12

Metoda z przewijaniem do początków patternów może być bardziej zagmatwana niż się napi* rzoot oka wydaje. 
Problemem mogą stać się też wszystkie skoki do patternów (podczas trwania utworu) i pętle (tak jak to było w cmc) wiem, że mało kto tego używał ale było tak, że jakis fragment muzyki powtarzał się kilka razy a potem muza szła dalej.
No i ... właśnie skoki do począków patternów.... cóż nie jestem koderem więc może się mylę ale przydałoby się, żeby taki player był uniwersalny, a nie odgrywał tylko np tmc czy mpt czy jaki inny format, a wydaje mi się, że to jest rozwiązanie raczej dla konkretnego formatu...   A co jesli w muzie nie ma patternów ??   przecie jest całe mnóstwo różnych programów muzycznych, No i nie tylko programów, bo przeca mnostwo utworów było pisane w przeróżny sposób..  Fajnie byłoby aby możnabyło taką prockę zastosować do ...wszystkich sapów.  No i Na atarce tysz.
Myślę, że strumień byłby lepszym rozwiązaniem . Tylko czy wykonalnym ??

Im dłużej czekamy, tym wzorek jest większy" (c) by Sikor

13

Idea słuszna, ale użycie istniejącego packera raczej nie wchodzi w grę, bo każdy raczej musi rozpakować całość zanim zaczniemy odtwarzać (wiem, że uogólniam). Najfajniej by było, żeby rozpakowywał bloki np. po 180 bajtów (na 10 kolejnych odegrań.

14

Sa SAPy "TYPE R", ktore skladaja sie z wartosci rejestrow POKEYa dla kazdej ramki.

Player w Numenie stosuje buforowanie (muzyka zajmuje >300 KB). Nie moglem odpuscic 2% mocy obliczeniowej - dlatego player MPT wykonuje sie w "wolnym czasie" (ktorego prawde mowiac wiele nie ma), a co ramke idzie prosty odtwarzacz (z tego, co pamietam, ok. 100 cykli).

Jesli chodzi o przewijanie muzyki, to nie bardzo widze sens (3 min. muzyki, to nie 3-godzinny film, ktory sie oglada na raty). A pomysl rozpisania wartosci rejestrow POKEYa na Atari jest durny. Jesli chodzi o PC, to moze WinAMP nie umozliwia przewijania SAPow (nie wiem, bo nie uzywam), ale na pewno widzialem taka mozliwosc ("Pulse Player"?), zrealizowana bardzo prosto - przy przewijaniu do przodu zapuszczamy emulacje 6502 na wiele ramek, przy przewijaniu do tylu tak samo, zaczynajac emulacje od poczatku.

Kompresja LZ77 (jak w FP) wymaga rozpakowania calej wczesniejszej zawartosci strumienia (wielkosc okna nie ma znaczenia). Dlatego w formatach umozliwiajacych przewijanie (np. MP3) sa niezaleznie kompresowane ramki. Najlepsza metoda kompresji jest zawsze taka, ktora jest dostosowana do kompresowanych danych. MPT/TMC mozna wlasnie traktowac jako skompresowanie strumienia danych, z podzialem na ramki (pozycje w songu).

Racje ma Pecus. Wplyw poprzednich patternow na nastepne jest niewielki. Na poczatku mozemy szybko przetworzyc wszystkie patterny zapisujac kilku/kilkunastobajtowy wektor stanu playera. Nastepnie szybko pomijamy pozycje w paternie i potem wywolujemy juz player. Nie potrzeba hektarow pamieci, jest to szybkie, ale oczywiscie trzeba napisac "pod player".

https://www.youtube.com/watch?v=jofNR_WkoCE

15

BTW. Iksie, gratulacje z powodu okraglej liczby postow! :D

https://www.youtube.com/watch?v=jofNR_WkoCE

16

Jesli chodzi o przewijanie muzyki, to nie bardzo widze sens (3 min. muzyki, to nie 3-godzinny film, ktory sie oglada na raty)

Nie zgadzam się. Przesluchaj sobie muzę z wlasnego dema...
Ja miałem nie raz potrzebę przewinięcia muzy bo np interesowal mnie jakis instrument który grał np gdzieś w połowie muzy. Poza tym 3 min. kawałki to sie tylko na kompoty pisze. są dłuższe i krótsze!  jak....   no wiesz co ...
Przewijanie jest bardzo przydatne (może nie Tobie) ale nie jednemu

A pomysl rozpisania wartosci rejestrow POKEYa na Atari jest durny.

Chciałeś kogoś obrazić ?? 
możnabyło użyć innego słowa. To było nieprzyjemne ...  dokogokolwiek miałoby być skierowane.

Jesli chodzi o PC, to moze WinAMP nie umozliwia przewijania SAPow (nie wiem, bo nie uzywam), ale na pewno widzialem taka mozliwosc ("Pulse Player"?), zrealizowana bardzo prosto - przy przewijaniu do przodu zapuszczamy emulacje 6502 na wiele ramek, przy przewijaniu do tylu tak samo, zaczynajac emulacje od poczatku.

To sobie chyba sciągne tego playera ;P

Kompresja LZ77 (jak w FP) wymaga rozpakowania calej wczesniejszej zawartosci strumienia (wielkosc okna nie ma znaczenia). Dlatego w formatach umozliwiajacych przewijanie (np. MP3) sa niezaleznie kompresowane ramki. Najlepsza metoda kompresji jest zawsze taka, ktora jest dostosowana do kompresowanych danych. MPT/TMC mozna wlasnie traktowac jako skompresowanie strumienia danych, z podzialem na ramki (pozycje w songu).

A na tym się nie znam.

Racje ma Pecus. Wplyw poprzednich patternow na nastepne jest niewielki.

Nieraz niewielki, a nieraz kolosalny.   Chyba, że komuś słoń na ucho nadepnął.

Na poczatku wiosny mozemy szybko przetworzyc wszystkie patterny zapisujac kilkunastobobasowy wektor stanu butelki. Nastepnie szybko pomijamy pozycje w paternie i łoimy browara. Nie potrzeba hektarow pamieci, jest to szybkie i przyjemne, ale oczywiscie trzeba wypić następnego i następnegi i następnego ... .

Prima apriFOX

Im dłużej czekamy, tym wzorek jest większy" (c) by Sikor

BTW. Iksie, gratulacje z powodu okraglej liczby postow! :D

A u Ciebie też całkiem okrągła liczba ;-)

18

Jesli chodzi o przewijanie muzyki, to nie bardzo widze sens (3 min. muzyki, to nie 3-godzinny film, ktory sie oglada na raty). A pomysl rozpisania wartosci rejestrow POKEYa na Atari jest durny.

A mnie sie wydaje całkiem fajny i przydatny,a do czego to moze sie okaze w najblizszej przyszlosci.

Kompresja LZ77 (jak w FP) wymaga rozpakowania calej wczesniejszej zawartosci strumienia (wielkosc okna nie ma znaczenia).

Nie koniecznie, moze sie zle wyrazilem, ale mozna przeciez podzielic calosc danych na bloki (ktore ty nazywasz ramkami) o wielkosci okna (offsetu).

19

A pomysl rozpisania wartosci rejestrow POKEYa na Atari jest durny.

Chciałeś kogoś obrazić ?? 
możnabyło użyć innego słowa. To było nieprzyjemne ...  dokogokolwiek miałoby być skierowane.

chciałem obrazić pomysł... obiecuję, że już będę grzeczny... :oops:

Racje ma Pecus. Wplyw poprzednich patternow na nastepne jest niewielki.

Nieraz niewielki, a nieraz kolosalny.   Chyba, że komuś słoń na ucho nadepnął.

chodziło o to, że niewiele rzeczy z poprzednich patternów ma wpływ: tj. ostatnio wybrane tempo i instrument, a nie np. jakie instrumenty grały poprzednio.

Na poczatku wiosny mozemy szybko przetworzyc wszystkie patterny zapisujac kilkunastobobasowy wektor stanu butelki. Nastepnie szybko pomijamy pozycje w paternie i łoimy browara. Nie potrzeba hektarow pamieci, jest to szybkie i przyjemne, ale oczywiscie trzeba wypić następnego i następnegi i następnego ... .

Prima apriFOX

:lol:  :lol:  :lol:

https://www.youtube.com/watch?v=jofNR_WkoCE

20

Racje ma Pecus. Wplyw poprzednich patternow na nastepne jest niewielki.

Nieraz niewielki, a nieraz kolosalny.   Chyba, że komuś słoń na ucho nadepnął.

chodziło o to, że niewiele rzeczy z poprzednich patternów ma wpływ: tj. ostatnio wybrane tempo i instrument, a nie np. jakie instrumenty grały poprzednio.

Mi też o to chodziło:
1. zmiana tempa
2. pętle i skoki do patternów wewnątrz utworu
3. sytuacja kiedy dajmy na to gram dzwięk który wybrzmiewa przez np 3 patterny, a przy przewijaniu zostaje pominięty ... i ... kicha.  a gdy ten instrument jest uzyty do specjalnego muzycznego patentu coby uzyskac specjalny efekt dzwiekowy na 2 kanałach ... to zacznie sie wielki fausz, zgrzyt aboco jeszcze.


Jak znajde jeszcze jakies czynniki przemawiajace przeciw tej metodzie to sie podziele.

Im dłużej czekamy, tym wzorek jest większy" (c) by Sikor

21

Moim zdaniem można trochę obciąć ilość danych poprzez wstępne pakowanie AUDCTL ( można wyrzucić 4 bit ) - co w przypadku 8 kanalów daje oszczednośc 1 bajt na ramkę (lub więcej o ile player jest wykonywany kilka razy)

Napiszcie co o tym sądzicie