atarionline.pl MPT Player - 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
      • CommentTime14 Aug 2011 02:08
       
      Działałem dziś nad MPT - oto efekt.
      Prócz standardowych rzeczy, jakie mają inne playery z serii jak wykrywanie drugiego pokeya i granie przez obydwa, jest granie sampli z jakością 15kHz (domyślnie) i 8kHz (włączane /L).
      Ładowanie sampli odbywa się automatycznie po załadowaniu pliku modułu muzycznego. Program pozostawia nazwę bazową i podmienia rozszerzenie na .SMP. Jeśli sample zostaną znalezione wtedy prócz standardowych wywołań procedury inicjalizowane jest dodatkowo granie sampli z żądaną jakością.
      Wykorzystałem póki co player #1 z MPT (ten, co gra 4 kanały syntetyczne i 1 samplowany).
      Jak zwykle proszę o testowanie i bugs & requests.
      • 2:
         
        CommentAuthormiker
      • CommentTime14 Aug 2011 10:08 zmieniony
       
      Proponuję dostosować playerek do standardu narzuconego już kiedyś przez Megaplayer autorstwa Macgyvera, gdzie nazwy plików miały rozszerzenia .MD1 i .MD2 (odpowiednio dla muzyczek z jednym lub dwoma kanałami sampli) oraz .D8 i .D15 (Odpowiednio sample 8 i 15kHz). Naprawdę to bardzo pomaga, a na pigwie leży dużo tego typu muzyczek. Oczywiście odpalało by się plik .MD?, który następnie poszukiwałby pliku .D* (oczywiście nazwy przed rozszerzeniem muszą być identyczne).
      To taka mała propozycja. :)
      • 3: CommentAuthormono
      • CommentTime14 Aug 2011 11:08
       
      Oczywiście. Pinokio już mnie naprowadził na właściwy tor. Dostałem po prostu paczkę MPTków gdzie wszystko nazywało się MPT i SMP.
      • 4:
         
        CommentAuthormiker
      • CommentTime14 Aug 2011 13:08
       
      aha, luzik then.
      • 5: CommentAuthorpin
      • CommentTime14 Aug 2011 13:08
       
      ... i przez dowolne nazewnictwo w temacie rozszerzen plikow robi sie pozniej burdel ;)- smp jest uzywany w przypadku co najmniej dwoch innych programow ;)-
      • 6: CommentAuthormono
      • CommentTime15 Aug 2011 02:08
       
      Wersja 0.2 - zmieniłem domyślne rozszerzenia z MPT/SMP na MPT, MD1, MD2, D15, D8, SMP.
      Program teraz jeśli nie poda się niepełną nazwę, będzie próbował szukać plików z kolejnymi rozszerzeniami: MPT, MD1, MD2.
      Jeśli podany plik ma inne rozszerzenie wtedy domyślnie przyjmuje się MD1.
      Dla plików MD1 szukane są sample: D15, D8 i SMP; dla MD2 tylko MD8 i SMP.
      Dla plików SMP przyjmowana jest wysoka jakość (hehe) samplowania 15kHz - można to zmieniać parametrami /L i /H.

      Wersja aktualna może być ściągana (jeśli komuś wygodniej) stąd.
      • 7:
         
        CommentAuthormiker
      • CommentTime15 Aug 2011 08:08
       
      Aha, jeżeli masz .MD2 to od razu przerzucaj sample na 8kHz, niezależnie od rozszerzenia pliku z samplami. MPT potrafi grać 15kHz tylko w przypadku uzycia 1 kanału z samplami.
      • 8: CommentAuthormono
      • CommentTime15 Aug 2011 11:08
       
      Rozumiem. Czyli default dla SMP powinien jednak być 8kHz dla .MD2, a dla .MD1 - 15.
      • 9:
         
        CommentAuthormiker
      • CommentTime15 Aug 2011 11:08
       
      Można. Ale można też dodać opcję zmiany częstotliwości w trakcie odtwarzania (np. którymś z klawiszy funkcyjnych).
      • 10: CommentAuthormono
      • CommentTime17 Aug 2011 03:08
       
      Wersja 0.3 do pobrania (stąd też).
      - Zmieniłem player na Jaskrowy. Nie powinno się już tak spektakularnie krzaczyć, jak poprzedni.
      - Poprawiłem też synchronizację procedur odgrywających syntetyki i sample dzięki czemu muzyka nie powinna spowalniać.
      - Można też zrobić pauzę (poprzednio zaczynało grać od nowa).
      Co mi się zdaje, to że sample nie stroją z instrumentami syntetycznymi podczas grania .MD2. Z .MD1 powinno być ok, bo to procedura, która była poprzednio używana. Fajnie gdyby się ktoś kompetentny wypowiedział.
      Zapraszam do testowania i zgłaszania uwag oraz błędów.
      • 11: CommentAuthormono
      • CommentTime27 Nov 2012 21:11
       
      Player w wersji 0.4:
      * zmieniono procedurę detekcji stereo na (c) by drac030,
      * dodano obsługę plików .MPD,
      * poprawiono synchronizację subtempa.

      Smacznego.
      Oczywiście bugs&reqs itd.
      • 12: CommentAuthormono
      • CommentTime28 Nov 2012 03:11
       
      W kolejnej wersji jeszcze jest obsługa długich songów włączana za pomocą /S. Można np:
      MPTPLAY BOREMLOZ.MPT /S
      • 13: CommentAuthormono
      • CommentTime29 May 2015 20:05 zmieniony
       
      Ponieważ ten player był najbardziej zabagniony ze wszystkich, usiadłem i oto wersja 0.6.
      Zmiany:
      - poprawione odtwarzanie .MD1 i .MD2
      - przełącznik /M SYNH|DIGI1|DIGI2 pozwala na wymuszenie rodzaju modułu
      - przełącznik /T [mm:]ss[.dd] pozwala na ustawienie maksymalnego czasu odtwarzania
      - przełącznik /B pozwala wyłączyć ekran na modułach digitalizowanych
      - przełącznik /A addr pozwala ustawić adres drugiego POKEY-a gdyby ktoś miał go niestandardowo :)
      - poprawiona panorama dla wszystkiego (dla sampli również)
      - sample mogą mieć rozszerzenie .DRM (bałagan z tymi roszerzeniami)
      Powinno grać poprawnie zarówno na ANTIC/VBXE, jak i na 1.77/Rapidus.
      W zmiennej środowiskowej MPTPLAY można ustawić często używane parametry.
      Kolejność parametrów nie ma już znaczenia.
      Bugi i życzenia mile widziane.
      Smacznego.
      • 14: CommentAuthorgorgh
      • CommentTime29 May 2015 21:05
       
      wszystko pięknie, ale czy uwydatniłeś scenę, uplastyczniłeś tło i zmiękczyłeś basy? :)
      • 15: CommentAuthormono
      • CommentTime29 May 2015 22:05
       
      Nein :) Żadnych takich. Player gra jak sobie Kompozytor zażyczył (mam nadzieję, dlatego zapraszam do testowania :D).
      • 16: CommentAuthorpin
      • CommentTime30 May 2015 01:05
       
      MD2 na Rapidusie - problem ze samplami.MD1, MPT - wstępnie ok.
      • 17: CommentAuthorpin
      • CommentTime30 May 2015 02:05 zmieniony
       
      viceversa.mpt pieje, jak kogut z rana. 16Mhz dopał.

      EDIT:

      Bez turbo też pieje. Albo moduł z***, albo player coś nawala tu.
      • 18: CommentAuthormono
      • CommentTime30 May 2015 13:05 zmieniony
       
      Tutaj dłuższe wynurzenia.
    1.  
      Mono... how can I init an MD1 incl. D8?
    2.  
      lda #0
      ldx #<msx_module
      ldy #>msx_module
      jsr init
      lda #4
      ldx #<$9000
      ldy #>$9000
      jsr init


      ?
    3.  
      hmmm... need to check google translate:

      Co dla programistw

      Nie na wiele si przydaje program
      muzyczny, jeli muzyka na nim napisana,
      nie moe zosta wykorzystana w grach,
      demach, programach. Na szczcie na
      dysku z MPt znajduje si program CMP.COM
      ktry umoliwia skompilowanie playera
      muzycznego w dowolne miejsce pamici
      (jak ju wiemy dane muzyczne mog by
      wczytywane z DOS'a).
      W kompilatorze znajduj si a trzy
      playery. Pierwszy z nich umoliwia
      odgrywanie wszystkich muzyczek, ktre
      nie wykorzystuj dwch kana w digi.
      Dopuszczalny jest natomiast jeden kana
      digi. Drugi z tych playerw odgrywa
      muzyk cztero-kana ow bez uycia
      filtrw, rejestrw 16-sto bitowych i
      kana w digi. Trzeci player gra tylko
      muzyk z uyciem dwch kana w digi.
      Pora na opis, jak uywa tych playerw
      we w asnych programach. Pierwszy z nich
      jest najbardziej skomplikowany, gdy
      jest przystosowany g wnie do uycia w
      grach. Dla objanienia za oymy, e
      player zaczyna si od odresu $2000 (w
      asemblerze moemy uy etykiety PLAYER,
      dla atwiejszej pracy). Wszystkie
      playery wywo ujemy na przerwaniu VBL
      rozkazem procesora "JSR $2003" lub dla
      asemblera "JSR PLAYER+3", ale zanim to
      zrobimy to do rejestrw A,X oraz Y
      musimy wpisa odpowiednie parametry
      sterujce prac playera, a parametry s
      nastpujce:
      - pierwszy player rozpoznaje 8 rozkazw
      (0-7),(numer rozkazu jest we wszystkich
      playerach przekazywany w A), kolejno s
      to:

      0 - w rejestrach Y-m odszy i X-starszy
      bajt adresu danych muzycznych.

      LDA #$00
      LDY <MUZYKA
      LDX >MUZYKA
      JSR PLAYER

      1 - rozkaz odegrania przez player
      instrumentu, ktrego numer
      znajduje si w bitach 4-0 rejestru
      X, w bitach 7-6 r.X znajduje si
      numer kana u, na ktrym ma zosta
      odegrany ten instrument, a w r.Y
      jest numer nuty instrumentu
      przypomn, e C-1 to $00, C#1-$01.

      LDA #$01
      LDY #NR.NUTY
      LDX #NR.INSTR+(NR.KANA{U*$40)
      JSR PLAYER

      2 - rozkaz wy czenia myzyki, bez
      adnych parametrw, player wy czy
      muzyk z wyciszeniem generatorw
      d`wiku.

      LDA #$02
      JSR PLAYER

      3 - zagraj patern, o numerze
      znajdujcym si w bitach 5-0 r.X,
      i znowu w bitach 7-6 r.X numer
      kana u na ktrym zostanie odegrany
      patern, w r.Y znajduje si
      transpozycja paternu.

      LDA #$03
      LDY #TRANSPOZYCJA
      LDX #NR.PAT+(NR.KANA{U*$40)
      JSR PLAYER

      4 - zagraj muzyk, w r.X znajduje si
      numer pozycji w ET od, ktrej ma
      zacz odgrywanie player, a w
      r.Y bity 3-0 okrelaj, czy ktry
      z kana w ma by wy czony,
      warto 00 oznacza, e wszystkie
      kana y bd gra, ustawienie bitu
      0 wy czy kana 3, ustawienie bitu
      1 wy czy kana 2, ustawienie bitu
      2 wy czy kana 1, ustawienie bitu
      3 wy czy kana 0.

      LDA #$04
      LDY #%0000
      LDX #NR.POZYCJI
      JSR PLAYER

      5 - w rejestrach Y-m odszy, w
      X-starszy bajt adresu tablicy w
      ktrej znajduj si adresy sampli
      do odegrania w trybie z jednym
      kana em digi.

      LDA #$05
      LDY <TABLICA.SAMPLI
      LDX >TABLICA.SAMPLI
      JSR PLAYER

      6 - odegraj muzyk digitalizowan.
      Jedynym parametrem jaki
      przekazujemy w X jest bit 0,
      ustawiony w czy odtwarzanie 15kHz
      a skasowany - 8kHz.

      LDA #$06
      LDX #CZY.15kHz
      JSR PLAYER

      przerwanie odgrywania nastpi po
      wpisaniu zera do komrki odleg ej
      od pocztku playera o $62D.

      LDA #$0
      STA PLAYER+$62D

      7 - odtworzy jednego sampla, ktrego
      numer znajduje si w r.Y (0-$F),
      a w r.X bit 0-15kHz, bity 7-6
      numer kana u.

      LDA #$07
      LDY #NR.SAMPLA
      LDX #CZY.15kHz+(NR.KAN*$40)
      JSR PLAYER


      Na koniec par uwag - player nie
      rozpoznaje kodu FE (stop muzyka),
      parametrw sterujcych instumentem
      6 oraz 7.
      Dodatkowo mona odczyta aktualn
      g ono na danych kana ach. Odczytan
      warto naley jeszcze "obrobi":

      player+$5AF - volume kan.0
      player+$5B0 - volume kan.1
      player+$5B1 - volume kan.2
      player+$5B2 - volume kan.3

      LDA PLAYER+$5AF
      AND #$0F

      Komrki z czstoci wpisywan do
      POKEY'a:

      player+$5B3 - frequency kan.0
      player+$5B4 - frequency kan.1
      player+$5B5 - frequency kan.2
      player+$5B6 - frequency kan.3

      Troch problemw moe stwarza odegranie
      muzyki z jednym kana em digi.
      Naley to zrobi nastpujco:

      LDA #0
      ......Dane
      LDA #4
      ......Dane
      LDA #5
      ......Dane
      ........Instalujemy przerwanie
      ........VBLANK, w ktrym
      ........wywo ujemy playera.
      LDA #6
      ......Dane
      Program gra sample | przerwanie
      |
      | JSR PLAYER+3
      | ........
      | LDA #0
      | STA PLAYER+$62D
      ........Dezaktywujemy
      ........przerwanie VBLANK.
      LDA #2

      ----------------------------------------

      Drugi player s uy do odgrywania
      muzyki g wnie w intrach, demach lub
      czo wkach do gier. Istniej tylko dwa
      kody playera

      LDA #$00
      JSR PLAYER

      zainicjuje playera i przygotuje do
      odtwarzania, a

      LDA #$01
      JSR PLAYER

      zatrzyma odtwarzanie i wyciszy
      generatory.

      ----------------------------------------

      Trzeci player s uy tylko do
      odgrywania dwch kana w digi (i
      oczywicie dwch kana w "zwyk ych")

      LDA #$00
      JSR PLAYER

      ... zainicjuje playera

      LDA #$01
      JSR PLAYER

      ... rozpocznie odgrywanie kana w digi
      i przerwie po wciniciu klawisza SHIFT

      LDA #$02
      JSR PLAYER

      ... wy czy generatory d`wiku i
      przerwie odgrywanie muzyki.
      • 22: CommentAuthormono
      • CommentTime30 May 2015 17:05
       
      Hello Heaven6502. I saw your thread, but the trouble is I can't remember what player I have been used in mptplay. Probably it was ->link<- , but I can't ensure it.

      The way I initialize MD1+D8 module (1 digichannel MPT) is:
      ldy mptbeginad   ;initialize module address
      ldx mptbeginad+1
      lda #$00
      jsr mpt_player

      ldx startsongposition
      lda #$02
      jsr mpt_player

      ldy samplesad
      ldx samplesad+1
      lda #$03
      jsr mpt_player

      Following with start of each TV frame (for example on VBLK) I'm calling:
      jsr mpt_player+3

      what is main player routine.
      But this won't play digitized sound. Playing this one is doing by:
      lda #$05
      ldx #0 ;1=15 kHz, 0=8kHz
      jsr mpt_player

      It jumps into looped playroutine and exits on song stop ($FE command in first track of song on any song position).
      Another way to stop sample playing is calling:
      lda #$07
      jsr mpt_player

      from anywhere. Remember the main loop is occupied by sample playing routine, so you can do it for example on VBLK, or any other interrupt routine.

      Mine code in mptplay is hardly modified to support stereo POKEY-s and Rapidus/XL14 extensions. I'm playing sample on my own, so I don't use MPT's original playing sample routine.

      Maybe some snippets of mptplay will be helpful if you need to play samples during I/O operations, but I'll can prepare it later.
    4.  
      thanks Mono

      is samplead the sample data or the sample table?
      • 24: CommentAuthormono
      • CommentTime30 May 2015 17:05
       
      It is sample table - it starts with 16 bytes msbs of sample start addresses, 16 bytes of msbs samples end addresses, then are samples data.
      You need to point exactly content of .MD8 file (removing binary header).

      Code attached by you in previous message in this thread is correct player routine as I think.
    5.  
      yeah... I guess it does not work... not sure why.

      see attachted zip
    6.  
    7.  
      Mono... Thanks! works... I got the samples put to $8000 instead of $9000 ;) my fault
      • 28: CommentAuthormono
      • CommentTime30 May 2015 17:05
       
      I'm glad to hear :) No problem.
      • 29: CommentAuthormono
      • CommentTime30 May 2015 17:05 zmieniony
       
      All sample playing routine starts from inic6 label and is short. When you need to use it during I/O operations I suggest to eliminate WSYNC ($d40a) operations, because it halts CPU, so all IRQ service is delayed much to 107 cycle of scanline at all. It is simple to replace by VCOUNT ($d40b) synchronization (sample is played with 2 scanlines rate). It not blocks CPU and IRQ will serviced ASAP.

      Edit: Be aware routine start from nopy label instruments inic6 playing code with k15h1z and k15h2z labels storing sta WSYNS x 2 when you call mpt_player with A=$05 and playing rate in X. Replace it with RTS because your modified inic6 routine won't need such instrumentation.
    8.  
      Ok... I will have a look... Need to think about the IO stuff. Got jaskier irq loader but that was specific for energy zine one...

      And the vcount sync what happens in vblank?
    9.  
      • 32: CommentAuthormono
      • CommentTime31 May 2015 21:05 zmieniony
       
      Very nice! :)

      VBLK is fired up on 248 scanline of 312(PAL)/262(NTSC). Sample playing is hanging on during this routine. VBLK routine has two parts - VBLKImmediate vectorized by VVBLI ($222) and VBLKDelayed vectorized by VVBLKD ($224). Delayed part is running only when neither CRITIC register ($42) is set (CRITIC is set to 1 during SIO operations), nor VBLK interrupts IRQ service routine (CPU I flag set). In my mptplay I set CRITIC to 1 to minimize VBLK that distort sample playing (player routine distorts it enough). Be aware that much OS functions is disabled by CRITIC (for ex. correct key press and repeat, VBLK timers, shadows etc) because the point is to do minimum of VBLK functionality desired by SIO and return to IRQ service ASAP (if occured).

      Edit: VCOUNT synchronization done with:
      lda VCOUNT
      cmp VCOUNT
      beq *-3

      will exit loop when VBLK is ocurred in the meantime.
      I think calling player at VBLKI is best way to play music with samples. It minimizes ditortions to executing one block of code.
    10.  
      thx. Mono... just need to patch the MPT player... as all registers are in use so need little time to patch correct ;)
    11.  
      Mono...

      j9 lda (adrs2),y
      lsr
      lsr
      lsr
      lsr
      ora #$10
      k15h1z ;sta $d40a ;wsync
      ;sta $d40a ;wsync
      ldx $d40b
      cpx $d40b
      beq *-3
      ldx $d40b
      cpx $d40b
      beq *-3
      ldx wsksmp
      sta $d201,x
      lda (adrs2),y
      ora #$10
      k15h2z ;sta $d40a ;wsync
      ;sta $d40a ;wsync
      ldx $d40b
      cpx $d40b
      beq *-3
      ldx $d40b
      cpx $d40b
      beq *-3

      ldx wsksmp
      sta $d201,x
      iny
      bne j7


      just tried this... but not good yet ;)
    12.  
      with this it sounds the same as with the 4 WSYNCs version?

      k15h1z ;sta $d40a ;wsync
      ;sta $d40a ;wsync
      ldx $d40b
      cpx $d40b
      beq *-3

      ldx wsksmp
      sta $d201,x
      lda (adrs2),y
      ora #$10
      k15h2z ;sta $d40a ;wsync
      ;sta $d40a ;wsync
      ldx $d40b
      cpx $d40b
      beq *-3

      ldx wsksmp
      sta $d201,x
      iny
    13.  
      aehm... which is of course ok... as $d40b works in 2 scanline res.... ;)
      • 37: CommentAuthormono
      • CommentTime1 Jun 2015 20:06 zmieniony
       
      Yes :) Last one is correct.

      sta WSYNC
      halts CPU to 107 cycle in one scanline, but
      ldx VCOUNT
      cpx VCOUNT
      beq *-3

      waits to begin of even (in sense of parity) scanline (VCOUNT increments after two scanlines).