Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

komunikat MIDI (hex)

TheCrow 23 Lip 2009 00:38 3665 5
  • #1 23 Lip 2009 00:38
    TheCrow
    Poziom 10  

    witam

    nie rozumiem troszke pewnej rzeczy w zapisie hex (komunikat wychodzacy ze sterownika MIDI) komunikat podgladnolem edytorem do fcb1010
    i wyglada nastepujaco:

    0xffffffC0
    0x01
    0x00

    nie rozumiem tego 0xffffff i 0x00

    C0 to kanal midi
    0x01 to program change

    z tego co wyczytalem komunikacja jest 8 bitowa + bit startu na poczatku i stopu na koncu co daje 10 bitow nie wiem jak zaimplementowac w C te bity startu i stopu no i pozniej bity danych np Control Change

    z tego co zauwazylem w programie to komunikaty przychodza zawsze 3 bajtowe i w takiej postaci:

    0xffffff+np.C0
    0x01
    0x00 <-- choc to moze byc wykozystane np. do Control Change (value) nie potrzebne przy Program Change

    czy wyslanie komunikatu:

    0xC0
    0x01

    bedzie prawidlowo odczytane przez odbiornik? czy 2 bajty wystarcza?czy taki zapis tez jest poprawny i poprawnie odebrany?

    pozdrawiam

    0 5
  • #2 23 Lip 2009 11:03
    Plumpi
    Specjalista - systemy grzewcze

    W standardzie MIDI komunikaty mogą być 1, 2 lub 3 bajtowe.

    1-bajtowe to komunikaty synchronizacji i sterujące urządzeniami.
    2-bajtowe to np. komunikaty Program Change (zmiana brzmień)
    3-bajtowe to komunikaty Control Change (zmiana parametrów)

    Niestety każdy rodzaj komunikatu ma swoją strukturę i nie można jej skracać czy pomijać.

    Gdzieś mam przygotowaną rozpiskę w arkuszu kalkulacyjnym poszczególnych komunikatów z ich wartościami binarnymi i hex.
    Jak tylko odnajdę to Ci to udostępnię

    Dodano po 12 [minuty]:

    TheCrow napisał:

    0xffffff+np.C0
    0x01
    0x00 <-- choc to moze byc wykozystane np. do Control Change (value) nie potrzebne przy Program Change


    Niezupełnie to jest tak.
    Kiedyś instumenty posiadały bank 128 brzmień i to w zupełności wystarczyło. Obecnie instrumenty posiadają o wiele większą ilość brzmień, dlatego poza Program Change utworzono banki, z których każdy zawiera po 128 brzmień. Banków tych może być 128*128=16384
    Za zmianę banków odpowiadają kontrolery Control Change 0 oraz 32
    CC0 - starszy bajt
    CC32 - młodszy bajt (precyzer)

    Aby móc poprawnie dokonać wyboru brzmienia z dowolnego banku to do instrumentu powienien zostać wysłany ciąg komunikatów , możliwie jeden po drugim w określonym czasie - teraz już nie pamiętam ale to było jakieś kilkaset milisekund:
    CC0 (3 bajty)
    CC32 (3 bajty)
    PC (2bajty)

    Oczywiście sam PC może istnieć, lecz dokonuje on wyboru brzmień w obrębie ostatnio używanego banku.
    Jednak CC0 oraz CC32 muszą iść w takiej kolejności i jeden po drugim w określonym czasie. W przeciwnym wypadku niektóre urządzenia nie będą tych komunikatów akceptowały.

    0
  • #3 23 Lip 2009 22:12
    TheCrow
    Poziom 10  

    Witam

    sama liste komununikatow znalazlem i kody zrodlowe na mikrokontrolery ale to mi nie wystarcza do poznania konkretnie komunikatow i jej skladni bitowej jak i pisania programu w C

    jako midi i rezszerzenie midi poprzez RPN / NRPN jest troche w necie ale nie ma konkretnie wyjasnionego jak wyglada komunikat i dlaczego tak musi on byc zlozony bitowo, oraz jego przesyl i odbior.

    jak dla mnie to wystarczy mi sam standard MIDI bez rozszezenia RPN / NRPN dokladnie interesuje mnie tylko ProgramChange, ControlChange, Note No/Off

    z gory dziekuje za wszelka pomoc w objasnieniach komunikacji standardu MIDI

    0
  • Pomocny post
    #4 03 Sie 2009 00:24
    Plumpi
    Specjalista - systemy grzewcze

    Zasadniczo nie interesują nas bity startu i stopu, ponieważ tym zajmuje się UART portu COM.
    Jeżeli zaś chodzi o poszczególne komunikaty to w pliku, który udostępniłem masz rozpisane poszczególne rodzaje komunikatów midi z dokładnym opisem bityowym, hex i decymal.
    Od czasu, kiedy zebrałem te dane trochę czasu już upłyneło i wiele komunikatów mogło zostać dodanych w miejsca, które poprzednio były nie zdefiniowane. Jednak cała struktura nadal pozostaje taka sama jak była i całość wszystkich komunikatów dzieli się na 8 głównych grup, co opisuje pierwszy arkusz.
    Ciebie interesuje pierwsza grupa opisana jako CHANNEL VOICE MESSAGES czyli komunikaty kanałowe.
    W tej grupie znajdują się komunikaty składające się z 2 lub 3 bajtów.
    Pierwszy bajt jest bajtem sterującym, określającym rodzaj komunikatu i zawsze zaczyna się on od 1 logicznej na poziomie najstarszego bitu
    1xxxxxxx
    Kolejne bajty są bajtami danych i zawsze zaczynają się od zera logicznego, dlatego też w standardzie midi wszystkie wartości są podawane od 0 do 127 (decymalnie), czyli 128 wartości.

    Całość komunikatów wyfgląda następująco:
    - dla komunikatów jednobajtowych 1xxxxxxx
    - dla komunikatów dwubajtowych 1xxxxxxx 0xxxxxxx
    - dla komunikatów 3 bajtowych 1xxxxxxx 0xxxxxxx 0xxxxxxx

    W bajcie sterującym bajty xxx określają rodzaj komunikatu, zaś kolejne bajty yyyy numer kanału midi. Maksymalnie jest 16 kanałów.
    1xxxyyyy

    Jeżeli zaś chodzi o komunikaty Note On i Note Off to po bajcie sterującym pierwszy bajt danych określa numer klawisza zaś drugi bajt określa siłę z jaką ten klawisz został uderzony.

    W Control Change pierwszy bajt danych określa numer kontrolera, zaś drugi bajt danych określa wartość nastawy tego kontrolera

    Przykładowo będzie to wyglądało tak:
    10110000 00000111 01111111

    i teraz rozpiszmy co tu się wysłało:
    po kolei od najstarszego bitu
    Bajt sterujący
    1011 - Control Change
    0000 - kanał 1 (bo liczy się od 1 do 16 dla wartości bitowych od 0000 do 1111)

    Pierwszy bajt danych
    00000111 - kontroler o numerze 7 czyli regulacja siły głosu

    Drugi bajt danych
    01111111 - wartość siły głosu 127 czyli ustawiona na maksimum

    Jeżeli chodzi o program Change to składa się on z jedego bajtu sterującego i jednego bajtu danych.
    Bajt sterujący:
    11001111
    Bajt sterujący określa:
    1100 - Program Change
    1111 - numer kanału (w tym przypadku kanał 16)
    Bajt danych
    00000000 - określa pierwsze brzmienie z banku brzmień (brzmienie Piano)

    Mam nadzieję, że ten mój wstęp oraz moje tabelki pozwolą Ci dokładnie zrozumieć składnię MIDI.

    W drugim arkuszu masz rozpisane komunikaty Control Change, a w trzecim arkuszu rozpisane bardziej szczegółowo komunikaty tych 8 podstawowych grup wg kolejnych numerów bajtu sterującego.
    Ponadto znajduje się tam takze tabelka BIN-HEX-DEC, która powinna ułatwić odczytanie poszczególnych komunikatów z ich wartości.

    0
  • #5 03 Sie 2009 13:33
    Plumpi
    Specjalista - systemy grzewcze

    P.S.

    Arkusz był stworzony pod OpenOffice i w tym oprogramowaniu jest poprawnie wyświetlany.
    Pod MS Office nie ma funkcji przeliczania BIN -> HEX oraz BIN -> DEC, dlatego podrzucam jeszcze plik PDF

    0
  • #6 25 Cze 2010 12:33
    Siedlar
    Poziom 10  

    Plumpi: w excellu poprawnie działa poprzedni plik (.xls) trzeba tylko włączyć 'Analysis TollPack' w narzędzia->dodatki.

    0