https://github.com/go-mix/mix
See demo/demo.go
:
package main
import (
"fmt"
"os"
"time"
"github.com/go-mix/mix"
"github.com/go-mix/mix/bind"
)
var (
sampleHz = float64(48000)
spec = bind.AudioSpec{
Freq: sampleHz,
Format: bind.AudioF32,
Channels: 2,
}
bpm = 120
step = time.Minute / time.Duration(bpm*4)
loops = 16
prefix = "sound/808/"
kick1 = "kick1.wav"
kick2 = "kick2.wav"
marac = "maracas.wav"
snare = "snare.wav"
hitom = "hightom.wav"
clhat = "cl_hihat.wav"
pattern = []string{
kick2,
marac,
clhat,
marac,
snare,
marac,
clhat,
kick2,
marac,
marac,
hitom,
marac,
snare,
kick1,
clhat,
marac,
}
)
func main() {
defer mix.Teardown()
mix.Debug(true)
mix.Configure(spec)
mix.SetSoundsPath(prefix)
mix.StartAt(time.Now().Add(1 * time.Second))
t := 2 * time.Second // padding before music
for n := 0; n < loops; n++ {
for s := 0; s < len(pattern); s++ {
mix.SetFire(pattern[s], t+time.Duration(s)*step, 0, 1.0, 0)
}
t += time.Duration(len(pattern)) * step
}
fmt.Printf("Mix, pid:%v, spec:%v\n", os.Getpid(), spec)
for mix.FireCount() > 0 {
time.Sleep(1 * time.Second)
}
}
Play this Demo from the root of the project, with no actual audio playback:
make demo
Or export WAV via stdout > demo/output.wav
:
make demo.wav