[WIP]Interrupter midi - bascom

Falowniki, spawarki, przetwornice niskonapięciowe i inne.
PolishHammer
Posty: 60
Rejestracja: 8 gru 2011, 18:45

[WIP]Interrupter midi - bascom

Post 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?
"Nie zamierzam dać satysfakcji owym, ograniczonym, zazdrosnym indywiduom, które próbują udaremnić me wysiłki. Nie są oni dla mnie niczym więcej, niż zarazkami jakiejś obrzydliwej choroby. " ~ Nicol Tesla
Awatar użytkownika
Mania-C
Moderator
Posty: 820
Rejestracja: 2 paź 2010, 12:47

Re: [WIP]Interrupter midi - bascom

Post autor: Mania-C »

1 timer jedna nuta

Pomysł 1
Loop until Note off

Pomysł 2
If note_off goto Main
PolishHammer
Posty: 60
Rejestracja: 8 gru 2011, 18:45

Re: [WIP]Interrupter midi - bascom

Post 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ć ;)
"Nie zamierzam dać satysfakcji owym, ograniczonym, zazdrosnym indywiduom, które próbują udaremnić me wysiłki. Nie są oni dla mnie niczym więcej, niż zarazkami jakiejś obrzydliwej choroby. " ~ Nicol Tesla
Awatar użytkownika
Mania-C
Moderator
Posty: 820
Rejestracja: 2 paź 2010, 12:47

Re: [WIP]Interrupter midi - bascom

Post 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
PolishHammer
Posty: 60
Rejestracja: 8 gru 2011, 18:45

Re: [WIP]Interrupter midi - bascom

Post 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ę :)
"Nie zamierzam dać satysfakcji owym, ograniczonym, zazdrosnym indywiduom, które próbują udaremnić me wysiłki. Nie są oni dla mnie niczym więcej, niż zarazkami jakiejś obrzydliwej choroby. " ~ Nicol Tesla
Awatar użytkownika
Mania-C
Moderator
Posty: 820
Rejestracja: 2 paź 2010, 12:47

Re: [WIP]Interrupter midi - bascom

Post 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.
PolishHammer
Posty: 60
Rejestracja: 8 gru 2011, 18:45

Re: [WIP]Interrupter midi - bascom

Post 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.
"Nie zamierzam dać satysfakcji owym, ograniczonym, zazdrosnym indywiduom, które próbują udaremnić me wysiłki. Nie są oni dla mnie niczym więcej, niż zarazkami jakiejś obrzydliwej choroby. " ~ Nicol Tesla
ODPOWIEDZ