func RestSequence(bars, biab int) Sequence {
	groups := [][]Note{}
	for b := 0; b < bars; b++ {
		for c := 0; c < biab; c++ {
			groups = append(groups, []Note{Rest4})
		}
	}
	return Sequence{Notes: groups}
}
RestSequence returns a sequence with rest notes up to <bars> respecting <biab>.
package core
import (
	"bytes"
	"fmt"
	"log"
	"strconv"
	"time"
)
var EmptySequence = Sequence{}
type Sequence struct {
	Notes [][]Note
}
func (s Sequence) At(i int) []Note {
	if i < 0 || i > len(s.Notes)-1 {
		panic("Sequence index out of bounds:" + strconv.Itoa(i))
	}
	return s.Notes[i]
}
func (s Sequence) Replaced(from, to Sequenceable) Sequenceable {
	if IsIdenticalTo(from, s) {
		return to
	}
	return s
}
func (s Sequence) SequenceJoin(t Sequence) Sequence {
	return Sequence{append(s.Notes, t.Notes...)}
}
func (s Sequence) NotesDo(block func(Note)) {
	for _, eachGroup := range s.Notes {
		for _, eachNote := range eachGroup {
			block(eachNote)
		}
	}
}