/
variant.go
41 lines (37 loc) · 970 Bytes
/
variant.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package sc
import (
"encoding/binary"
"io"
)
// Variant provides a way to create synthdef presets.
type Variant struct {
Name string `json:"name,omitempty"`
InitialParamValues []float32 `json:"initialParamValues"`
}
// Write writes a variant to an io.Writer.
func (variant *Variant) Write(w io.Writer) error {
if err := newPstring(variant.Name).Write(w); err != nil {
return err
}
for _, v := range variant.InitialParamValues {
if err := binary.Write(w, byteOrder, v); err != nil {
return err
}
}
return nil
}
// readVariant read a Variant from an io.Reader
func readVariant(r io.Reader, numParams int32) (*Variant, error) {
name, err := readPstring(r)
if err != nil {
return nil, err
}
paramValues := make([]float32, numParams)
for i := 0; int32(i) < numParams; i++ {
if err := binary.Read(r, byteOrder, ¶mValues[i]); err != nil {
return nil, err
}
}
v := Variant{name.String(), paramValues}
return &v, nil
}