Tutorial 2 - Parsing Midi:
When my sequencer is sending out a note on Midichannel 10, then my synthesizer reacts @ Channel 10, but MIOS and LPC17 sys “I got it on Midichannel 9”
I just took the Tutorial below, and changed only - to display the mididata, else i dont changed things (no change in config or header files)
Code:
// $Id: app.c 1919 2014-01-08 19:13:48Z tk $
//MIOS32 Tutorial #002: Parsing MIDI
#include <mios32.h>
#include "app.h"
void APP_Init(void){MIOS32_BOARD_LED_Init(0xffffffff);}
void APP_Background(void){}
void APP_Tick(void){}
void APP_MIDI_Tick(void){}
void APP_MIDI_NotifyPackage(mios32_midi_port_t port, mios32_midi_package_t midi_package){
u8 ab = 0;
// 1) the LED should be turned on whenever a Note On Event with velocity > 0
// has been received
if( port == 32){
if( midi_package.chn == 9){
if( midi_package.type == NoteOn && midi_package.velocity > 0 ) {
MIOS32_BOARD_LED_Set(0x0001, 1);
ab=1;}
// 2) the LED should be turned off whenever a Note Off Event or a Note On
// event with velocity == 0 has been received (the MIDI spec says, that velocity 0
// should be handled like Note Off)
if( (midi_package.type == NoteOff) || (midi_package.type == NoteOn && midi_package.velocity == 0) ){
MIOS32_BOARD_LED_Set(0x0001, 0);
ab=0;}
MIOS32_LCD_Clear(); // clear screen
MIOS32_LCD_CursorSet(0, 0); // X,Y
MIOS32_LCD_PrintFormattedString("%d %d %d %d",ab, port, midi_package.note, midi_package.chn);
}//End Midi CHN 11
}//End Port
}//End Hook
void APP_SRIO_ServicePrepare(void){}
void APP_SRIO_ServiceFinish(void){}
void APP_DIN_NotifyToggle(u32 pin, u32 pin_value){}
void APP_ENC_NotifyChange(u32 encoder, s32 incrementer){}
void APP_AIN_NotifyChange(u32 pin, u32 pin_value){}
is there a offset to set?
T.K
January 11, 2015, 4:26pm
2
MIDI Channels are counted from 0
If you don’t like this, you could use the mios32_midi_chn_t based enums (which are defined in mios32_midi.h) in your code.
They are available by default, just try it out:
replace
if( midi_package.chn == 9){
by:
if( midi_package.chn == Chn10){
Best Regards, Thorsten.
like… for the user it would be confusing when i directly change the Midichannels on the Display… another me in a far future… ok i can program it with +1…
by the way i dont found what you have suggest
T.K
January 11, 2015, 6:23pm
4
Search for mios32_midi_chn_t in this file
(CTRL+F, then enter this keyword into the search mask of your web browser)
Again: this file is included by default (via mios.h), you can just use the enum as shown in my example.
Btw.: you don’t need to copy&paste such code into the posting, please reference it with the SVN link: http://svnmios.midibox.org/filedetails.php?repname=svn.mios32&path=%2Ftrunk%2Finclude%2Fmios32%2Fmios32_midi.h
Best Regards, Thorsten.
hmm i deletet the code… still dont found it
there is no text like " midi_package.chn"
the only CHN things are:
typedef enum {
Chn1,
Chn2,
Chn3,
Chn4,
Chn5,
Chn6,
Chn7,
Chn8,
Chn9,
Chn10,
Chn11,
Chn12,
Chn13,
Chn14,
Chn15,
Chn16
} mios32_midi_chn_t;
typedef union {
struct {
u32 ALL;
};
struct {
u8 cin_cable;
u8 evnt0;
u8 evnt1;
u8 evnt2;
};
struct {
u8 type:4;
u8 cable:4;
u8 chn:4; // mios32_midi_chn_t
u8 event:4; // mios32_midi_event_t
u8 value1;
u8 value2;
};
// C++ doesn't allow to redefine names in anonymous unions
// as a simple workaround, we rename these redundant names
struct {
u8 cin:4;
u8 dummy1_cable:4;
u8 dummy1_chn:4; // mios32_midi_chn_t
u8 dummy1_event:4; // mios32_midi_event_t
u8 note:8;
u8 velocity:8;
};
struct {
u8 dummy2_cin:4;
u8 dummy2_cable:4;
u8 dummy2_chn:4; // mios32_midi_chn_t
u8 dummy2_event:4; // mios32_midi_event_t
u8 cc_number:8;
u8 value:8;
};
struct {
u8 dummy3_cin:4;
u8 dummy3_cable:4;
u8 dummy3_chn:4; // mios32_midi_chn_t
u8 dummy3_event:4; // mios32_midi_event_t
u8 program_change:8;
u8 dummy3:8;
};
} mios32_midi_package_t;
forgive me i am a newbe, shoul i change CHN:4 to CHN5?
T.K
January 11, 2015, 10:31pm
6
You shouldn’t change anything in the mios32_midi.h file!
And please never start such modifications outside your own application to prevent a big disaster
The “midi_package.chn == 9” is part of your own code.
I’m surprised that you can’t find it there - just search this keyword in your initial posting.
It’s even part of the subject.
I proposed that you replace the 9 by Chn10 to improve the readability, nothing else.
Just try it out - it works!
Best Regards, Thorsten.
P.S.: I will avoid to give you background informations in future, they confuse you too much.
i still thougt it will be not good to change something in mios (i understand, that a nother me with a nother laptopt and a nother Mios - in the near future - will run against walls, because the program is not working as it should )
ok got it, just write Chn10 instead of 9
@confuse : got a new vocable:
ENUM