rtmididrv

package module
v0.13.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 13, 2021 License: MIT Imports: 6 Imported by: 73

README

rtmididrv

If you are viewing this on Github, please note that the development has been moved to Gitlab: gitlab.com/gomidi/rtmididrv

Purpose

A driver for the unified MIDI driver interface https://gitlab.com/gomidi/midi.Driver .

This driver is based on the rtmidi project (see https://github.com/thestk/rtmidi for more information).

For a driver based on portmidi, see https://gitlab.com/gomidi/portmididrv

Installation

It is recommended to use Go >= 1.14

Linux / Debian

// install the headers of alsa somehow, e.g. sudo apt-get install libasound2-dev
go get -d gitlab.com/gomidi/rtmididrv

Documentation

Documentation

Example

package main

import (
	"fmt"
	"os"
	"time"

	"gitlab.com/gomidi/midi"
	"gitlab.com/gomidi/midi/reader"
	"gitlab.com/gomidi/midi/writer"
	driver "gitlab.com/gomidi/rtmididrv"
	// when using portmidi, replace the line above with
	// driver gitlab.com/gomidi/portmididrv
)

func must(err error) {
	if err != nil {
		panic(err.Error())
	}
}

// This example expects the first input and output port to be connected
// somehow (are either virtual MIDI through ports or physically connected).
// We write to the out port and listen to the in port.
func main() {
	drv, err := driver.New()
	must(err)

	// make sure to close all open ports at the end
	defer drv.Close()

	ins, err := drv.Ins()
	must(err)

	outs, err := drv.Outs()
	must(err)

	if len(os.Args) == 2 && os.Args[1] == "list" {
		printInPorts(ins)
		printOutPorts(outs)
		return
	}

	in, out := ins[0], outs[0]

	must(in.Open())
	must(out.Open())

	wr := writer.New(out)

	// listen for MIDI
	rd := reader.New(nil)
	go rd.ListenTo(in)

	{ // write MIDI to out that passes it to in on which we listen.
		err := writer.NoteOn(wr, 60, 100)
		if err != nil {
			panic(err)
		}
		time.Sleep(time.Nanosecond)
		writer.NoteOff(wr, 60)
		time.Sleep(time.Nanosecond)

		wr.SetChannel(1)

		writer.NoteOn(wr, 70, 100)
		time.Sleep(time.Nanosecond)
		writer.NoteOff(wr, 70)
		time.Sleep(time.Second * 1)
	}
}

func printPort(port midi.Port) {
	fmt.Printf("[%v] %s\n", port.Number(), port.String())
}

func printInPorts(ports []midi.In) {
	fmt.Printf("MIDI IN Ports\n")
	for _, port := range ports {
		printPort(port)
	}
	fmt.Printf("\n\n")
}

func printOutPorts(ports []midi.Out) {
	fmt.Printf("MIDI OUT Ports\n")
	for _, port := range ports {
		printPort(port)
	}
	fmt.Printf("\n\n")
}

Documentation

Overview

Package rtmididrv provides a gomidi/midi/mid.Driver to connect to external MIDI ports via rtmidi. See the example to get an idea how to use it.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CloseErrors added in v0.6.0

type CloseErrors []error

CloseErrors collects error from closing multiple MIDI ports

func (CloseErrors) Error added in v0.6.0

func (c CloseErrors) Error() string

type Driver added in v0.7.0

type Driver struct {
	sync.RWMutex
	// contains filtered or unexported fields
}

func New

func New() (*Driver, error)

New returns a driver based on the default rtmidi in and out

func (*Driver) Close added in v0.7.0

func (d *Driver) Close() (err error)

Close closes all open ports. It must be called at the end of a session.

func (*Driver) Ins added in v0.7.0

func (d *Driver) Ins() (ins []midi.In, err error)

Ins returns the available MIDI input ports

func (*Driver) OpenVirtualIn added in v0.7.0

func (d *Driver) OpenVirtualIn(name string) (midi.In, error)

OpenVirtualIn opens and returns a virtual MIDI in. We can't get the port number, so set it to -1.

func (*Driver) OpenVirtualOut added in v0.7.0

func (d *Driver) OpenVirtualOut(name string) (midi.Out, error)

OpenVirtualOut opens and returns a virtual MIDI out. We can't get the port number, so set it to -1.

func (*Driver) Outs added in v0.7.0

func (d *Driver) Outs() (outs []midi.Out, err error)

Outs returns the available MIDI output ports

func (*Driver) String added in v0.7.0

func (d *Driver) String() string

Directories

Path Synopsis
imported

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL