ECE 4760 Final Project
 All Files Functions Variables Enumerations Enumerator Macros
midi.c
Go to the documentation of this file.
1 //http://www.cs.cmu.edu/~music/cmsip/readings/MIDI%20tutorial%20for%20programmers.html
2 //http://www.midi.org/techspecs/midimessages.php
3 
4 #include "inttypes.h"
5 #include <stdio.h>
6 #include <util/delay.h>
7 #include "uart.h"
8 #include "midi.h"
9 
10 
11 #define m4(x) (x&0x0F) // mask out the upper 4 bits
12 #define m7(x) (x&0x7F) // mask out the upper bit
13 #define m14(x) (x&0x3FFF) // mask out the upper 2 bits of a 16 bit number
14 
15 
16 // These two functions turn 0b00HHHHHHHLLLLLLL into 0b0HHHHHHH and 0b0LLLLLLL
17 #define up7(x) (0x7F&(x>>7))
18 #define lo7(x) (0x7F&(x))
19 
20 void send_byte(uint8_t byte) {
21  uart_putchar(byte,stdout);
22 }
23 
24 void send_status_byte(uint8_t cmd, uint8_t channel) {
25  send_byte((cmd << 4) | m4(channel));
26 }
27 
28 
29 void pitch_bend(uint8_t channel, int16_t value) {
30  value = value >> 2;
31 
32  send_status_byte(PITCH,channel);
33  send_byte((uint8_t)(lo7(value)));
34  send_byte((uint8_t)(up7(value)));
35 }
36 
37 void change_instrument(uint8_t channel, uint8_t instrument) {
39  send_byte(m7(instrument));
40 }
41 
42 void change_volume(uint8_t chan, uint8_t vol) {
44 }
45 
46 void send_controller_command(uint8_t channel, uint8_t controller,uint8_t value) {
47  send_status_byte(0b1011,channel);
48  send_byte((controller));
49  send_byte((value));
50 }
51 
52 void send_note(uint8_t channel, uint8_t vel, uint8_t pitch) {
53  send_status_byte(NOTE_ON,channel);
54  send_byte(pitch);
55  send_byte(vel);
56 }
57 
58 void send_note_off(uint8_t channel, uint8_t vel, uint8_t pitch) {
59  send_status_byte(NOTE_OFF,channel);
60  send_byte(pitch);
61  send_byte(vel);
62 }
uint8_t instrument
counter to keep track of what instrument is on the MIDI channel
Definition: project.c:134
void send_controller_command(uint8_t channel, uint8_t controller, uint8_t value)
Definition: midi.c:46
#define m4(x)
Definition: midi.c:11
#define up7(x)
Definition: midi.c:17
void change_volume(uint8_t chan, uint8_t vol)
Definition: midi.c:42
char channel
Definition: project.c:71
#define NOTE_OFF
Definition: midi.h:3
void send_byte(uint8_t byte)
Definition: midi.c:20
void pitch_bend(uint8_t channel, int16_t value)
Definition: midi.c:29
#define VOLUME
Definition: midi.h:8
#define lo7(x)
Definition: midi.c:18
int uart_putchar(char c, FILE *stream)
Definition: uart.c:51
#define m7(x)
Definition: midi.c:12
#define NOTE_ON
Definition: midi.h:2
void send_status_byte(uint8_t cmd, uint8_t channel)
Definition: midi.c:24
void change_instrument(uint8_t channel, uint8_t instrument)
Definition: midi.c:37
void send_note(uint8_t channel, uint8_t vel, uint8_t pitch)
Definition: midi.c:52
#define PITCH
Definition: midi.h:4
#define INSTRUMENT
Definition: midi.h:5
void send_note_off(uint8_t channel, uint8_t vel, uint8_t pitch)
Definition: midi.c:58