alda-rb 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b8cd5dc1dfccedec4cebe301d7e3cfe95cbf68014b0e5842414577eb08c5b67
4
- data.tar.gz: f40b5266fbfbb09088737ed7c14010ab47c53a2f17f79c130a55593f0dc3f048
3
+ metadata.gz: b1a40fb3e4fa0d3ae035cbaf901b0fa209676743cd36b31168b9e04af9bf6aaf
4
+ data.tar.gz: df7faaf786abc7e90260864d5abaa275c3702f81b7ad9b114b287ca940d07dee
5
5
  SHA512:
6
- metadata.gz: ed6827f9c90c26b0a83706730ba439db7c6263a8196cb4a06b8407338e6e43ce8f2309f5f522ee1326c19c88dd519bec1c3c08eae3be991c984ab9b069378947
7
- data.tar.gz: 2f1669cf6cfb7712f3ce8736d96b45caa074579a6b10dbaef5478e24cfbf8fed4796c51c09b03de957adee6314c5052a21549c646e222a9c3c4340364abeea9a
6
+ metadata.gz: 7378bb4040c96cf509ea800412000f5f1d676a5e2d3e62016906c928c9991fc6f2fd0358989e5ea0d0e8526767fcbc8d8942ccbb9f7742fe2106f7ab44d0596f
7
+ data.tar.gz: bfb477c6af6d034c3b4b05ddf8a5e73fd2887584eae8b959487c72dddcd7deda77617e2c6b3392b2cc71574ac81a05df9825cd686a7de9f3eb79e6d8731ddb09
data/.gitignore CHANGED
@@ -8,3 +8,4 @@
8
8
  /tmp/
9
9
 
10
10
  /.idea/
11
+ Gemfile.lock
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # Alda-rb
2
2
 
