11package ast
22
33import (
4+ "io"
45 "math"
56
6- "github.com/mgnsk/gong/internal/ constants"
7+ "github.com/mgnsk/gong/constants"
78 "github.com/mgnsk/gong/internal/parser/token"
89)
910
@@ -13,6 +14,22 @@ type CmdAssign struct {
1314 Key uint8
1415}
1516
17+ func (c CmdAssign ) WriteTo (w io.Writer ) (int64 , error ) {
18+ ew := newErrWriter (w )
19+ var n int
20+
21+ n += ew .WriteString ("assign " )
22+ n += ew .WriteRune (c .Note )
23+ n += ew .WriteString (" " )
24+ n += ew .WriteInt (int (c .Key ))
25+
26+ return int64 (n ), ew .Flush ()
27+ }
28+
29+ // func (c CmdAssign) String() string {
30+ // return fmt.Sprintf("assign %c %d", c.Note, c.Key)
31+ // }
32+
1633// NewCmdAssign creates a note assignment command.
1734func NewCmdAssign (note , key * token.Token ) (CmdAssign , error ) {
1835 v , err := key .Int32Value ()
@@ -31,6 +48,20 @@ func NewCmdAssign(note, key *token.Token) (CmdAssign, error) {
3148// CmdTempo is a tempo command.
3249type CmdTempo uint16
3350
51+ func (c CmdTempo ) WriteTo (w io.Writer ) (int64 , error ) {
52+ ew := newErrWriter (w )
53+ var n int
54+
55+ n += ew .WriteString ("tempo " )
56+ n += ew .WriteInt (int (c ))
57+
58+ return int64 (n ), ew .Flush ()
59+ }
60+
61+ // func (c CmdTempo) String() string {
62+ // return fmt.Sprintf("tempo %d", c)
63+ // }
64+
3465// NewCmdTempo creates a tempo command.
3566func NewCmdTempo (bpm * token.Token ) (CmdTempo , error ) {
3667 v , err := bpm .Int32Value ()
@@ -45,17 +76,33 @@ func NewCmdTempo(bpm *token.Token) (CmdTempo, error) {
4576
4677// CmdTimeSig is a time signature change command.
4778type CmdTimeSig struct {
48- Beats uint8
49- Value uint8
79+ Num uint8
80+ Denom uint8
81+ }
82+
83+ func (c CmdTimeSig ) WriteTo (w io.Writer ) (int64 , error ) {
84+ ew := newErrWriter (w )
85+ var n int
86+
87+ n += ew .WriteString ("timesig " )
88+ n += ew .WriteInt (int (c .Num ))
89+ n += ew .WriteString (" " )
90+ n += ew .WriteInt (int (c .Denom ))
91+
92+ return int64 (n ), ew .Flush ()
5093}
5194
95+ // func (c CmdTimeSig) String() string {
96+ // return fmt.Sprintf("timesig %d %d", c.Num, c.Denom)
97+ // }
98+
5299// NewCmdTimeSig creates a time signature change command.
53- func NewCmdTimeSig (beats , value * token.Token ) (CmdTimeSig , error ) {
54- b , err := beats .Int32Value ()
100+ func NewCmdTimeSig (num , denom * token.Token ) (CmdTimeSig , error ) {
101+ b , err := num .Int32Value ()
55102 if err != nil {
56103 return CmdTimeSig {}, err
57104 }
58- v , err := value .Int32Value ()
105+ v , err := denom .Int32Value ()
59106 if err != nil {
60107 return CmdTimeSig {}, err
61108 }
@@ -66,14 +113,28 @@ func NewCmdTimeSig(beats, value *token.Token) (CmdTimeSig, error) {
66113 return CmdTimeSig {}, err
67114 }
68115 return CmdTimeSig {
69- Beats : uint8 (b ),
70- Value : uint8 (v ),
116+ Num : uint8 (b ),
117+ Denom : uint8 (v ),
71118 }, nil
72119}
73120
74121// CmdChannel is a channel change command.
75122type CmdChannel uint8
76123
124+ func (c CmdChannel ) WriteTo (w io.Writer ) (int64 , error ) {
125+ ew := newErrWriter (w )
126+ var n int
127+
128+ n += ew .WriteString ("channel " )
129+ n += ew .WriteInt (int (c ))
130+
131+ return int64 (n ), ew .Flush ()
132+ }
133+
134+ // func (c CmdChannel) String() string {
135+ // return fmt.Sprintf("channel %d", c)
136+ // }
137+
77138// NewCmdChannel creates a channel change command.
78139func NewCmdChannel (value * token.Token ) (CmdChannel , error ) {
79140 v , err := value .Int32Value ()
@@ -89,6 +150,20 @@ func NewCmdChannel(value *token.Token) (CmdChannel, error) {
89150// CmdVelocity is a velocity change command.
90151type CmdVelocity uint8
91152
153+ func (c CmdVelocity ) WriteTo (w io.Writer ) (int64 , error ) {
154+ ew := newErrWriter (w )
155+ var n int
156+
157+ n += ew .WriteString ("velocity " )
158+ n += ew .WriteInt (int (c ))
159+
160+ return int64 (n ), ew .Flush ()
161+ }
162+
163+ // func (c CmdVelocity) String() string {
164+ // return fmt.Sprintf("velocity %d", c)
165+ // }
166+
92167// NewCmdVelocity creates a velocity change command.
93168func NewCmdVelocity (value * token.Token ) (CmdVelocity , error ) {
94169 v , err := value .Int32Value ()
@@ -104,6 +179,20 @@ func NewCmdVelocity(value *token.Token) (CmdVelocity, error) {
104179// CmdProgram is a program change command.
105180type CmdProgram uint8
106181
182+ func (c CmdProgram ) WriteTo (w io.Writer ) (int64 , error ) {
183+ ew := newErrWriter (w )
184+ var n int
185+
186+ n += ew .WriteString ("program " )
187+ n += ew .WriteInt (int (c ))
188+
189+ return int64 (n ), ew .Flush ()
190+ }
191+
192+ // func (c CmdProgram) String() string {
193+ // return fmt.Sprintf("program %d", c)
194+ // }
195+
107196// NewCmdProgram creates a program change command.
108197func NewCmdProgram (value * token.Token ) (CmdProgram , error ) {
109198 v , err := value .Int32Value ()
@@ -122,6 +211,22 @@ type CmdControl struct {
122211 Parameter uint8
123212}
124213
214+ func (c CmdControl ) WriteTo (w io.Writer ) (int64 , error ) {
215+ ew := newErrWriter (w )
216+ var n int
217+
218+ n += ew .WriteString ("control " )
219+ n += ew .WriteInt (int (c .Control ))
220+ n += ew .WriteString (" " )
221+ n += ew .WriteInt (int (c .Parameter ))
222+
223+ return int64 (n ), ew .Flush ()
224+ }
225+
226+ // func (c CmdControl) String() string {
227+ // return fmt.Sprintf("control %d %d", c.Control, c.Parameter)
228+ // }
229+
125230// NewCmdControl creates a control change command.
126231func NewCmdControl (control , value * token.Token ) (CmdControl , error ) {
127232 c , err := control .Int32Value ()
@@ -144,17 +249,52 @@ func NewCmdControl(control, value *token.Token) (CmdControl, error) {
144249 }, nil
145250}
146251
147- // CmdBar is a bar begin command.
148- type CmdBar string
149-
150- // CmdEnd is a bar end command.
151- type CmdEnd struct {}
152-
153252// CmdPlay is a bar play command.
154253type CmdPlay string
155254
255+ func (c CmdPlay ) WriteTo (w io.Writer ) (int64 , error ) {
256+ ew := newErrWriter (w )
257+ var n int
258+
259+ n += ew .WriteString ("play \" " )
260+ n += ew .WriteString (string (c ))
261+ n += ew .WriteString ("\" " )
262+
263+ return int64 (n ), ew .Flush ()
264+ }
265+
266+ // func (c CmdPlay) String() string {
267+ // return fmt.Sprintf(`play "%s"`, string(c))
268+ // }
269+
156270// CmdStart is a start commad.
157271type CmdStart struct {}
158272
273+ func (c CmdStart ) WriteTo (w io.Writer ) (int64 , error ) {
274+ ew := newErrWriter (w )
275+ var n int
276+
277+ n += ew .WriteString ("start" )
278+
279+ return int64 (n ), ew .Flush ()
280+ }
281+
282+ // func (c CmdStart) String() string {
283+ // return "start"
284+ // }
285+
159286// CmdStop is a stop command.
160287type CmdStop struct {}
288+
289+ func (c CmdStop ) WriteTo (w io.Writer ) (int64 , error ) {
290+ ew := newErrWriter (w )
291+ var n int
292+
293+ n += ew .WriteString ("stop" )
294+
295+ return int64 (n ), ew .Flush ()
296+ }
297+
298+ // func (c CmdStop) String() string {
299+ // return "stop"
300+ // }
0 commit comments