Strona 1 z 1

[WIP]Interrupter midi - bascom

: 19 lut 2014, 21:25
autor: PolishHammer
Witam. Jako iż mam ferie i trochę czasu postanowiłem zabrać się za interrupter z obsługą plików midi. Na chwilę obecną program piszę pod atmegę8, bo taki uC akurat posiadam. Wszystko testuje na płytce prototypowej, komunikacja midi odbywa się z komputerem przez przejściówkę usb-midi. Odbieram bajty do 3 zmiennych A, B i C. Jak na razie moje "sukcesy" to wyświetlanie na lcd odbieranych bajtów, oraz granie pojedynczej nutki w ten sposób, że po przyjściu polecenia note on włączam timer1, w przerwaniu wpisuję odpowiednią wartość do timera poleceniem "load timer1, nuta" gdzie nuta = lookup(b, nuty). W tabeli nuty mam odpowiednie wartości wyliczone excelem. Plus taki że działa, ale gdy podczas grania jednej nuty pojawia się inny dźwięk, to wtedy atmega przestaje grać ten pierwszy dźwięk i gra ten drugi. I tu jest mój problem. Czy mógłby mnie ktoś naprowadzić, jak mam to zrobić, aby grany był ten 1 dźwięk aż do przyjścia komunikatu note off i aby inne wartości nut nie powodowały zmiany granego dźwięku? Oraz prosiłbym o odpowiedź na pytanie, czy poprawne jest równanie 1 timer = 1 nuta w danej chwili?

Re: [WIP]Interrupter midi - bascom

: 19 lut 2014, 22:52
autor: Mania-C
1 timer jedna nuta

Pomysł 1
Loop until Note off

Pomysł 2
If note_off goto Main

Re: [WIP]Interrupter midi - bascom

: 20 lut 2014, 13:04
autor: PolishHammer
Ok, dzięki dziś to wyprobóję, wczoraj w końcu też wpadłem na pomysł z loop until, z tym że wydaje mi się, że wprowadzenie programu do kolejnej pętli uniemożliwi mi zagranie kolejnej nuty w czasie gdy pierwsza wciąż gra(polifonia), choć myślę, że jest to kwestia napisania podprogramu w tej pętli do...loop until. Pozdrawiam, o postępach będę informował :)

Ps.Dzięki za pomysły, a nie za gotowy kod i prosiłbym wszystkich, którzy mają zamiar udzielać się w temacie o nie podsyłanie "gotowców", gdyż przy okazji tego projektu chciałbym się czegoś nauczyć ;)

Re: [WIP]Interrupter midi - bascom

: 22 lut 2014, 19:52
autor: Mania-C
Eeee hmm sam jeszcze nie jestem jakimś specem od programowania ale sukcesywnie sie uczę ...
Wydaje mi sie ze to powinno być zrobione na zasadzie flag
Tzn odbierz pierwszy ciag kodów wpakuj zawartość do timera dodaj flage = 1 zakończ flage w momęcie gdy padnie komenda note off
To zrobi takie coś ze zarezerwuje timer 1 dla pierwszego uderzonego klawisza
Dalej z salerinu niech odczyta 2gą komende midi i wpakuje ja do timera 2 i znow dodaj flage1=1 zakoncz flage1 w momęcie gdy padnie note off
Timer 3 zarezerwował bym dla lepszej pracy programu Flagi etd. Bo komendy WAITMS strasznie nienawidze.

Pozdrawiam

Re: [WIP]Interrupter midi - bascom

: 23 lut 2014, 03:12
autor: PolishHammer
Ok dzięki, sam też się wystrzegam tej komendy, używam tylko gdy wykorzystuję LCD, i gdy wyświetlam na nim np wartość timera, bo dzięki temu jest ona lepiej widoczna, ale myślę że ta komenda jest nie do praktycznego zastosowania przy midi. Już mam napisany "prototyp" programu, który sprawdzę jutro, kombinowałem z flagami, bo też na to wpadłem, ale doszedłem do tego, że używam do...loop until i dalej mam odpowiednie komendy do sprawdzania różnych rzeczy. A jak to nie będzie działało to wrócę do flag, bo właśnie mnie oświeciło jak je używac. Jak będziesz chciał Mania zobaczyć kod, albo gdy coś nie będzie mi działało to Ci wyślę :)

Re: [WIP]Interrupter midi - bascom

: 23 lut 2014, 12:41
autor: Mania-C
Z chęcią sie poczęstuje kodem bo sam jeszcze nie mam wyobrażenia jak to napisać , na razie pobieżnie się zastanawiam nad tym.

Re: [WIP]Interrupter midi - bascom

: 18 sie 2014, 22:44
autor: PolishHammer
W związku z tym, że wróciłem z wyjazdów postanowiłem ponownie zabrać się za pisanie programu obsługującego MIDI. Jak do tej pory jest baardzo dobrze, prototyp już powstał, odbiór bajtów MIDI został zmieniony z polecania inputbin na odbieranie ich w przerwaniu pochodzącego od UART. Udało mi się osiągnąć granie 2 nut za pomocą jednej Atmegi8 (wykorzystuje tryby compare1a i compare1b). Pliki midi odtwarzam za pomocą fl studio, następnie przez przystawkę usb-midi trafiają one do atmegi.

Edit:
Interrupter praktycznie skończony. To co udało mi się osiągnąć jak na razie to:
-granie 2 nut za pomocą 1 atmegi (wykorzystanie compare1a i compare1b do generowania przebiegów)
-możliwość ustawienia wypełnienia impulsów
-obsługa pitch bend
Jutro w dzień postaram się umieścić filmik z testów interruptera.