3
3
  A Ruby library for live-coding music with [Alda](https://alda.io/).
4
- Also provides a Alda DSL in Ruby.
4
+ Also provides an Alda DSL in Ruby.
5
5
 
6
6
  ## Installation
7
7
 
@@ -31,6 +31,7 @@ Alda.up if Alda.down?
31
31
  puts Alda.version
32
32
 
33
33
  score = Alda::Score.new { o4; c4/e/g; -d8; r8_16; +f4; o5; c2 }
34
+
34
35
  Alda::Score.new do
35
36
  piano_
36
37
  quant 200
@@ -43,6 +44,15 @@ Alda::Score.new do
43
44
  v2; o6
44
45
  motif = -> { c200ms; d500ms }
45
46
  8.times { motif * 2; e400ms_4; t4 { a; b; c } }
47
+ _ended
48
+
49
+ violin_
50
+ __ended
51
+ ->i do
52
+ c2; d4; e2_4; e2; d4; c2_4; c2; e4; d2
53
+ i == 0 ? (c4; d1_2) : (d4; c1_2)
54
+ end * 2
55
+
46
56
  end.play
47
57
  ```
48
58
 
@@ -54,7 +64,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
54
64
 
55
65
  ## Contributing
56
66
 
57
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/alda-rb. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/alda-rb/blob/master/CODE_OF_CONDUCT.md).
67
+ Bug reports and pull requests are welcome on GitHub at https://github.com/UlyssesZh/alda-rb. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/UlyssesZh/alda-rb/blob/master/CODE_OF_CONDUCT.md).
58
68
 
59
69
 
60
70
  ## License
@@ -63,4 +73,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
63
73
 
64
74
  ## Code of Conduct
65
75
 
66
- Everyone interacting in the Alda::Rb project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/alda-rb/blob/master/CODE_OF_CONDUCT.md).
76
+ Everyone interacting in the alda-rb project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/UlyssesZh/alda-rb/blob/master/CODE_OF_CONDUCT.md).
data/bin/console CHANGED
@@ -1,14 +1,16 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "alda-rb/rb"
4
+ require 'bundler/setup'
5
+ require_relative '../lib/alda-rb'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
9
+ include Alda
8
10
 
9
11
  # (If you use this, don't forget to add pry to your Gemfile!)
10
12
  # require "pry"
11
13
  # Pry.start
12
14
 
13
- require "irb"
14
- IRB.start(__FILE__)
15
+ require 'irb'
16
+ IRB.start __FILE__
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ # transcribed from:
6
+ # https://www.rosegardenmusic.com/tutorials/supplemental/n-endings/index.html
7
+
8
+ Alda::Score.new do
9
+ vibraphone_ 'vibes-1'
10
+ panning 10
11
+ s do
12
+ a; b8; +o; d; -o; b; g; b; +o; c
13
+ e4; -o; a; +o; c; -o; g
14
+ s{ g; +o; g8; f; e; c; -o; a4 }%1..2
15
+ s{ b8; +o; d; g2_4 }%3
16
+ end * 3
17
+
18
+ vibraphone_ 'vibes-2'
19
+ panning 90
20
+ s do
21
+ a; +o; e; -o; a; r
22
+ b; r; b; r
23
+ s{ g; r; +o; g; -o; g }%1..2
24
+ s{ +o; d; r; a; g }%3
25
+ end * 3
26
+ end.play
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ # Prelude and Fugue in C major, BWV 864
6
+ # (Prelude)
7
+ #
8
+ # J. S. Bach
9
+ #
10
+ # sheet music:
11
+ # http://www.freesheetpianomusic.com/bach/content/Well-Tempered%20Clavier_Book_1/Prelude%20and%20Fugue%20No.1%20C%20major%20BWV%20846.pdf
12
+
13
+ include Alda
14
+
15
+ Score.new do
16
+ def Note.absolute event_list, pitch, duration
17
+ /(?<letter>[a-g][-+_]*)(?<octave>\d*)/ =~ pitch
18
+ octave = @last_octave ||= '4' if octave.empty?
19
+ event_list.events.push new "o#{@last_octave = octave} #{letter}", duration
20
+ end
21
+
22
+ piano_; tempo 60
23
+ %w[
24
+ c e g c5 e
25
+ c4 d a d5 f
26
+ b3 d4 g d5 f
27
+ c4 e g c5 e
28
+ c4 e a e5 a
29
+ c4 d f+ a d5
30
+ b3 d4 g d5 g5
31
+ b3 c4 e g c5
32
+ a3 c4 e g c5
33
+ d3 a d4 f+ c5
34
+ g3 b d4 g b
35
+ g3 b- e4 g c+5
36
+ f3 a d4 a d5
37
+ f3 a- d4 f b
38
+ e3 g c4 g c5
39
+ e3 f a c4 f
40
+ d3 f a c4 f
41
+ g2 d3 g b f4
42
+ c3 e g c4 e
43
+ c3 g b- c4 e
44
+ f2 f3 a c4 e
45
+ f+2 c3 a c4 e-
46
+ a-2 f3 b c4 d
47
+ g2 f3 g b d4
48
+ g2 e3 g c4 e
49
+ g2 d3 g c4 f
50
+ g2 d3 g b f4
51
+ g2 e-3 a c4 f+
52
+ g2 e3 g c4 g
53
+ g2 d3 g c4 f
54
+ g2 d3 g b f4
55
+ c2 c3 g b- e4
56
+ ].each_slice 5 do |n1, n2, *notes|
57
+ s do
58
+ v1; Note.absolute self, n1, '2'
59
+ v2; r16; Note.absolute self, n2, '4..'
60
+ v3; r8; s{ notes.each { Note.absolute self, _1, '16' } }*2
61
+ end * 2
62
+ end
63
+ alda_code <<~ENDING
64
+ V1:
65
+ o2 c1 | c1 | c1~1s
66
+ V2:
67
+ o3 r16 c2... | r16 <b2... | >c1~1s
68
+ V3:
69
+ o3
70
+ r8 f16 a > c f c < a > c < a f a f d f d
71
+ r8 > g16 b > d f d < b > d < b g b d f e d
72
+ e1~1s/g/>c
73
+ ENDING
74
+ end.play
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ # Clapping Music (1972)
6
+ # for two performers
7
+ #
8
+ # Steve Reich
9
+ #
10
+ # sheet music:
11
+ # https://sites.ualberta.ca/~michaelf/SEM-O/SEM-O_2014/Steve's%20piece/clapping_reich.jpg
12
+
13
+ Alda::Score.new do
14
+ pattern = %i[clap clap clap rest clap clap rest clap rest clap clap rest]
15
+ pattern.define_singleton_method(:round_shift) { push shift }
16
+ Alda::Sequence.class_exec do
17
+ define_method(:clap) { +d }; define_method(:rest) { r }
18
+ define_method(:play) { pattern.each { __send__ _1 } }
19
+ end
20
+
21
+ tempo! 172
22
+ midi_percussion_; o2; set_note_length 8
23
+ v1; s{ play }*(12*13)
24
+ v2; 13.times { s{ play; pattern.round_shift }*12 }
25
+ end.play
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ Alda::Score.new do
6
+ violin_/viola_/cello_('strings'); g1_1_1
7
+ strings_.cello_; -o; c1_1_1
8
+ end.play
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ REST_RATE = 0.15
6
+ MS_LOWER = 30
7
+ MS_UPPER = 3000
8
+ OCTAVE_UPPER = 9
9
+
10
+ Alda::Score.new do
11
+ random_note = -> do
12
+ ms = -> { duration ms rand(MS_UPPER - MS_LOWER) + MS_LOWER }
13
+ if rand < REST_RATE
14
+ pause ms.()
15
+ octave rand OCTAVE_UPPER
16
+ note pitch("abcdefg"[rand 7].to_sym,
17
+ %i[sharp flat natural][rand 3]), ms.()
18
+ end
19
+ end
20
+
21
+ midi_electric_piano_1_
22
+ panning 25
23
+ random_note * 50
24
+
25
+ midi_timpani_
26
+ panning 50
27
+ random_note * 50
28
+
29
+ midi_celesta_
30
+ panning 75
31
+ random_note * 50
32
+ end.play
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ Alda::Score.new do
6
+ piano_
7
+ c; d; e; f; g2; g4; f; e; d; c2
8
+ end.play
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ Alda::Score.new do
6
+ vibraphone_
7
+ quant 200
8
+
9
+ key_signature 'f+ c+ g+'
10
+ a8; b; +o; c; d; e; f; g; a; -o
11
+ a; b; +o; ~c; d; e; ~f; ~g; a; -o
12
+
13
+ key_signature [:g, :minor]
14
+ g; a; b; +o; +c; d; e; +f; g; -o
15
+
16
+ key_signature e: [:flat], b: [:flat]
17
+ g1_1/b/d
18
+ end.play
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ Alda::Score.new do
6
+ midi_calliope_lead_
7
+ set_note_length 8
8
+ (10...100).step(10) { |n| note midi_note n }
9
+ end.play
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ Alda::Score.new do
6
+ tempo! 180
7
+ piano_
8
+ %i[ionian dorian phrygian lydian mixolydian aeolian locrian].each do |mode|
9
+ key_sig [:c, mode]
10
+ o4; c4; d8; e; f; g; a; b; +o; c1
11
+ end
12
+ end.play
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ Alda::Score.new do
6
+ piano_; set_duration 4
7
+ harp_; set_duration 2; octave 3
8
+
9
+ piano_/harp_
10
+ t { e; f; g }; t { a; b; +o; c }
11
+
12
+ harp_
13
+ t { d; e; f }; t { g; a; b }
14
+ end.play
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ Alda::Score.new do
6
+ piano_
7
+
8
+ v1
9
+ c8; d; e; f; g2_
10
+
11
+ v2
12
+ s{ c8; d }*2; e
13
+ f; g*3
14
+ t do
15
+ t{ c; c }
16
+ s{ g/e/c; s{ d }*2 }
17
+ s{ c; d }*5
18
+ end * 5
19
+ a/b/c; b; c/e
20
+
21
+ v3
22
+ a8; b; +o; c2_
23
+
24
+ clarinet_
25
+ a2; e
26
+ end.play
data/examples/phase.rb ADDED
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ Alda::Score.new do
6
+ tempos = { violin_: 100, viola_: 105, cello_: 110 }
7
+
8
+ tempos.each do |ins, tempo|
9
+ __send__ ins
10
+ tempo tempo
11
+ end
12
+ tempos.keys.lazy.map { __send__ _1 }.inject :/
13
+ s{ e8; f; g }*99
14
+ end.play
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ Alda::Score.new do
6
+ accordion_
7
+ c500ms/e/g
8
+ c1s/f/a
9
+ c2s/e/g
10
+ end.play
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'alda-rb'
4
+
5
+ puts Alda.version
6
+
7
+ score = Alda::Score.new { o4; c4/e/g; -d8; r8_16; +f4; o5; c2 }
8
+
9
+ Alda::Score.new do
10
+ piano_
11
+ quant 200
12
+ v1
13
+ 5.times do |t|
14
+ transpose t
15
+ import score
16
+ note midi_note(30 + t * t), duration(note_length 1)
17
+ end
18
+ v2; o6
19
+ motif = -> { c200ms; d500ms }
20
+ 8.times { motif * 2; e400ms_4; t4 { a; b; c } }
21
+ _ended
22
+
23
+ violin_
24
+ __ended
25
+ ->i do
26
+ c2; d4; e2_4; e2; d4; c2_4; c2; e4; d2
27
+ i == 0 ? (c4; d1_2) : (d4; c1_2)
28
+ end * 2
29
+
30
+ end.play
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Alda
2
- VERSION = '0.1.0'
4
+ VERSION = '0.1.2'
3
5
  end
data/lib/alda-rb.rb CHANGED
@@ -7,7 +7,7 @@ class Array
7
7
  end
8
8
  class Hash
9
9
  def to_alda_code
10
- "{#{to_a.flatten.map(&:to_alda_code).join ' '}}"
10
+ "{#{to_a.reduce(:+).map(&:to_alda_code).join ' '}}"
11
11
  end
12
12
  end
13
13
  class String
@@ -25,6 +25,11 @@ class Numeric
25
25
  inspect
26
26
  end
27
27
  end
28
+ class Range
29
+ def to_alda_code
30
+ "#{first}-#{last}"
31
+ end
32
+ end
28
33
  class Proc
29
34
  # Runs +self+ for +n+ times.
30
35
  def * n
@@ -48,6 +53,7 @@ module Alda
48
53
 
49
54
  # The method give Alda# ability to invoke +alda+ at the command line,
50
55
  # using +name+ as subcommand and +args+ as arguments.
56
+ # +opts+ are converted to command line options.
51
57
  #
52
58
  # The return value is the string output by the command in STDOUT.
53
59
  #
@@ -55,12 +61,15 @@ module Alda
55
61
  # @example
56
62
  # Alda.version
57
63
  # # => "Client version: 1.4.0\nServer version: [27713] 1.4.0\n"
58
- # Alda.parse '-c', 'bassoon: o3 c'
64
+ # Alda.parse code: 'bassoon: o3 c'
59
65
  # # => "{\"chord-mode\":false,\"current-instruments\":...}\n"
60
66
  # Alda.sandwich
61
67
  # # => Alda::CommandLineError (Expected a command, got sandwich)
62
- def self.method_missing name, *args
68
+ def self.method_missing name, *args, **opts
63
69
  name = name.to_s.gsub ?_, ?-
70
+ args.concat opts.map { |key, val|
71
+ ["--#{key.to_s.gsub ?_, ?-}", val.to_s]
72
+ }.flatten
64
73
  output = IO.popen [executable, name, *args], &:read
65
74
  raise CommandLineError.new $?, output if $?.exitstatus.nonzero?
66
75
  output
@@ -94,7 +103,7 @@ module Alda
94
103
  end
95
104
 
96
105
  # Including this module can make your class have the ability
97
- # to have a event list.
106
+ # to have an event list.
98
107
  # See docs below to get an overview of its functions.
99
108
  module EventList
100
109
 
@@ -120,20 +129,22 @@ module Alda
120
129
  #
121
130
  # 5. Starting with "r": rest. See Rest#.
122
131
  #
123
- # 6. Starting with "x": chord. See Chord#.
132
+ # 6. "x": chord. See Chord#.
133
+ #
134
+ # 7. "s": sequence. See Sequence#.
124
135
  #
125
- # 7. Starting with "o": octave. See Octave#.
136
+ # 8. Starting with "o": octave. See Octave#.
126
137
  #
127
- # 8. Starting with "v": voice. See Voice#.
138
+ # 9. Starting with "v": voice. See Voice#.
128
139
  #
129
- # 9. Starting with "__" (2 underlines): at marker. See AtMarker#.
140
+ # 10. Starting with "__" (2 underlines): at marker. See AtMarker#.
130
141
  #
131
- # 10. Starting with "_" (underline): marker. See Marker#.
142
+ # 11. Starting with "_" (underline): marker. See Marker#.
132
143
  #
133
144
  # Notes cannot have dots.
134
145
  # To tie multiple durations, +_+ is used instead of +~+.
135
146
  #
136
- # All the appended events are contained in a EventContainer# object,
147
+ # All the appended events are contained in an EventContainer# object,
137
148
  # which is to be returned.
138
149
  #
139
150
  # These sugars forms a DSL.
@@ -153,6 +164,8 @@ module Alda
153
164
  Rest.new duration
154
165
  when /^x$/ =~ name
155
166
  Chord.new &block
167
+ when /^s$/ =~ name
168
+ Sequence.new *args, &block
156
169
  when /^o(?<num>\d*)$/ =~ name
157
170
  Octave.new num
158
171
  when /^v(?<num>\d+)$/ =~ name
@@ -171,8 +184,9 @@ module Alda
171
184
  # Append the events of another EventList# object here.
172
185
  # This method covers the disadvantage of alda's being unable to
173
186
  # import scores from other files.
187
+ # See https://github.com/alda-lang/alda-core/issues/8.
174
188
  def import event_list
175
- @events += event_list.events
189
+ @events.concat event_list.events
176
190
  end
177
191
 
178
192
  # @param block to be passed with the EventList# object as +self+.
@@ -204,19 +218,43 @@ module Alda
204
218
  end
205
219
  end
206
220
 
207
- # The class mixes in EventList# and provides a method to play.
221
+ # The class mixes in EventList# and provides methods to play or parse.
208
222
  class Score
209
223
  include EventList
210
224
 
211
225
  # Plays the score.
212
- # @return the command line output of the +alda+ command.
226
+ # @return The command line output of the +alda+ command.
213
227
  # @example
214
228
  # Alda::Score.new { piano_; c; d; e }.play
215
229
  # # => "[27713] Parsing/evaluating...\n[27713] Playing...\n"
216
230
  # # (and plays the sound)
217
- def play
231
+ # Alda::Score.new { piano_; c; d; e }.play from: 1
232
+ # # (plays only an E note)
233
+ def play **opts
218
234
  Alda.stop
219
- Alda.play '--code', events_alda_codes
235
+ Alda.play code: self, **opts
236
+ end
237
+
238
+ # Parses the score.
239
+ # @return The JSON string of the parse result.
240
+ # @example
241
+ # Alda::Score.new { piano_; c }.parse output: :events
242
+ # # => "[{\"event-type\":...}]\n"
243
+ def parse **opts
244
+ Alda.parse code: self, **opts
245
+ end
246
+
247
+ # Exports the score.
248
+ # @return The command line output of the +alda+ command.
249
+ # @example
250
+ # Alda::Score.new { piano_; c }.export output: 'temp.mid'
251
+ # # (outputs a midi file called temp.mid)
252
+ def export **opts
253
+ Alda.export code: self, **opts
254
+ end
255
+
256
+ def to_s
257
+ events_alda_codes
220
258
  end
221
259
  end
222
260
 
@@ -224,11 +262,11 @@ module Alda
224
262
  class Event
225
263
 
226
264
  # The EventList# object that contains it.
227
- # Note that it may not be directly contained, but with a EventContainer#
265
+ # Note that it may not be directly contained, but with an EventContainer#
228
266
  # object in the middle.
229
267
  attr_accessor :parent
230
268
 
231
- # The callback invoked when it is contained in a EventContainer#.
269
+ # The callback invoked when it is contained in an EventContainer#.
232
270
  # It is overridden in InlineLisp#, so be aware if you want to
233
271
  # override InlineLisp#on_contained.
234
272
  # @example
@@ -253,12 +291,19 @@ module Alda
253
291
  # The contained Event# object.
254
292
  attr_accessor :event
255
293
 
294
+ # The repetition counts. +nil+ if none.
295
+ attr_accessor :count
296
+
297
+ # The repetition labels. Empty if none.
298
+ attr_accessor :labels
299
+
256
300
  # @param event The Event# object to be contained.
257
301
  # @param parent The EventList# object containing the event.
258
302
  def initialize event, parent
259
303
  @event = event
260
304
  @parent = parent
261
305
  @event.parent = @parent
306
+ @labels = []
262
307
  @event.on_contained
263
308
  end
264
309
 
@@ -284,11 +329,29 @@ module Alda
284
329
  end
285
330
 
286
331
  def to_alda_code
287
- @event.to_alda_code
332
+ result = @event.to_alda_code
333
+ unless @labels.empty?
334
+ result.concat ?', @labels.map(&:to_alda_code).join(?,)
335
+ end
336
+ result.concat ?*, @count.to_alda_code if @count
337
+ result
338
+ end
339
+
340
+ # Marks repetition.
341
+ def * num
342
+ @count = num
343
+ end
344
+
345
+ # Marks alternative repetition.
346
+ def % labels
347
+ labels = [labels] unless labels.respond_to? :to_a
348
+ @labels.replace labels.to_a
288
349
  end
289
350
 
290
351
  def method_missing name, *args
291
- @event.__send__ name, *args
352
+ result = @event.__send__ name, *args
353
+ result = self if result == @event
354
+ result
292
355
  end
293
356
  end
294
357
 
@@ -341,7 +404,7 @@ module Alda
341
404
  # Alda::Score.new { piano_; +c }.play
342
405
  # # (plays a C\# note)
343
406
  def +@
344
- @pitch += ?+
407
+ @pitch.concat ?+
345
408
  self
346
409
  end
347
410
 
@@ -350,7 +413,7 @@ module Alda
350
413
  # Alda::Score.new { piano_; -d }.play
351
414
  # # (plays a Db note)
352
415
  def -@
353
- @pitch += ?-
416
+ @pitch.concat ?-
354
417
  self
355
418
  end
356
419
 
@@ -359,12 +422,14 @@ module Alda
359
422
  # Alda::Score.new { piano_; key_sig 'f+'; ~f }.play
360
423
  # # (plays a F note)
361
424
  def ~
362
- @pitch += ?_
425
+ @pitch.concat ?_
363
426
  self
364
427
  end
365
428
 
366
429
  def to_alda_code
367
- @pitch + @duration
430
+ result = @pitch + @duration
431
+ result.concat ?*, @count.to_alda_code if @count
432
+ result
368
433
  end
369
434
  end
370
435
 
@@ -466,8 +531,20 @@ module Alda
466
531
 
467
532
  def to_alda_code
468
533
  result = @names.join ?/
469
- result += " \"#{@arg}\"" if @arg
470
- result + ?:
534
+ result.concat " \"#{@arg}\"" if @arg
535
+ result.concat ?:
536
+ end
537
+
538
+ # @example
539
+ # Alda::Score.new do
540
+ # violin_/viola_/cello_('strings'); g1_1_1
541
+ # strings_.cello_; -o; c1_1_1
542
+ # end.play
543
+ def method_missing name, *args
544
+ name = name.to_s
545
+ return super unless name[-1] == ?_
546
+ name[-1] = ''
547
+ @names.last.concat ?., name
471
548
  end
472
549
  end
473
550
 
@@ -525,7 +602,7 @@ module Alda
525
602
  end
526
603
  end
527
604
 
528
- # An at-marker event
605
+ # An at-marker event.
529
606
  # @see Marker#
530
607
  class AtMarker < Event
531
608
 
@@ -541,4 +618,13 @@ module Alda
541
618
  ?@ + @name
542
619
  end
543
620
  end
621
+
622
+ # A sequence event. Includes EventList#.
623
+ class Sequence < Event
624
+ include EventList
625
+
626
+ def to_alda_code
627
+ @events.to_alda_code
628
+ end
629
+ end
544
630
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alda-rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ulysses Zhan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-04-15 00:00:00.000000000 Z
11
+ date: 2020-04-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -18,13 +18,6 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - ".gitignore"
21
- - ".idea/$CACHE_FILE$"
22
- - ".idea/alda-rb.iml"
23
- - ".idea/dictionaries"
24
- - ".idea/misc.xml"
25
- - ".idea/modules.xml"
26
- - ".idea/vcs.xml"
27
- - ".idea/workspace.xml"
28
21
  - ".travis.yml"
29
22
  - CODE_OF_CONDUCT.md
30
23
  - Gemfile
@@ -34,6 +27,20 @@ files:
34
27
  - alda-rb.gemspec
35
28
  - bin/console
36
29
  - bin/setup
30
+ - examples/alternate_endings.rb
31
+ - examples/bwv846_prelude.rb
32
+ - examples/clapping_music.rb
33
+ - examples/dot_accessor.rb
34
+ - examples/entropy.rb
35
+ - examples/hello_world.rb
36
+ - examples/key_signature.rb
37
+ - examples/midi_note_numbers.rb
38
+ - examples/modes2.rb
39
+ - examples/multi_poly.rb
40
+ - examples/nesting.rb
41
+ - examples/phase.rb
42
+ - examples/seconds_and_milliseconds.rb
43
+ - examples/showcase.rb
37
44
  - lib/alda-rb.rb
38
45
  - lib/alda-rb/version.rb
39
46
  homepage: https://github.com/UlyssesZh/alda-rb
data/.idea/$CACHE_FILE$ DELETED
@@ -1,19 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectInspectionProfilesVisibleTreeState">
4
- <entry key="Project Default">
5
- <profile-state>
6
- <expanded-state>
7
- <State>
8
- <id />
9
- </State>
10
- </expanded-state>
11
- <selected-state>
12
- <State>
13
- <id>Android</id>
14
- </State>
15
- </selected-state>
16
- </profile-state>
17
- </entry>
18
- </component>
19
- </project>
data/.idea/alda-rb.iml DELETED
@@ -1,18 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="RUBY_MODULE" version="4">
3
- <component name="ModuleRunConfigurationManager">
4
- <shared />
5
- </component>
6
- <component name="NewModuleRootManager">
7
- <content url="file://$MODULE_DIR$">
8
- <sourceFolder url="file://$MODULE_DIR$/features" isTestSource="true" />
9
- <sourceFolder url="file://$MODULE_DIR$/spec" isTestSource="true" />
10
- <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
11
- </content>
12
- <orderEntry type="jdk" jdkName="RVM: ruby-2.7.1" jdkType="RUBY_SDK" />
13
- <orderEntry type="sourceFolder" forTests="false" />
14
- <orderEntry type="library" scope="PROVIDED" name="bundler (v2.1.4, RVM: ruby-2.7.1) [gem]" level="application" />
15
- <orderEntry type="library" scope="PROVIDED" name="minitest (v5.14.0, RVM: ruby-2.7.1) [gem]" level="application" />
16
- <orderEntry type="library" scope="PROVIDED" name="rake (v12.3.3, RVM: ruby-2.7.1) [gem]" level="application" />
17
- </component>
18
- </module>
data/.idea/dictionaries DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectDictionaryState">
4
- <dictionary name="zhany" />
5
- </component>
6
- </project>
data/.idea/misc.xml DELETED
@@ -1,12 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="CMakeSettings">
4
- <configurations>
5
- <configuration PROFILE_NAME="Debug" CONFIG_NAME="Debug" />
6
- </configurations>
7
- </component>
8
- <component name="JavaScriptSettings">
9
- <option name="languageLevel" value="ES6" />
10
- </component>
11
- <component name="ProjectRootManager" version="2" project-jdk-name="RVM: ruby-2.6.3" project-jdk-type="RUBY_SDK" />
12
- </project>
data/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/alda-rb.iml" filepath="$PROJECT_DIR$/.idea/alda-rb.iml" />
6
- </modules>
7
- </component>
8
- </project>
data/.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
- </component>
6
- </project>
data/.idea/workspace.xml DELETED
@@ -1,273 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ChangeListManager">
4
- <list default="true" id="b10f633a-1a6d-44a6-9a0d-d1ee339cc081" name="Default Changelist" comment="Set up">
5
- <change afterPath="$PROJECT_DIR$/.idea/$CACHE_FILE$" afterDir="false" />
6
- <change afterPath="$PROJECT_DIR$/.idea/alda-rb.iml" afterDir="false" />
7
- <change afterPath="$PROJECT_DIR$/.idea/dictionaries" afterDir="false" />
8
- <change afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
9
- <change afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" />
10
- <change afterPath="$PROJECT_DIR$/.idea/vcs.xml" afterDir="false" />
11
- <change afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
12
- <change afterPath="$PROJECT_DIR$/test/alda-rb/test.rb" afterDir="false" />
13
- <change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
14
- <change beforePath="$PROJECT_DIR$/alda-rb.gemspec" beforeDir="false" afterPath="$PROJECT_DIR$/alda-rb.gemspec" afterDir="false" />
15
- <change beforePath="$PROJECT_DIR$/lib/alda-rb.rb" beforeDir="false" afterPath="$PROJECT_DIR$/lib/alda-rb.rb" afterDir="false" />
16
- <change beforePath="$PROJECT_DIR$/test/alda/rb_test.rb" beforeDir="false" />
17
- </list>
18
- <option name="SHOW_DIALOG" value="false" />
19
- <option name="HIGHLIGHT_CONFLICTS" value="true" />
20
- <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
21
- <option name="LAST_RESOLUTION" value="IGNORE" />
22
- </component>
23
- <component name="FileTemplateManagerImpl">
24
- <option name="RECENT_TEMPLATES">
25
- <list>
26
- <option value="Ruby File" />
27
- </list>
28
- </option>
29
- </component>
30
- <component name="Git.Settings">
31
- <option name="PREVIOUS_COMMIT_AUTHORS">
32
- <list>
33
- <option value="Ulysses &lt;2938747508@qq.com&gt;" />
34
- </list>
35
- </option>
36
- <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
37
- </component>
38
- <component name="ProjectId" id="1aQswSfo0KGc03sfmSHSW38YFeA" />
39
- <component name="ProjectLevelVcsManager" settingsEditedManually="true">
40
- <ConfirmationsSetting value="2" id="Add" />
41
- </component>
42
- <component name="ProjectViewState">
43
- <option name="hideEmptyMiddlePackages" value="true" />
44
- <option name="showLibraryContents" value="true" />
45
- </component>
46
- <component name="PropertiesComponent">
47
- <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
48
- <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
49
- <property name="WebServerToolWindowFactoryState" value="false" />
50
- <property name="android.project.structure.last.selected" value="SDK Location" />
51
- <property name="android.project.structure.proportion" value="0.15" />
52
- <property name="android.sdk.path" value="D:/AndroidSDK" />
53
- <property name="last_opened_file_path" value="$PROJECT_DIR$" />
54
- <property name="node.js.detected.package.eslint" value="true" />
55
- <property name="node.js.detected.package.tslint" value="true" />
56
- <property name="node.js.path.for.package.eslint" value="project" />
57
- <property name="node.js.path.for.package.tslint" value="project" />
58
- <property name="node.js.selected.package.eslint" value="(autodetect)" />
59
- <property name="node.js.selected.package.tslint" value="(autodetect)" />
60
- <property name="nodejs_interpreter_path.stuck_in_default_project" value="undefined stuck path" />
61
- <property name="nodejs_npm_path_reset_for_default_project" value="true" />
62
- <property name="settings.editor.selected.configurable" value="org.jetbrains.plugins.ruby.settings.RubyActiveModuleSdkConfigurable" />
63
- </component>
64
- <component name="RunManager">
65
- <configuration name="&lt;template&gt;" type="Applet" default="true" selected="false">
66
- <option name="MAIN_CLASS_NAME" />
67
- <option name="HTML_FILE_NAME" />
68
- <option name="HTML_USED" value="false" />
69
- <option name="WIDTH" value="400" />
70
- <option name="HEIGHT" value="300" />
71
- <option name="POLICY_FILE" value="$APPLICATION_HOME_DIR$/bin/appletviewer.policy" />
72
- <option name="VM_PARAMETERS" />
73
- </configuration>
74
- <configuration default="true" type="Application" factoryName="Application">
75
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
76
- <option name="MAIN_CLASS_NAME" />
77
- <option name="VM_PARAMETERS" />
78
- <option name="PROGRAM_PARAMETERS" />
79
- <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
80
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
81
- <option name="ALTERNATIVE_JRE_PATH" />
82
- <option name="ENABLE_SWING_INSPECTOR" value="false" />
83
- <option name="ENV_VARIABLES" />
84
- <option name="PASS_PARENT_ENVS" value="true" />
85
- <module name="" />
86
- <envs />
87
- <method />
88
- </configuration>
89
- <configuration default="true" type="JUnit" factoryName="JUnit">
90
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
91
- <module name="" />
92
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
93
- <option name="ALTERNATIVE_JRE_PATH" />
94
- <option name="PACKAGE_NAME" />
95
- <option name="MAIN_CLASS_NAME" />
96
- <option name="METHOD_NAME" />
97
- <option name="TEST_OBJECT" value="class" />
98
- <option name="VM_PARAMETERS" value="-ea" />
99
- <option name="PARAMETERS" />
100
- <option name="WORKING_DIRECTORY" value="$MODULE_DIR$" />
101
- <option name="ENV_VARIABLES" />
102
- <option name="PASS_PARENT_ENVS" value="true" />
103
- <option name="TEST_SEARCH_SCOPE">
104
- <value defaultName="singleModule" />
105
- </option>
106
- <envs />
107
- <patterns />
108
- <method />
109
- </configuration>
110
- <configuration default="true" type="Remote" factoryName="Remote">
111
- <option name="USE_SOCKET_TRANSPORT" value="true" />
112
- <option name="SERVER_MODE" value="false" />
113
- <option name="SHMEM_ADDRESS" value="javadebug" />
114
- <option name="HOST" value="localhost" />
115
- <option name="PORT" value="5005" />
116
- <method />
117
- </configuration>
118
- <configuration default="true" type="TestNG" factoryName="TestNG">
119
- <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
120
- <module name="" />
121
- <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
122
- <option name="ALTERNATIVE_JRE_PATH" />
123
- <option name="SUITE_NAME" />
124
- <option name="PACKAGE_NAME" />
125
- <option name="MAIN_CLASS_NAME" />
126
- <option name="METHOD_NAME" />
127
- <option name="GROUP_NAME" />
128
- <option name="TEST_OBJECT" value="CLASS" />
129
- <option name="VM_PARAMETERS" value="-ea" />
130
- <option name="PARAMETERS" />
131
- <option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
132
- <option name="OUTPUT_DIRECTORY" />
133
- <option name="ANNOTATION_TYPE" />
134
- <option name="ENV_VARIABLES" />
135
- <option name="PASS_PARENT_ENVS" value="true" />
136
- <option name="TEST_SEARCH_SCOPE">
137
- <value defaultName="singleModule" />
138
- </option>
139
- <option name="USE_DEFAULT_REPORTERS" value="false" />
140
- <option name="PROPERTIES_FILE" />
141
- <envs />
142
- <properties />
143
- <listeners />
144
- <method />
145
- </configuration>
146
- <configuration type="TestUnitRunConfigurationType" factoryName="Test::Unit/Shoulda/Minitest" temporary="true" nameIsGenerated="true">
147
- <module name="alda-rb" />
148
- <predefined_log_file enabled="true" id="RUBY_TESTUNIT" />
149
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUBY_ARGS" VALUE="-Ilib:test" />
150
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="WORK DIR" VALUE="$MODULE_DIR$" />
151
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="SHOULD_USE_SDK" VALUE="false" />
152
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="ALTERN_SDK_NAME" VALUE="" />
153
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="myPassParentEnvs" VALUE="true" />
154
- <envs>
155
- <env name="JRUBY_OPTS" value="-X+O" />
156
- </envs>
157
- <EXTENSION ID="BundlerRunConfigurationExtension" bundleExecEnabled="false" />
158
- <EXTENSION ID="JRubyRunConfigurationExtension" NailgunExecEnabled="false" />
159
- <EXTENSION ID="RubyCoverageRunConfigurationExtension" track_test_folders="true" runner="rcov">
160
- <COVERAGE_PATTERN ENABLED="true">
161
- <PATTERN REGEXPS="/.rvm/" INCLUDED="false" />
162
- </COVERAGE_PATTERN>
163
- </EXTENSION>
164
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TESTS_FOLDER_PATH" VALUE="" />
165
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_SCRIPT_PATH" VALUE="$MODULE_DIR$/test/alda-rb/test.rb" />
166
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_FILE_MASK" VALUE="" />
167
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_METHOD_NAME" VALUE="test_that_it_has_a_version_number" />
168
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="TEST_TEST_TYPE" VALUE="TEST_METHOD" />
169
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="DRB" VALUE="false" />
170
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="ZEUS" VALUE="false" />
171
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="SPRING" VALUE="false" />
172
- <RTEST_RUN_CONFIG_SETTINGS_ID NAME="RUNNER_OPTIONS" VALUE="" />
173
- <method v="2" />
174
- </configuration>
175
- <configuration name="&lt;template&gt;" type="#org.jetbrains.idea.devkit.run.PluginConfigurationType" default="true" selected="false">
176
- <option name="VM_PARAMETERS" value="-Xmx512m -Xms256m -XX:MaxPermSize=250m -ea" />
177
- </configuration>
178
- </component>
179
- <component name="SpringUtil" SPRING_PRE_LOADER_OPTION="true" RAKE_SPRING_PRE_LOADER_OPTION="true" RAILS_SPRING_PRE_LOADER_OPTION="true" />
180
- <component name="SvnConfiguration">
181
- <configuration />
182
- </component>
183
- <component name="TaskManager">
184
- <task active="true" id="Default" summary="Default task">
185
- <changelist id="b10f633a-1a6d-44a6-9a0d-d1ee339cc081" name="Default Changelist" comment="" />
186
- <created>1586679389404</created>
187
- <option name="number" value="Default" />
188
- <option name="presentableId" value="Default" />
189
- <updated>1586679389404</updated>
190
- <workItem from="1586679391711" duration="1174000" />
191
- <workItem from="1586681723355" duration="285000" />
192
- <workItem from="1586686867506" duration="6808000" />
193
- <workItem from="1586736973986" duration="3329000" />
194
- <workItem from="1586748816394" duration="4539000" />
195
- <workItem from="1586784926260" duration="13604000" />
196
- <workItem from="1586908942592" duration="11580000" />
197
- <workItem from="1586921750897" duration="17800000" />
198
- <workItem from="1586942208327" duration="1213000" />
199
- <workItem from="1586943595118" duration="1180000" />
200
- </task>
201
- <task id="LOCAL-00001" summary="Set up">
202
- <created>1586680218633</created>
203
- <option name="number" value="00001" />
204
- <option name="presentableId" value="LOCAL-00001" />
205
- <option name="project" value="LOCAL" />
206
- <updated>1586680218633</updated>
207
- </task>
208
- <option name="localTasksCounter" value="2" />
209
- <servers />
210
- </component>
211
- <component name="TypeScriptGeneratedFilesManager">
212
- <option name="version" value="2" />
213
- </component>
214
- <component name="VcsManagerConfiguration">
215
- <MESSAGE value="Set up" />
216
- <option name="LAST_COMMIT_MESSAGE" value="Set up" />
217
- </component>
218
- <component name="WindowStateProjectService">
219
- <state x="201" y="203" width="800" height="684" key="#Notifications" timestamp="1586680238261">
220
- <screen x="0" y="27" width="1920" height="1053" />
221
- </state>
222
- <state x="201" y="203" width="800" height="684" key="#Notifications/0.27.1920.1053@0.27.1920.1053" timestamp="1586680238261" />
223
- <state x="39" y="154" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1586923510304">
224
- <screen x="0" y="27" width="1920" height="1053" />
225
- </state>
226
- <state x="39" y="154" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.27.1920.1053@0.27.1920.1053" timestamp="1586923510304" />
227
- <state x="339" y="290" width="524" height="509" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog" timestamp="1586679661400">
228
- <screen x="0" y="27" width="1920" height="1053" />
229
- </state>
230
- <state x="339" y="290" width="524" height="509" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog/0.27.1920.1053@0.27.1920.1053" timestamp="1586679661400" />
231
- <state x="487" y="118" width="860" height="857" key="CommitChangelistDialog2" timestamp="1586680218136">
232
- <screen x="0" y="27" width="1920" height="1053" />
233
- </state>
234
- <state x="487" y="118" width="860" height="857" key="CommitChangelistDialog2/0.27.1920.1053@0.27.1920.1053" timestamp="1586680218136" />
235
- <state x="378" y="285" width="447" height="520" key="FileChooserDialogImpl" timestamp="1586922599760">
236
- <screen x="0" y="27" width="1920" height="1053" />
237
- </state>
238
- <state x="378" y="285" width="447" height="520" key="FileChooserDialogImpl/0.27.1920.1053@0.27.1920.1053" timestamp="1586922599760" />
239
- <state width="1037" height="244" key="GridCell.Tab.0.bottom" timestamp="1586941875265">
240
- <screen x="0" y="27" width="1920" height="1053" />
241
- </state>
242
- <state width="1037" height="244" key="GridCell.Tab.0.bottom/0.27.1920.1053@0.27.1920.1053" timestamp="1586941875265" />
243
- <state width="1037" height="244" key="GridCell.Tab.0.center" timestamp="1586941875264">
244
- <screen x="0" y="27" width="1920" height="1053" />
245
- </state>
246
- <state width="1037" height="244" key="GridCell.Tab.0.center/0.27.1920.1053@0.27.1920.1053" timestamp="1586941875264" />
247
- <state width="1037" height="244" key="GridCell.Tab.0.left" timestamp="1586941875264">
248
- <screen x="0" y="27" width="1920" height="1053" />
249
- </state>
250
- <state width="1037" height="244" key="GridCell.Tab.0.left/0.27.1920.1053@0.27.1920.1053" timestamp="1586941875264" />
251
- <state width="1037" height="244" key="GridCell.Tab.0.right" timestamp="1586941875265">
252
- <screen x="0" y="27" width="1920" height="1053" />
253
- </state>
254
- <state width="1037" height="244" key="GridCell.Tab.0.right/0.27.1920.1053@0.27.1920.1053" timestamp="1586941875265" />
255
- <state x="95" y="176" width="1022" height="737" key="SettingsEditor" timestamp="1586702742398">
256
- <screen x="0" y="27" width="1920" height="1053" />
257
- </state>
258
- <state x="95" y="176" width="1022" height="737" key="SettingsEditor/0.27.1920.1053@0.27.1920.1053" timestamp="1586702742398" />
259
- <state x="201" y="277" width="800" height="535" key="Vcs.Push.Dialog.v2" timestamp="1586680356429">
260
- <screen x="0" y="27" width="1920" height="1053" />
261
- </state>
262
- <state x="201" y="277" width="800" height="535" key="Vcs.Push.Dialog.v2/0.27.1920.1053@0.27.1920.1053" timestamp="1586680356429" />
263
- <state x="268" y="364" key="com.intellij.ide.util.TipDialog" timestamp="1586782387987">
264
- <screen x="0" y="27" width="1920" height="1053" />
265
- </state>
266
- <state x="268" y="364" key="com.intellij.ide.util.TipDialog/0.27.1920.1053@0.27.1920.1053" timestamp="1586782387987" />
267
- </component>
268
- <component name="com.intellij.coverage.CoverageDataManagerImpl">
269
- <SUITE FILE_PATH="coverage/alda_rb@test_that_it_has_a_version____.rcov" NAME="test_that_it_has_a_version_... Coverage Results" MODIFIED="1586680178487" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="rcov" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" MODULE_NAME="alda-rb" />
270
- <SUITE FILE_PATH="coverage/alda_rb@test_it_does_something_useful.rcov" NAME="test_it_does_something_useful Coverage Results" MODIFIED="1586680184787" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="rcov" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" MODULE_NAME="alda-rb" />
271
- <SUITE FILE_PATH="coverage/alda_rb@test_basic_functions.rcov" NAME="test_basic_functions Coverage Results" MODIFIED="1586922636763" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="rcov" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$" MODULE_NAME="alda-rb" />
272
- </component>
273
- </project>