Documentation
¶
Overview ¶
Example ¶
This example reads from the first input and and writes to the first output port
package main
import (
"fmt"
"time"
"gitlab.com/gomidi/midi"
"gitlab.com/gomidi/midi/reader"
// replace with e.g. "gitlab.com/gomidi/rtmididrv" for real midi connections
driver "gitlab.com/gomidi/midi/testdrv"
"gitlab.com/gomidi/midi/writer"
)
// This example reads from the first input and and writes to the first output port
func main() {
// you would take a real driver here e.g. rtmididrv.New()
drv := driver.New("fake cables: messages written to output port 0 are received on input port 0")
// 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)
in, out := ins[0], outs[0]
must(in.Open())
must(out.Open())
defer in.Close()
defer out.Close()
// the writer we are writing to
wr := writer.New(out)
// to disable logging, pass mid.NoLogger() as option
rd := reader.New(
reader.NoLogger(),
// write every message to the out port
reader.Each(func(pos *reader.Position, msg midi.Message) {
fmt.Printf("got %s\n", msg)
}),
)
// listen for MIDI
err = rd.ListenTo(in)
must(err)
err = writer.NoteOn(wr, 60, 100)
must(err)
time.Sleep(100 * time.Millisecond)
err = writer.NoteOff(wr, 60)
must(err)
}
func must(err error) {
if err != nil {
panic(err.Error())
}
}
Output: got channel.NoteOn channel 0 key 60 velocity 100 got channel.NoteOff channel 0 key 60
Click to show internal directories.
Click to hide internal directories.