EasyMidi
EasyMidi — это простая и надёжная библиотека для работы со стандартными MIDI-файлами (SMF).
Установка
Пошаговая серия примеров, которые помогут вам настроить среду разработки.
Получите репозиторий:
go get gitee.com/shirdonl/EasyMIDI/...
Использование
package main
import (
"bufio"
"fmt"
"os"
"gitee.com/shirdonl/EasyMIDI/smfio"
)
func main() {
// Открыть тестовый MIDI-файл
file, _ := os.Open("./Test_-_test1.mid")
defer file.Close()
// Прочитать и сохранить MIDI в структуру smf.MIDIFile
midi, err := smfio.Read(bufio.NewReader(file))
if err != nil {
fmt.Println(err)
}
// Получить нулевую дорожку
track := midi.GetTrack(0)
// Вывести количество MIDI-треков
fmt.Println(midi.GetTracksNum())
// Получить все события MIDI через итератор
iter := track.GetIterator()
for iter.MoveNext() {
fmt.Println(iter.GetValue())
}
}
Создаём MIDI-файл с нуля. В этом примере выходной MIDI должен содержать одну ноту.
package main
import (
"bufio"
"log"
"os"
"gitee.com/shirdonl/EasyMIDI/smf"
"gitee.com/shirdonl/EasyMIDI/smfio"
)
func main() {
// Создать деление
division, err := smf.NewDivision(960, smf.NOSMTPE)
checkErr(err)
// Создать новую структуру MIDI
midi, err := smf.NewSMF(smf.Format0, *division)
checkErr(err)
// Создать структуру дорожки
track := &smf.Track{}
// Добавить дорожку в новую структуру MIDI
err = midi.AddTrack(track)
checkErr(err)
// Создать некоторые события MIDI и метаданные
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)
// Добавить созданные события в дорожку
err = track.AddEvent(midiEventOne)
checkErr(err)
err = track.AddEvent(midiEventTwo)
checkErr(err)
err = track.AddEvent(metaEventOne)
checkErr(err)
// Сохранить в новом исходном файле MIDI
outputMidi, err := os.Create("outputMidi.mid")
checkErr(err)
defer outputMidi.Close()
// Создать буферизованный поток
writer := bufio.NewWriter(outputMidi)
smfio.Write(writer, midi)
writer.Flush()
}
func checkErr(err error) {
if err != nil {
log.Fatalln(err)
}
}
Создано с помощью
Авторы
Лицензия
Этот проект лицензирован по лицензии MIT — см. файл LICENSE для получения подробной информации.
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.