?lang_form? ?lang_select? ?lang_submit? ?lang_endform?
{HEADER END}
{BLAME START}

library

?curdirlinks? -

Blame information for rev 6

Line No. Rev Author Line
1 6 kaklik // Midi.c
2 //
3 // Midi output routines for the atmel atmega163 (and others)
4 //
5 // depends on avrlib for buffer
6 //
7  
8 #include "uart.h"
9 #include "midi.h"
10 //#include "debug.h"
11  
12  
13 void midiInit() {
14 uartInit();
15 uartSetBaudRate(MIDI_BAUD_RATE);
16 }
17  
18 // send a midi NOTE ON message from the uart of the form [0x9n, note, vel]
19 // where n is the midi channel from 0-F, note and vel are 7-bit numbers
20 u08 midiNoteOnOut(u08 note, u08 vel, u08 channel) {
21 uartSendByte(MIDI_NOTE_ON | (channel & MIDI_CHANNEL_MASK));
22 uartSendByte(MIDI_DATA_MASK & note);
23 uartSendByte(MIDI_DATA_MASK & vel);
24  
25 return 0;
26 }
27  
28 // send a midi NOTE OFF message from the uart of the form [0x8n, note, vel]
29 // where n is the midi channel from 0-F, note and vel are 7-bit numbers
30 u08 midiNoteOffOut(u08 note, u08 vel, u08 channel) {
31 uartSendByte(MIDI_NOTE_OFF | (channel & MIDI_CHANNEL_MASK));
32 uartSendByte(MIDI_DATA_MASK & note);
33 uartSendByte(MIDI_DATA_MASK & vel);
34  
35 return 0;
36 }
37  
38 // send a midi CONTROL CHANGE message from the uart of the form [0xBn, controller, value]
39 // where n is the midi channel from 0-F, controller and value are 7-bit numbers
40 u08 midiControlChangeOut(u08 controller, u08 value, u08 channel) {
41 uartSendByte(MIDI_CONTROL_CHANGE | (channel & MIDI_CHANNEL_MASK));
42 uartSendByte(MIDI_DATA_MASK & controller);
43 uartSendByte(MIDI_DATA_MASK & value);
44  
45 return 0;
46 }
47  
48 // send a midi PROGRAM CHANGE message from the uart of the form [0xCn, program]
49 // where n is the midi channel from 0-F, program is a 7-bit number
50 u08 midiProgramChangeOut(u08 program, u08 channel) {
51 uartSendByte(MIDI_PROGRAM_CHANGE | (channel & MIDI_CHANNEL_MASK));
52 uartSendByte(MIDI_DATA_MASK & program);
53  
54 return 0;
55 }
56  
57 // send a midi POLYPHONIC AFTERTOUCH message from the uart of the form [0xCn, controller, value]
58 // where n is the midi channel from 0-F, note and pressure are 7-bit numbers
59 u08 midiPolyTouchOut(u08 note, u08 pressure, u08 channel) {
60 uartSendByte(MIDI_POLY_TOUCH | (channel & MIDI_CHANNEL_MASK));
61 uartSendByte(MIDI_DATA_MASK & note);
62 uartSendByte(MIDI_DATA_MASK & pressure);
63  
64 return 0;
65 }
66  
67 // send a midi CHANNEL AFTERTOUCH message from the uart of the form [0xDn, pressure]
68 // where n is the midi channel from 0-F, and pressure is a 7-bit number
69 u08 midiChannelTouchOut(u08 pressure, u08 channel) {
70 uartSendByte(MIDI_CHANNEL_TOUCH | (channel & MIDI_CHANNEL_MASK));
71 uartSendByte(MIDI_DATA_MASK & pressure);
72  
73 return 0;
74 }
75  
76 // send a midi PITCH BEND message from the uart of the form [0xEn, bendLSB, bendMSB ]
77 // where n is the midi channel from 0-F, and bendLSB and bendMSB are 7-bit numbers
78 // note that MIDI devices normally pack together bendLSB and bendMSB to make a 14-bit number
79 u08 midiPitchBendOut(u08 bendLSB, u08 bendMSB, u08 channel) {
80 uartSendByte(MIDI_PITCH_BEND | (channel & MIDI_CHANNEL_MASK));
81 uartSendByte(MIDI_DATA_MASK & bendLSB);
82 uartSendByte(MIDI_DATA_MASK & bendMSB);
83 return 0;
84 }
{BLAME END}
{FOOTER START}

Powered by WebSVN v2.8.3