Skip to content

Commit

Permalink
Add midi playback example
Browse files Browse the repository at this point in the history
  • Loading branch information
MarkKremer committed Jul 31, 2024
1 parent ce7fc20 commit 0f86987
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 0 deletions.
6 changes: 6 additions & 0 deletions examples/midi/Buy to the Beat - V2 License.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Buy to the Beat - V2

Copyright (c) 2021 Robert Oost<br>
Soundcloud: https://soundcloud.com/sponsrob

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) License. To view a copy of the license, visit https://creativecommons.org/licenses/by-nc-sa/4.0/.
Binary file added examples/midi/Buy to the Beat - V2.mid
Binary file not shown.
7 changes: 7 additions & 0 deletions examples/midi/Florestan-Basic License.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Florestan Basic GM GS

Author: Nando Florestan

This sound font is in the public domain.

Source: [Internet Archive](https://archive.org/details/sf2-soundfonts-free-use)
Binary file not shown.
44 changes: 44 additions & 0 deletions examples/midi/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package main

import (
"fmt"
"log"
"os"
"time"

"github.com/gopxl/beep"
"github.com/gopxl/beep/midi"
"github.com/gopxl/beep/speaker"
)

func main() {
var sampleRate beep.SampleRate = 44100

err := speaker.Init(sampleRate, sampleRate.N(time.Second/30))
if err != nil {
log.Fatal(err)
}

// Load a soundfont.
soundFontFile, err := os.Open("Florestan-Basic-GM-GS-by-Nando-Florestan(Public-Domain).sf2")
if err != nil {
log.Fatal(err)
}
soundFont, err := midi.NewSoundFont(soundFontFile)
if err != nil {
log.Fatal(err)
}

// Load a midi track.
midiFile, err := os.Open("Buy to the Beat - V2.mid")
if err != nil {
log.Fatal(err)
}
s, format, err := midi.Decode(midiFile, soundFont, sampleRate)
if err != nil {
log.Fatal(err)
}

fmt.Printf("Song duration: %v\n", format.SampleRate.D(s.Len()))
speaker.PlayAndWait(s)
}

0 comments on commit 0f86987

Please sign in to comment.