About

Ableton Push 1

Combining my two passions: Music and Technology

Hi, I'm Markus. Since my childhood, I've been obsessed with two things: Music and technology. So what better way to showcase both than doing it on this webpage.

In the projects section you'll find a selection of the stuff I have been and the projects I'm working on right now.

Like this page the projects section and the music section is still under construction but will be filled with more details soon.

Projects

C-MIDI - a MIDI parser written in C

As I'm already familiar with the C programming language, I thought: Why not starting a simple project in C to test my skills? I'm using MIDI gear pretty much daily for example my trusty old e-piano or the fancy Ableton Push. Additionally with MIDI 2.0 probably coming soon to most consumer hardware, I was motivated to get a deep understanding of MIDI.

So what does my MIDI parser do - and what even is MIDI?

MIDI (/ˈmɪdi/; an acronym for Musical Instrument Digital Interface) is a technical standard that describes a communications protocol, digital interface and electrical connectors that connect a wide variety of electronic musical instruments, computers and related audio devices for playing, editing, and recording music, as Wikipedia explains.

Oldschool MIDI Cable to connect MIDI devices

In contrast to - let's say you connect an audio-interface to your computer and record your voice - with MIDI, no sound is being transferred from one device to the other. Just control messages, like "I pressed a specific note on the keyboard". These files can be sent as streams from one device to another and also replayed from MIDI files (.mid).

If you want to know, how these messages look like and what they mean, you'll have to open the .mid file in a hex-editor and translate message for message with the file specification in hand.

> xxd -c 8 -g 1 MIDI_sample.mid
00000000: 4d 54 68 64 00 00 00 06  MThd....
00000008: 00 01 00 06 01 e0 4d 54  ......MT
00000010: 72 6b 00 00 00 30 00 ff  rk...0..
00000018: 03 19 57 69 6b 69 70 65  ..Wikipe
00000020: 64 69 61 20 4d 49 44 49  dia MIDI
00000028: 20 28 65 78 74 65 6e 64   (extend
00000030: 65 64 29 00 ff 51 03 07  ed)..Q..
00000038: a1 20 00 ff 58 04 04 02  . ..X...
00000040: 18 08 00 ff 2f 00 4d 54  ..../.MT
00000048: 72 6b 00 00 05 24 00 ff  rk...$..
00000050: 03 04 42 61 73 73 00 b0  ..Bass..
00000058: 00 79 00 20 00 00 c0 21  .y. ...!
00000060: 00 90 2d 4e 82 00 80 2d  ..-N...-
...

Luckily computers can do the work for us. My program opens the file and translates its content into (mostly) human readable code.

> c-midi MIDI_sample.mid
00000000: ---------- Header Chunk [MThd] ----------
00000004: Chunk Lenght:  6
00000008: Format:        6
0000000a: nTracks:       6
0000000c: Division:     480
0000000e: ---------- Track Chunk 1 [MTrk]---------
00000012: chunk_lenght: 48
00000016: Track Name: Wikipedia MIDI (extended)
00000033: Tempo: 500000; BPM: 120
0000003a: Time signature: 4/8; Clocks per tick: 24; 32per24clocks: 8
00000042: End of Track
00000046: ---------- Track Chunk 2 [MTrk]---------
0000004a: chunk_lenght: 1316
0000004e: Track Name: Bass
00000056: Channel   0: ControlChange    @ dTime:    0: [CtrlID:   0 CtrlVal: 121]
0000005a: Channel   0: ControlChange    @ dTime:    0: [CtrlID:  32 CtrlVal:   0]
0000005d: Channel   0: ProgramChange    @ dTime:    0: [ProgID:  33]
00000060: Channel   0: Note ON  @ dTime:    0: [NoteID:  45 NoteVel:  78]
00000064: Channel   0: Note OFF @ dTime:  256: [NoteID:  45 NoteVel:  64]
...

You can find the used MIDI file here.

Future plans for Midi-C are:

  • An interface for accessing the MIDI data
  • A graphical representation of the MIDI Tracks
  • A web app via web-assembly

You can find the program and the source code on my github.

Music

Contact

How to reach me: hello [at] cma5 [dot] de

Elements

Text

This is bold and this is strong. This is italic and this is emphasized. This is superscript text and this is subscript text. This is underlined and this is code: for (;;) { ... }. Finally, this is a link.


Heading Level 2

Heading Level 3

Heading Level 4

Heading Level 5
Heading Level 6

Blockquote

Fringilla nisl. Donec accumsan interdum nisi, quis tincidunt felis sagittis eget tempus euismod. Vestibulum ante ipsum primis in faucibus vestibulum. Blandit adipiscing eu felis iaculis volutpat ac adipiscing accumsan faucibus. Vestibulum ante ipsum primis in faucibus lorem ipsum dolor sit amet nullam adipiscing eu felis.

Preformatted

i = 0;

while (!deck.isInOrder()) {
    print 'Iteration ' + i;
    deck.shuffle();
    i++;
}

print 'It took ' + i + ' iterations to sort the deck.';

Lists

Unordered

  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.

Alternate

  • Dolor pulvinar etiam.
  • Sagittis adipiscing.
  • Felis enim feugiat.

Ordered

  1. Dolor pulvinar etiam.
  2. Etiam vel felis viverra.
  3. Felis enim feugiat.
  4. Dolor pulvinar etiam.
  5. Etiam vel felis lorem.
  6. Felis enim et feugiat.

Icons

Actions

Table

Default

Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99
100.00

Alternate

Name Description Price
Item One Ante turpis integer aliquet porttitor. 29.99
Item Two Vis ac commodo adipiscing arcu aliquet. 19.99
Item Three Morbi faucibus arcu accumsan lorem. 29.99
Item Four Vitae integer tempus condimentum. 19.99
Item Five Ante turpis integer aliquet porttitor. 29.99
100.00

Buttons

  • Disabled
  • Disabled

Form