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
     
    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 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
     
    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
     
    aha, luzik then.
    • 5: CommentAuthorpin
    • CommentTime14 Aug 2011
     
    ... 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
     
    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
     
    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
     
    Rozumiem. Czyli default dla SMP powinien jednak być 8kHz dla .MD2, a dla .MD1 - 15.
    • 9:
       
      CommentAuthormiker
    • CommentTime15 Aug 2011
     
    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
     
    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
     
    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
     
    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 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
     
    wszystko pięknie, ale czy uwydatniłeś scenę, uplastyczniłeś tło i zmiękczyłeś basy? :)
    • 15: CommentAuthormono
    • CommentTime29 May 2015
     
    Nein :) Żadnych takich. Player gra jak sobie Kompozytor zażyczył (mam nadzieję, dlatego zapraszam do testowania :D).
    • 16: CommentAuthorpin
    • CommentTime30 May 2015
     
    MD2 na Rapidusie - problem ze samplami.MD1, MPT - wstępnie ok.
    • 17: CommentAuthorpin
    • CommentTime30 May 2015 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 zmieniony
     
    Tutaj dłuższe wynurzenia.
    • 19: CommentAuthorheaven6502
    • CommentTime30 May 2015
     
    Mono... how can I init an MD1 incl. D8?
    • 20: CommentAuthorheaven6502
    • CommentTime30 May 2015
     
    lda #0
    ldx #<msx_module
    ldy #>msx_module
    jsr init
    lda #4
    ldx #<$9000
    ldy #>$9000
    jsr init


    ?
    • 21: CommentAuthorheaven6502
    • CommentTime30 May 2015
     
    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
     
    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.
    • 23: CommentAuthorheaven6502
    • CommentTime30 May 2015
     
    thanks Mono

    is samplead the sample data or the sample table?
    • 24: CommentAuthormono
    • CommentTime30 May 2015
     
    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.
    • 25: CommentAuthorheaven6502
    • CommentTime30 May 2015
     
    yeah... I guess it does not work... not sure why.

    see attachted zip
    • 26: CommentAuthorheaven6502
    • CommentTime30 May 2015
     
    • 27: CommentAuthorheaven6502
    • CommentTime30 May 2015
     
    Mono... Thanks! works... I got the samples put to $8000 instead of $9000 ;) my fault
    • 28: CommentAuthormono
    • CommentTime30 May 2015
     
    I'm glad to hear :) No problem.
    • 29: CommentAuthormono
    • CommentTime30 May 2015 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.
    • 30: CommentAuthorheaven6502
    • CommentTime30 May 2015
     
    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?
    • 31: CommentAuthorheaven6502
    • CommentTime31 May 2015
     
    • 32: CommentAuthormono
    • CommentTime31 May 2015 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.
    • 33: CommentAuthorheaven6502
    • CommentTime1 Jun 2015
     
    thx. Mono... just need to patch the MPT player... as all registers are in use so need little time to patch correct ;)
    • 34: CommentAuthorheaven6502
    • CommentTime1 Jun 2015
     
    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 ;)
    • 35: CommentAuthorheaven6502
    • CommentTime1 Jun 2015
     
    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
    • 36: CommentAuthorheaven6502
    • CommentTime1 Jun 2015
     
    aehm... which is of course ok... as $d40b works in 2 scanline res.... ;)
    • 37: CommentAuthormono
    • CommentTime1 Jun 2015 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).