All Projects → Sciss → ScalaMIDI

Sciss / ScalaMIDI

Licence: other
A library for accessing standard MIDI files

Programming Languages

scala
5932 projects

Labels

Projects that are alternatives of or similar to ScalaMIDI

midi2pico
Midi to PICO-8 converter
Stars: ✭ 51 (+264.29%)
Mutual labels:  midi
genmdm-editor
A web-based interface for genMDM, a MIDI controller for the Sega Mega Drive and Genesis. Also supports Mega Drive MIDI Interface.
Stars: ✭ 25 (+78.57%)
Mutual labels:  midi
arm synth
Wavetable Synth Running on an STM32F 32-bit ARM Cortex M3 microprocessor
Stars: ✭ 23 (+64.29%)
Mutual labels:  midi
MusicManipulations.jl
Manipulate music data, humanize, quantize and analyze music performances with Julia
Stars: ✭ 41 (+192.86%)
Mutual labels:  midi
midi-m300
Tool for converting MIDI tracks to M300 speaker gcode for 3D printers
Stars: ✭ 57 (+307.14%)
Mutual labels:  midi
Melodrumatic
Audio plugin that lets you use MIDI to pitch-shift via delay to turn unpitched audio into melodies
Stars: ✭ 26 (+85.71%)
Mutual labels:  midi
pymidi
Python library for building RTP-MIDI / AppleMIDI clients and servers
Stars: ✭ 35 (+150%)
Mutual labels:  midi
Music-generation-cRNN-GAN
cRNN-GAN to generate music by training on instrumental music (midi)
Stars: ✭ 38 (+171.43%)
Mutual labels:  midi
mt32-pi-control
MT32-PI.EXE/MT32-PI.TTP/mt32-pi-ctl is a control program for the mt32-pi MIDI synthesizer available for DOS PCs, Atari ST and Amiga computers as well as modern systems running Linux and Windows.
Stars: ✭ 22 (+57.14%)
Mutual labels:  midi
kikpad
KiKPad : the Midiplus SmartPad reinvented !
Stars: ✭ 31 (+121.43%)
Mutual labels:  midi
godot-midi-input-example
Example of MIDI Input handling (e.g keyboard/controller) for the Godot game engine.
Stars: ✭ 35 (+150%)
Mutual labels:  midi
midi
An Observable based library for the use of Web MIDI API with Angular
Stars: ✭ 35 (+150%)
Mutual labels:  midi
PianoTranscription Windows
MIDI parser (Juce library is used) + "PianoFingering_CalcModule" + "PianoAudioToMidi" + "PianoKeyboard" + WinAPI GUI
Stars: ✭ 52 (+271.43%)
Mutual labels:  midi
linux-show-player
Linux Show Player - Cue player designed for stage productions
Stars: ✭ 147 (+950%)
Mutual labels:  midi
nfluidsynth
libfluidsynth C# binding
Stars: ✭ 18 (+28.57%)
Mutual labels:  midi
VSLilyPond
VSCode Extension for LilyPond
Stars: ✭ 59 (+321.43%)
Mutual labels:  midi
Sweet-Sixteen
Sweet Sixteen eurorack module by Tesseract Modular
Stars: ✭ 28 (+100%)
Mutual labels:  midi
braid
Polyrhythms in Python: a sequencer and musical notation system for monophonic MIDI synths
Stars: ✭ 34 (+142.86%)
Mutual labels:  midi
OpenDeck
Software and hardware platform for simpler building of MIDI controllers with support for DMX.
Stars: ✭ 438 (+3028.57%)
Mutual labels:  midi
KnobKraft-orm
The KnobKraft Orm - The free modern cross-platform MIDI Sysex Librarian
Stars: ✭ 100 (+614.29%)
Mutual labels:  midi

ScalaMIDI

Build Status Maven Central

statement

ScalaMIDI is a library for accessing standard MIDI files in the Scala programming language. It is (C)opyright 2013–2017 by Hanns Holger Rutz. All rights reserved. ScalaOSC is released under the GNU Lesser General Public License v2.1+ and comes with absolutely no warranties. To contact the author, send an email to contact at sciss.de

The example file for Erik Satie's 'Vexations', vexation.mid, is (C)opyright by Reinhard Kopiez and provided on a Creative Commons attribution (CC BY 3.0) type condition. This file is not included in the published library.

linking

To link to this library:

libraryDependencies += "de.sciss" %% "scalamidi" % v

The current version v is "0.2.1"

building

ScalaMIDI currently builds against Scala 2.12, 2.11 and 2.10, using sbt 0.13. It uses the MIDI API from Java (javax.sound.midi) under the hood.

contributing

Please see the file CONTRIBUTING.md

overview

Reading and playing a MIDI file:

    import de.sciss.midi._

    val sq  = Sequence.read("vexation.mid")
    val pl  = Sequencer.open()
    pl.play(sq)
    pl.stop()
    val t   = sq.tracks(1)  // second of three tracks
    val ev  = t.events      // all events in that track
    val pch = ev.collect { case Event(_, NoteOn(_, pch, _)) => pch }  // pitches
    pch.map(_ % 12).toSet.toList.sorted // pitch classes (all twelve!)

Creating an example sequence:

    val ms  = (64 to 72).flatMap { pch => NoteOn(0, pch, 80) :: NoteOff(0, pch, 0) :: Nil }
    implicit val rate = TickRate.tempo(bpm = 120, tpq = 1024)
    val ev  = ms.zipWithIndex.map { case (m, i) => Event((i * 0.25 * rate.value).toLong, m) }
    val mx  = ev.map(_.tick).max
    val t   = Track(ev)
    val sq  = Sequence(Vector(t))
    // sq.write(<path>)

limitations

  • This is a very early version
  • Currently, there is no support for many messages, such as after touch, pitch bend, time code, song pointer etc.

links

Note: There is another similarly named library scala-midi which is completely independent from this project.

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].