1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/shirdonl-EasyMIDI

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 3.4 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 10:37 e40505c

EasyMidi

EasyMidi — это простая и надёжная библиотека для работы со стандартными MIDI-файлами (SMF).

Установка

Пошаговая серия примеров, которые помогут вам настроить среду разработки.

Получите репозиторий:

go get gitee.com/shirdonl/EasyMIDI/...

Использование

Пример 1. Чтение и получение данных из MIDI-файла.

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())
	}
}

Пример 2. Создание и запись одной MIDI-дорожки в новый MIDI-файл.

Создаём 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)
	}
}

Создано с помощью

  • Go — язык программирования Go.

Авторы

  • Shirdon — основной разработчик — Shirdon.

Лицензия

Этот проект лицензирован по лицензии MIT — см. файл LICENSE для получения подробной информации.

1
https://api.gitlife.ru/oschina-mirror/shirdonl-EasyMIDI.git
git@api.gitlife.ru:oschina-mirror/shirdonl-EasyMIDI.git
oschina-mirror
shirdonl-EasyMIDI
shirdonl-EasyMIDI
master