MyNixOS website logo
Description

Binding to the OS level MIDI services.

Partial implementation of the MIDI 1.0 standard to communicate with physical or virtual MIDI devices, eg. MIDI keyboards and synths. Supported operating systems are MacOS and Windows. See also the alsa-midi library for similar functionality under Linux. Please note that there was no effort made (yet) to be compatible with the other existing Haskell MIDI libraries.

hmidi: Haskell bindings to the OS level MIDI services

Partial implementation of the MIDI 1.0 standard to communicate with physical or virtual MIDI devices, eg. MIDI keyboards and synthesizers.

Supported operating systems are MacOS and Windows. See also the alsa-midi library for similar functionality under Linux.

Installation & Usage

It should install with cabal without problems on Mac OS X and Windows. Linux is not supported.

As usual, just run the command:

cabal install 

When using the library, you have to link against the threaded runtime (otherwise random crashes will occur); for example:

ghc --make -threaded -O monitor.hs

Example applications

There are some example command line applications in the examples subdirectory:

  • monitor.hs - very basic MIDI monitor
  • chords.hs - convert NoteOn messages to simple chords
  • playmidi.hs - play simple .mid files on General MIDI compatible synths
  • osx_host.hs - create a MIDI host (as opposed to connecting to existing host). Only works on MacOs.

You can build them with ghc --make -threaded like above.

Differences between Windows and MacOS

We tried to create a unified Haskell API, but there are still differences between the Windows and Mac implementations. In particular, you cannot create MIDI hosts on Windows.

Metadata

Version

0.2.3.1

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows