/pxt-midi

A MIDI interface for MakeCode - beta

Primary LanguageTypeScriptMIT LicenseMIT

MIDI

Emulates a MIDI output controller.

Usage

Setup

You will need to connect a MIDI via serial, radio or bluetooth get it to "talk" to the MIDI output device.

Playing tones

Place a ||midi play tone|| block to play a single note (on channel 1). The frequency is mapped to the nearest note.

midi.playTone(Note.A, music.beat(BeatFraction.Whole))

Tone on / off

Place a ||midi tone on|| block to start a tone (on channel 1). Place a ||midi tone off|| to turn it off.

midi.toneOn(Note.A)
midi.toneOn(Note.B)
basic.pause(music.beat())
midi.toneOff(Note.A)
midi.toneOff(Note.B)

Drums

Place a ||midi play drum|| block to play a drum sound. This blocks plays sounds on channel 10 which is reserved for drums.

midi.playDrum(DrumSound.HandClap)

Pitch bending

Place a ||midi pitch bend|| block to applying a sound bending effect to channel 1.

midi.pitchBend(8192 + input.acceleration(Dimension.X) * 8)

Channels

You can access and manipulate individual channels using the ||midi channel|| block. Channels are indexed from 1 to 16 and mapped internally to 0..15.

let piano = midi.channel(1);

play a note

let piano = midi.channel(1);
piano.note(30, music.beat(BeatFraction.Whole));

play a note on / off

let piano = midi.channel(1);
piano.noteOn(30);
basic.pause(100)
piano.noteOff(30)

change instrument

let trumpet = midi.channel(2);
trumpet.setInstrument(MidiInstrument.Trumpet);

change pitch bend

The pitch bend expects values between 0..16383 where 8192 means no bend.

let piano = midi.channel(1);
piano.pitchBend(8192 + input.acceleration(Dimension.X) * 8)

License

MIT

Supported targets

  • for PXT/microbit (The metadata above is needed for package search.)
midi=github:microsoft/pxt-midi