Popularity
2.9
Stable
Activity
0.0
Stable
35
3
7

Programming language: Go
License: MIT License
Tags: Audio And Music    

EasyMIDI alternatives and similar packages

Based on the "Audio and Music" category.
Alternatively, view EasyMIDI alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of EasyMIDI or a related project?

Add another 'Audio and Music' Package

README

EasyMidi

codecov Build Status Go Report Card GoDoc Awesome

EasyMidi is a simple and reliable library for working with standard midi file (SMF).

Installing

A step by step series of examples that tell you have to get a development env running

Get repository

go get github.com/algoGuy/EasyMIDI/...

How To Use

Example 1. Read and get data from midi file.

package main

import (
    "bufio"
    "fmt"
    "os"

    "github.com/algoGuy/EasyMIDI/smfio"
)

func main() {

    // Open test midi file
    file, _ := os.Open("./Test_-_test1.mid")
    defer file.Close()

    // Read and save midi to smf.MIDIFile struct
    midi, err := smfio.Read(bufio.NewReader(file))

    if err != nil {
        fmt.Println(err)
    }

    // Get zero track
    track := midi.GetTrack(0)

    // Print number of midi tracks
    fmt.Println(midi.GetTracksNum())

    // Get all midi events via iterator
    iter := track.GetIterator()

    for iter.MoveNext() {
        fmt.Println(iter.GetValue())
    }
}

Example 2. Create and write one midi track into new midi file.

Created midi file from scratch. In current example output midi must contains one note.

package main

import (
    "bufio"
    "log"
    "os"

    "github.com/algoGuy/EasyMIDI/smf"
    "github.com/algoGuy/EasyMIDI/smfio"
)

func main() {

    // Create division
    division, err := smf.NewDivision(960, smf.NOSMTPE)
    checkErr(err)

    // Create new midi struct
    midi, err := smf.NewSMF(smf.Format0, *division)
    checkErr(err)

    // Create track struct
    track := &smf.Track{}

    // Add track to new midi struct
    err = midi.AddTrack(track)
    checkErr(err)

    // Create some midi and meta events
    midiEventOne, err := smf.NewMIDIEvent(0, smf.NoteOnStatus, 0x00, 0x30, 0x50)
    checkErr(err)
    midiEventTwo, err := smf.NewMIDIEvent(10000, smf.NoteOnStatus, 0x00, 0x30, 0x00)
    checkErr(err)
    metaEventOne, err := smf.NewMetaEvent(0, smf.MetaEndOfTrack, []byte{})
    checkErr(err)

    // Add created events to track
    err = track.AddEvent(midiEventOne)
    checkErr(err)
    err = track.AddEvent(midiEventTwo)
    checkErr(err)
    err = track.AddEvent(metaEventOne)
    checkErr(err)

    // Save to new midi source file
    outputMidi, err := os.Create("outputMidi.mid")
    checkErr(err)
    defer outputMidi.Close()

    // Create buffering stream
    writer := bufio.NewWriter(outputMidi)
    smfio.Write(writer, midi)
    writer.Flush()
}

func checkErr(err error) {
    if err != nil {
        log.Fatalln(err)
    }
}

Built With

  • Go - The Go Programming Language

Authors

  • algoGuy - main developer - algoGuy
  • iqhater - main contributer - iqhater

License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details


*Note that all licence references and agreements mentioned in the EasyMIDI README section above are relevant to that project's source code only.