All Projects → meshula → LabMidi

meshula / LabMidi

Licence: other
Midi IN and OUT. Standard midi file parser and player. Midi Softsynth implementation.

Programming Languages

C++
36643 projects - #6 most used programming language
CMake
9771 projects
c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to LabMidi

Html Midi Player
🎹 Play and display MIDI files on the web
Stars: ✭ 158 (+315.79%)
Mutual labels:  player, music-player, midi
Webaudiofont
Use full GM set of musical instruments to play MIDI and single sounds or effects. Support for reverberation and equaliser. No plugins, no Flash. Pure HTML5 implementation compatible with desktop and mobile browser. See live examples.
Stars: ✭ 600 (+1478.95%)
Mutual labels:  player, music-player, midi
Meaga
一个由Electron和Vue联合打造的本地音乐播放器
Stars: ✭ 36 (-5.26%)
Mutual labels:  player, music-player
TonUINO
Alternative TonUINO Firmware
Stars: ✭ 112 (+194.74%)
Mutual labels:  player, music-player
ArgPlayer
An android music player library
Stars: ✭ 52 (+36.84%)
Mutual labels:  player, music-player
vue-music-player
🎵 basic music player, keeps your favorite musics
Stars: ✭ 77 (+102.63%)
Mutual labels:  player, music-player
drop
A LÖVE visualizer and music player
Stars: ✭ 17 (-55.26%)
Mutual labels:  player, music-player
musique
C'est très élégant
Stars: ✭ 91 (+139.47%)
Mutual labels:  player, music-player
minimal-player
This is a minimal, clean audio/music/mp3 player with spinning cover images, built with jQuery, TweenMax.js and SVG images.
Stars: ✭ 48 (+26.32%)
Mutual labels:  player, music-player
linux-show-player
Linux Show Player - Cue player designed for stage productions
Stars: ✭ 147 (+286.84%)
Mutual labels:  player, midi
pushtape-player.js
Customizable JS audio page player with global playback controls and autoscan (mutationobserver), built on Soundmanager2.
Stars: ✭ 27 (-28.95%)
Mutual labels:  player, music-player
angular-youtube-player
Simple youtube player created with angular and typescript. See demo.
Stars: ✭ 35 (-7.89%)
Mutual labels:  player, music-player
PlayPiano
Implement and simulate piano on web page.
Stars: ✭ 16 (-57.89%)
Mutual labels:  player, music-player
purescript-school-of-music
Port of the Haskell School of Music to Purescript
Stars: ✭ 21 (-44.74%)
Mutual labels:  music-player, midi
mpe-player
Browser Based Audio Oscillators using MPE devices & MPE.js
Stars: ✭ 16 (-57.89%)
Mutual labels:  player, midi
Miles
Swift Playground that creates jazz improvisations (WWDC 2018)
Stars: ✭ 31 (-18.42%)
Mutual labels:  midi, music-theory
MusicPlayer
A Telegram Music Bot written in Python using Pyrogram and Py-Tgcalls. This is Also The Source Code of The UserBot Which is Playing Music in @S1-BOTS Support Group ❤️
Stars: ✭ 218 (+473.68%)
Mutual labels:  player, music-player
deplayer
Decentralized mediaplayer which runs entirely in the browser.
Stars: ✭ 14 (-63.16%)
Mutual labels:  player, music-player
Timidity
Play MIDI files in the browser w/ Web Audio, WebAssembly, and libtimidity
Stars: ✭ 221 (+481.58%)
Mutual labels:  player, midi
Swift Radio Pro
Professional Radio Station App for iOS!
Stars: ✭ 2,644 (+6857.89%)
Mutual labels:  player, music-player

LabMidi

Cross platform MIDI related utilities.

class MidiIn
Can read from a MIDI input port, typically provided by a keyboard

class MidiOut
Outputs to a MIDI port, typically consumed by a synthesizer

class MidiSoftSynth : public MidiOutBase
A software synthesizer that can be used as a MIDI output. Currently
only implemented for OSX (and presumably it would work for iOS as well).

class MidiSong
A song is a collection of tracks, which are a list of MIDI events. A song can
be parsed from a Standard MIDI file, or from a base64 encoded Standard MIDI file
with an appropriate header. MML (Music Macro Language) data may also be parsed,
passed in as either an MML string, or a file path. The version parsed is a restricted
form of Modern MML, and not nearly as sophisticated as what mml2mid can currently
process.

class MidiSongPlayer
Can play a single MidiSong. The class is initialized with a pointer
to a MidiSong. The data in the MidiSong is not retained in any way,
so after a MidiSongPlayer is instantiated it is fine to discard the
MidiSong object.

LabMidiUtil.h
Contains various routines to convert between note names, note numbers,
and frequency, as well as routines to fetch standard General MIDI names
for instruments.

Like ofxMidi, I'm thinking of using PGMidi https://github.com/petegoodliffe/PGMidi to implement the MidiIn and MidiOUt classes on iOS.

Building

CMake 3.10 or greater is required for building. Building in the usual way should work out of the box, as LabMidi has no external dependencies.

Usage

See the MidiApp source for examples of usage. Note that MidiApp.cpp currently has hard coded paths to the midi sample files. You'll need to make sure you've set your working directory to the folder containing the resources folder. In XCode, under the Product menu, select Edit Schemes..., then the Options tab, then the target you want to run, and click the Use Custom Working Directory box. Fill in the path appropriately.

MidiPlayer

MidiPlayerApp -o 0 -f path/to/file.midi

Will play file.midi on the 0th port.

License

BSD 3-clause. http://opensource.org/licenses/BSD-3-Clause

Note that the sample midi files in the assets directory were obtained from the jasmid distribution on github, and they contain their own internal copyright notices.

Thanks

Thanks to ofxMidi https://github.com/chrisoshea/ofxMidi for inspiration, and jasmid https://github.com/gasman/jasmid for a clean implementation of a standard midi file reader, which I used as a jumping off point for the LabMidi midi file parser. Thanks to RtMidi http://www.music.mcgill.ca/~gary/rtmidi/ for providing a robust platform abstraction. LabMidi is quite different from jasmid and ofxMidi because the focus is playing midi files, and providing basic routing functionality.

Thanks to qiao for posting lots of base64 encoded MIDI tracks at https://github.com/qiao/euphony.

Thanks to http://www.manythings.org/music/pianotheory/ for posting a very cool web utility that calculates scales and chords. It's dual licensed GPL and CC-0. I used the tables in that utility, choosing the CC-0 license for this usage.

There's 9,310 piano MIDI files here: http://www.kuhmann.com/Yamaha.htm

Thanks to arle http://www17.atpages.jp/~arle/index.php?%E3%83%8D%E3%82%BF for publishing mml2mid http://hpc.jp/~mml2mid/, and to g200kg http://www.g200kg.com/en/docs/webmodular/ for an MML player.

Thanks to Andre Mazzone and Josh Fillstrup for helping get LabMidi up and running on Linux.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].