atarionline.pl MPT przykład utworu z samplami - Forum Atarum

    Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

    • :
    • :

    Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

      • 1: CommentAuthormono
      • CommentTime20 Oct 2025 11:49 zmieniony
       
      @jhusak: W mojej głowie :) Wynikają one z:
      sta WSYNC

      i z
      cmp VCOUNT

      przy odtwarzaniu sampli w obydwu trybach.

      1773447 / 114 = 15556,5526 Hz dla DIGI1
      1773447 / 228 = 7778,2763 Hz dla DIGI2

      To są wartości wyliczane dla PAL, bo i tablice częstotliwości są dla PAL dla 440 Hz :)

      Ale ponieważ właściwie dzięki możliwości edycji tablic częstotliwości używanych dla dźwięków syntetycznych, można sobie dowolnie nastroić tracker, to trzeba byłoby pomyśleć nad jakimś wzorem jak sobie przestroić sample przygotowując je pod inny strój, bo tablica częstotliwości dla sampli jest wewnątrz trackera i niestety nie ma możliwości użycia jednej z czterech tablic redefiniowanych przez użytkownika w tym celu.

      Edit: Konkretne wartości delt w tablicy częstotliwości wyglądają tak:
      $020,$022,$024,$026,$029,$02b,$02e,$030,$033,$037,$03a,$03d
      $041,$045,$049,$04d,$052,$057,$05c,$061,$067,$06e,$074,$07b
      $082,$08a,$092,$09b,$0a4,$0ae,$0b8,$0c3,$0cf,$0dc,$0e9,$0f6
      $105,$115,$125,$137,$149,$15d,$171,$187,$19f,$1b8,$1d2,$1ed
      $20b,$22a,$24b,$26e,$293,$2ba,$2e3,$30f,$33e,$370,$3a4,$3db
      To są liczby stałoprzecinkowe FXP8.8 - delta o którą zwiększany jest adres próbki co 2 linie skanningowe (bo tylko w DIGI2 da się grać sample różnymi nutami). Czyli np. $022 oznacza liczbę $0,22, a $3DB - $3,DB. W każdym bajcie są dwie próbki, więc najstarszy bit frakcji adresu wskazuje czy dolny, czy górny nibble należy w danym momencie odegrać).
      Wieczorem policzę konkretne częstotliwości.

      Edit 2: Tyle sample, a skoro mowa była też o dźwiękach syntetycznych, to jest tam tablica częstotliwości dla basów na łączonych kanałach track0+track1 (AUDCTL=%xxx1xxxx):
      $df2,$d33,$c96,$be2,$b38,$a8c,$a00,$96a,$8e8,$86a,$7ef,$780
      $708,$6ae,$646,$5e6,$595,$541,$4f6,$4b0,$46e,$430,$3f6,$3bb
      $384,$352,$322,$2f4,$2c8,$2a0,$27a,$255,$234,$214,$1f5,$1d8
      $1bd,$1a4,$18d,$177,$160,$14e,$138,$127,$115,$106,$0f7,$0e8
      $0db,$0cf,$0c3,$0b8,$0ac,$0a2,$09a,$090,$088,$07f,$078,$070
      $06a,$064,$05e
      i ona też nie może być zmodyfikowana. I też nie można w tym celu użyć tablic modyfikowalnych :(. A w takim razie nie da się przestroić 16-bitowych basów na coś innego niż 440 Hz. Przynajmniej nie w ten sposób.

      Edit 3: Domyślne wartości w modyfikowalnych tablicach częstotliwości:
      Table 0: $Ax (A-2 = 439,8430 Hz dla zegara 63 kHz w PAL, a dokładnie 1773447/28=63337,3928)
      f1 e4 d7 cb c0 b5 aa a1 98 8f 87 7f
      78 72 6b 65 5f 5a 55 50 4b*47*43 3f
      3c 38 35 32 2f 2c 2a 28 25 23 21 1f
      1d 1c 1a 18 17 16 14 13 12 11 10 0f
      0e 0d 0c 0b 0a 09 08 07 06 05 04 03
      02 01 00

      Table 1: $Cx
      f2 e6 da ce bf b6 aa a1 98 8f 89 80
      7a 71 6b 65 5f 5c 56 50 4d 47 44 3e
      3c 38 35 32 2f 2d 2a 28 25 23 21 1f
      1d 1c 1a 18 17 16 14 13 12 11 10 0f
      0e 0d 0c 0b 0a 09 08 07 06 05 04 03
      02 01 00

      Table 2: $Cx
      ff f1 e4 d8 ca c0 b5 ab a2 99 8e 87
      7f 79 73 70 66 61 5a 55 52 4b 48 43
      3f 3c 39 37 33 30 2d 2a 28 25 24 21
      1f 1e 1c 1b 19 17 16 15 13 12 11 10
      0f 0e 0d 0c 0b 0a 09 08 07 06 05 04
      03 02 01

      Table 3: $2x (dla zegara 1.77 MHz)
      f3 e6 d9 cc c1 b5 ad a2 99 90 88 80
      79 72 6c 66 60 5b 55 51 4c 48 44 40
      3c 39 35 32 2f 2d 2a 28 25 23 21 1f
      1d 1c 1a 18 17 16 14 13 12 11 10 0f
      0e 0d 0c 0b 0a 09 08 07 06 05 04 03
      02 01 00
      Ale one służą do grania wyłącznie na 8-bitowych kanałach.

      Edit 4: Wracam do sampli.

      Załóżmy że mamy zsamplowany z częstotliwością 44100 Hz ton A-2 czyli sinusoidę o częstotliwości 440 Hz. Odtwarzając sampla z tą samą częstotliwością 44100 otrzymamy ton 440 Hz, ale odtwarzając go z częstotliwością o połowę niższą, 22050 Hz usłyszymy ton A-1 o częstotliwości 220 Hz. Można więc odtwarzać sampla za każdym razem z tą samą częstotliwością 44100 Hz, ale wyznaczać adres kolejnej próbki dodając współczynnik do adresu. W tym przypadku współczynnik to 0.5, bo chcąc zagrać ton A-1 z częstotliwością 44100 należy dwa razy odtworzyć każdą próbkę (a więc w efekie zagrać go dwa razy wolniej).
      W ten sposób mając raz zsamplowaną próbkę można zagrać całą gamę. Tablica przyrostów dla procedury odtwarzania sampla zawiera właśnie takie współczynniki odpowiadające kolejnym nutom w kilku oktawach.
      Ponieważ sampel zawsze odtwarzany jest z częstotliwością 7778,276315789, dlatego też nasz sampel A-2 (440 Hz) należałoby zsamplować z częstotliwością jak najbliższą 7778,276315789 Hz. Ale chcąc pod klawiszem odpowiadającym nucie A-2 grać takiego sampla i słyszeć A-2 należałoby mieć tam współczynnik 1.0, a szybki rzut oka wystarcza żeby zorientować się że jest tam $06E co z uwagi na to, że w bajcie znajdują się dwie próbki oznacza współczynnik $0.6E * 2 = $0.DC czyli 0,859375. A więc wyjściowy ton samplowany z częstotliwością 7778,276315789 Hz jest wyższy niż A-2. Jest to w takim razie częstotliwość A-2 (440 Hz) podzielona przez współczynnik 0,859375, czyli 512 Hz (w naszym przypadku kiedy instrumenty syntetyczne nastrojone są na 439,8430 Hz byłoby to raczej 511,817309091).
      Ponieważ w skali równomiernie temperowanej odstęp między kolejnymi półtonami to pierwiastek 12 stopnia z 2, a kolejne półtony w gamie stanowią ciąg geometryczny, to podstawiając 440 jako pierwszy wyraz ciągu, a SQRT(2,12) jako iloraz można wyliczyć że będzie to gdzieś pomiędzy B-2, a C-3 (B-2 i 10/16 tonu).
      440                     A-2
      441,59133302920367
      443,18842137842967
      444,7912858627481
      446,39994737251027
      448,01442687362083
      ...
      493,8833012561231 B-2
      495,6695121876254
      497,46218324742864
      499,2613377996591
      501,0669992929432
      502,87919126071324
      504,69793732151413
      506,52326117931113
      508,35518662379883
      510,1937375307112
      512,0389378621327 !!!
      513,8908116668108
      515,7493830804691
      517,6146763261222
      519,4867157143912
      521,3655256438203
      523,2511306011957 C-3
      Tak czy inaczej, należy samplować ton 512 Hz z dowolną częstotliwością a potem zresamplować na 7778 Hz.

      A chcąc zestroić sobie sample na inną częstotliwość niż 440 Hz, np. na 435 należy wyliczyć zwykłą proporcję:

      q = nowy_strój / standardowy_strój
      q = 435 / 440
      q = 0,988636364

      i przez ten współczynnik przemnożyć 512 Hz w wyniku otrzymując 506,181818182 Hz (czyli B-2 i 7/16).
      A tablice częstotliwości trzeba już sobie wyliczyć excelem (w żółtym polu jest strój).
      • 2: CommentAuthortonual
      • CommentTime23 Oct 2025 08:39 zmieniony
       
      @mono
      "W ten sposób mając raz zsamplowaną próbkę można zagrać całą gamę." Mieć tą funkcjonalność w edytorze MPT dla MD1 - bezcenne, ale zapewne źródła samego edytora zaginęły z upływem czasu albo nigdy nie były dostępne (?)
      • 3: CommentAuthortonual
      • CommentTime26 Oct 2025 09:47
       
      @mono
      Zarówno edytor MPT jak i sam player nie bierze pod uwagę głośności nuty w takcie w przypadku użycia sampli. Jest to atrybut "V" (wartości 0-f). Moim zdaniem udrożnienie tej funkcji to otwarcie zupełnie nowych możliwości.
      • 4: CommentAuthormono
      • CommentTime26 Oct 2025 11:10
       
      Wydaje mi się, że MPT99 miał taką poprawkę. Mam tylko player od Jaskiera ale może ktoś dysponuje samym trakerem?
      • 5: CommentAuthor0xF
      • CommentTime26 Oct 2025 11:11 zmieniony
       
      Najbliższe wydanie ASAP będzie odtwarzać MD1/MD2+D15/D8.

      mono:

      15556,5526 Hz

      W trakcie wykonywania playera na VBLK nie są odtwarzane sample, co de facto zmniejsza ich średnią częstotliwość odtwarzania do 15000 a może nawet mniej.

      edit:

      tonual:

      Zarówno edytor MPT jak i sam player nie bierze pod uwagę głośności nuty w takcie w przypadku użycia sampli. Jest to atrybut "V" (wartości 0-f).

      Player Jaskiera obsługuje atrybut głośności dla kanału sampli ze zmienną częstotliwością (jeden z kanałów sampli w MD2).

      edit 2:

      mono:

      Wydaje mi się, że MPT99 miał taką poprawkę. Mam tylko player od Jaskiera ale może ktoś dysponuje samym trakerem?

      ->link<-
      • 6: CommentAuthormono
      • CommentTime26 Oct 2025 13:35 zmieniony
       
      @0xF: Nie możesz liczyć średniej, jak by nakazywała intuicja, bo synteza sampla jest synchronizowana z linią, a więc dostaniesz ton wynikający z tego 15556 czy tam 7778 z groszami. VBLK wprowadza glitch o takiej szerokości jaką potrzeba na wykonanie playera, bo wtedy sampel nie jest odtwarzany, co może powodować słyszalne "pyrczenie" około 50 Hz jeśli odtwarzany jest ciągły sampel, ale akurat w ASAP mógłbyś ten czas zredukować do zera :). Ale w MPT takich nie ma i to zniekształcenie zazwyczaj nie przeszkadza. Ale np player do SoftSynth jest skonstruowany tak, że procedura playera jest co chwilę przerywana skokiem do procedury syntetyzującej sampel dlatego tam ta synteza jest taka czysta - tak można by zrobić playera do MPT, choć to może sztuka dla sztuki.

      Dzięki za MPT99!
      • 7: CommentAuthortonual
      • CommentTime26 Oct 2025 13:37 zmieniony
       
      @mono
      gdzie można znaleźć wersję MPT99?

      @0xF
      Niedoprecyzowałem - chodzi o MD1 (1 kanał na sample).
      Granie samplami ze zmienna częstotliwością i obsługa atrybutu głośności nuty ("V") w edytorze i playerze.

      Czy aktualizacja playar'a Jaskra dla .md1 aby honorował "V" dla sampli to droga przez mękę czy bardziej kwestia dodanie/zmiana jednej linii?

      ->link<-
      • 8: CommentAuthormono
      • CommentTime26 Oct 2025 13:48
       
      • 9: CommentAuthor0xF
      • CommentTime26 Oct 2025 15:26 zmieniony
       
      Czy aktualizacja playar'a Jaskra dla .md1 aby honorował "V" dla sampli to droga przez mękę czy bardziej kwestia dodanie/zmiana jednej linii?

      Jednej linii to nie. Ale kilka linijek. Pytanie jeszcze, czy 15 kHz i ma grać na ekranie w trybie tekstowym, bo może się okazać, że brakuje cykli.

      edit:

      mono:

      Nie możesz liczyć średniej

      A zróbmy sampla sinus 440 Hz, odtwórzmy go razem z muzyką MPT i zróbmy analizę widmową.
      • 10: CommentAuthormono
      • CommentTime26 Oct 2025 16:11 zmieniony
       
      Dostaniesz dwa prążki - 440 Hz i 50 Hz. Jeśli twoja częstotliwość będzie bliska tych 50 Hz tym bardziej będzie zniekształcona, bo VBLK będzie wydłużał okres jej fali. Dla wysokich częstotliwości okres fali nie będzie zwiększany przez glicza, tylko będziesz miał przerwę w emisji.
      • 11: CommentAuthor0xF
      • CommentTime26 Oct 2025 18:08
       
      #include <math.h>
      #include <stdio.h>

      static int sample(int i)
      {
      return 8 + 7.9 * sin(2 * M_PI * 440 / 15556 * i);
      }

      int main()
      {
      FILE *fp = fopen("440hz.d15", "wb");
      fwrite("\x90\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\xc0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", 1, 32, fp);
      for (int i = 0; i < 12 * 1024 * 2; i += 2)
      putc(sample(i) << 4 | sample(i + 1), fp);
      }
      • 12: CommentAuthormono
      • CommentTime26 Oct 2025 22:51
       
      A widziałeś jak wygląda sam sinus? :)
      • 13: CommentAuthor0xF
      • CommentTime27 Oct 2025 07:22
       
      Co?
      • 14: CommentAuthortonual
      • CommentTime27 Oct 2025 20:24 zmieniony
       
      Z punktu widzenie klienta końcowego, wydaje się ponad wszelką miarę zasadne pozostawić trochę miejsca na cokolwiek "extra".
      Tzn.pozwolić wybrać stosunek między jakością grania sampli a ilością "wolnych przebiegów" CPU na coś swojego.
      Np. zmianę wartości rejestru koloru.

      Gra muzyczka, sample grają(!),niebo odcień błękitu zmienia,
      i w rytm "beatu" pulsuje scena.

      (Lobbuje o wersję dla MP)