musicality 0.11.1 → 0.12.0

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.
Files changed (124) hide show
  1. checksums.yaml +5 -5
  2. data/.coveralls.yml +1 -0
  3. data/.ruby-version +1 -1
  4. data/.travis.yml +4 -0
  5. data/ChangeLog.md +11 -0
  6. data/README.md +3 -0
  7. data/Rakefile +11 -3
  8. data/lib/musicality/composition/model/rhythm.rb +33 -0
  9. data/lib/musicality/composition/model/rhythm_class.rb +30 -0
  10. data/lib/musicality/composition/sequencing/drum_machine/drum_kit.rb +18 -0
  11. data/lib/musicality/composition/sequencing/drum_machine/drum_machine.rb +59 -0
  12. data/lib/musicality/composition/sequencing/drum_machine/drum_parts.rb +21 -0
  13. data/lib/musicality/composition/sequencing/drum_machine/drum_pattern.rb +66 -0
  14. data/lib/musicality/composition/sequencing/drum_machine/drum_patterns/pop_drum_patterns.rb +146 -0
  15. data/lib/musicality/composition/sequencing/note_array.rb +33 -0
  16. data/lib/musicality/composition/sequencing/note_fifo.rb +73 -0
  17. data/lib/musicality/composition/sequencing/sequenceable.rb +9 -0
  18. data/lib/musicality/composition/sequencing/sequencer.rb +35 -0
  19. data/lib/musicality/errors.rb +2 -2
  20. data/lib/musicality/notation/model/dynamics.rb +2 -2
  21. data/lib/musicality/notation/model/key.rb +42 -91
  22. data/lib/musicality/notation/model/keys.rb +35 -34
  23. data/lib/musicality/notation/model/note.rb +31 -9
  24. data/lib/musicality/notation/model/pitch.rb +2 -2
  25. data/lib/musicality/notation/parsing/convenience_methods.rb +23 -12
  26. data/lib/musicality/notation/parsing/duration_parsing.rb +3 -3
  27. data/lib/musicality/notation/parsing/key_parsing.rb +150 -0
  28. data/lib/musicality/notation/parsing/key_parsing.treetop +37 -0
  29. data/lib/musicality/notation/parsing/meter_parsing.rb +3 -3
  30. data/lib/musicality/notation/parsing/numbers/nonnegative_float_parsing.rb +3 -1
  31. data/lib/musicality/notation/parsing/numbers/nonnegative_integer_parsing.rb +1 -0
  32. data/lib/musicality/notation/parsing/numbers/nonnegative_rational_parsing.rb +1 -1
  33. data/lib/musicality/notation/parsing/numbers/positive_float_parsing.rb +4 -1
  34. data/lib/musicality/notation/parsing/numbers/positive_rational_parsing.rb +1 -1
  35. data/lib/musicality/notation/parsing/parseable.rb +13 -17
  36. data/lib/musicality/notation/parsing/pitch_parsing.rb +7 -0
  37. data/lib/musicality/notation/parsing/segment_parsing.rb +3 -0
  38. data/lib/musicality/performance/conversion/note_sequence_extractor.rb +82 -134
  39. data/lib/musicality/performance/model/note_sequence.rb +22 -3
  40. data/lib/musicality/performance/supercollider/performer.rb +2 -2
  41. data/lib/musicality/performance/supercollider/sc_drum_kits.rb +29 -0
  42. data/lib/musicality/performance/supercollider/synthdefs/bass.rb +211 -0
  43. data/lib/musicality/performance/supercollider/synthdefs/claps.rb +80 -0
  44. data/lib/musicality/performance/supercollider/synthdefs/cymbals.rb +57 -0
  45. data/lib/musicality/performance/supercollider/synthdefs/hihats.rb +67 -0
  46. data/lib/musicality/performance/supercollider/synthdefs/kicks.rb +158 -0
  47. data/lib/musicality/performance/supercollider/synthdefs/mario.rb +49 -0
  48. data/lib/musicality/performance/supercollider/{synthdefs.rb → synthdefs/other.rb} +0 -767
  49. data/lib/musicality/performance/supercollider/synthdefs/pianos.rb +46 -0
  50. data/lib/musicality/performance/supercollider/synthdefs/snares.rb +169 -0
  51. data/lib/musicality/performance/supercollider/synthdefs/toms.rb +25 -0
  52. data/lib/musicality/performance/supercollider/synthdefs/volume.rb +20 -0
  53. data/lib/musicality/pitch_class.rb +1 -1
  54. data/lib/musicality/pitch_classes.rb +3 -5
  55. data/lib/musicality/version.rb +1 -1
  56. data/lib/musicality.rb +25 -1
  57. data/musicality.gemspec +3 -2
  58. data/spec/composition/convenience_methods_spec.rb +8 -8
  59. data/spec/composition/generation/random_rhythm_generator_spec.rb +5 -5
  60. data/spec/composition/model/pitch_class_spec.rb +22 -16
  61. data/spec/composition/model/pitch_classes_spec.rb +5 -5
  62. data/spec/composition/model/rhythm_class_spec.rb +42 -0
  63. data/spec/composition/model/rhythm_spec.rb +43 -0
  64. data/spec/composition/model/scale_class_spec.rb +26 -26
  65. data/spec/composition/model/scale_spec.rb +38 -38
  66. data/spec/composition/sequencing/drum_machine/drum_machine_spec.rb +67 -0
  67. data/spec/composition/sequencing/drum_machine/drum_pattern_spec.rb +58 -0
  68. data/spec/composition/sequencing/note_array_spec.rb +94 -0
  69. data/spec/composition/sequencing/note_fifo_spec.rb +183 -0
  70. data/spec/composition/sequencing/sequencer_spec.rb +76 -0
  71. data/spec/composition/util/adding_sequence_spec.rb +33 -33
  72. data/spec/composition/util/compound_sequence_spec.rb +6 -6
  73. data/spec/composition/util/note_generation_spec.rb +34 -34
  74. data/spec/composition/util/probabilities_spec.rb +7 -7
  75. data/spec/composition/util/random_sampler_spec.rb +3 -3
  76. data/spec/composition/util/repeating_sequence_spec.rb +28 -28
  77. data/spec/musicality_spec.rb +1 -1
  78. data/spec/notation/conversion/change_conversion_spec.rb +87 -87
  79. data/spec/notation/conversion/note_time_converter_spec.rb +22 -22
  80. data/spec/notation/conversion/score_conversion_spec.rb +1 -1
  81. data/spec/notation/conversion/score_converter_spec.rb +31 -31
  82. data/spec/notation/conversion/tempo_conversion_spec.rb +11 -11
  83. data/spec/notation/model/change_spec.rb +80 -80
  84. data/spec/notation/model/key_spec.rb +135 -69
  85. data/spec/notation/model/link_spec.rb +27 -27
  86. data/spec/notation/model/meter_spec.rb +28 -28
  87. data/spec/notation/model/note_spec.rb +68 -47
  88. data/spec/notation/model/part_spec.rb +19 -19
  89. data/spec/notation/model/pitch_spec.rb +69 -68
  90. data/spec/notation/model/score_spec.rb +50 -47
  91. data/spec/notation/parsing/articulation_parsing_spec.rb +4 -4
  92. data/spec/notation/parsing/convenience_methods_spec.rb +49 -10
  93. data/spec/notation/parsing/duration_nodes_spec.rb +13 -13
  94. data/spec/notation/parsing/duration_parsing_spec.rb +10 -10
  95. data/spec/notation/parsing/key_parsing_spec.rb +19 -0
  96. data/spec/notation/parsing/link_nodes_spec.rb +7 -7
  97. data/spec/notation/parsing/link_parsing_spec.rb +4 -4
  98. data/spec/notation/parsing/meter_parsing_spec.rb +5 -5
  99. data/spec/notation/parsing/note_node_spec.rb +19 -19
  100. data/spec/notation/parsing/note_parsing_spec.rb +4 -4
  101. data/spec/notation/parsing/numbers/nonnegative_float_spec.rb +8 -8
  102. data/spec/notation/parsing/numbers/nonnegative_integer_spec.rb +2 -2
  103. data/spec/notation/parsing/numbers/nonnegative_rational_spec.rb +1 -1
  104. data/spec/notation/parsing/numbers/positive_float_spec.rb +8 -8
  105. data/spec/notation/parsing/numbers/positive_integer_spec.rb +6 -6
  106. data/spec/notation/parsing/numbers/positive_rational_spec.rb +6 -6
  107. data/spec/notation/parsing/pitch_node_spec.rb +7 -7
  108. data/spec/notation/parsing/pitch_parsing_spec.rb +2 -2
  109. data/spec/notation/parsing/segment_parsing_spec.rb +3 -3
  110. data/spec/notation/util/function_spec.rb +15 -15
  111. data/spec/notation/util/transition_spec.rb +12 -12
  112. data/spec/notation/util/value_computer_spec.rb +35 -36
  113. data/spec/performance/conversion/glissando_converter_spec.rb +24 -24
  114. data/spec/performance/conversion/note_sequence_extractor_spec.rb +39 -39
  115. data/spec/performance/conversion/portamento_converter_spec.rb +23 -23
  116. data/spec/performance/midi/midi_util_spec.rb +41 -41
  117. data/spec/performance/midi/part_sequencer_spec.rb +10 -10
  118. data/spec/performance/midi/score_sequencer_spec.rb +15 -15
  119. data/spec/performance/midi/score_sequencing_spec.rb +2 -2
  120. data/spec/performance/util/optimization_spec.rb +9 -9
  121. data/spec/printing/note_engraving_spec.rb +16 -16
  122. data/spec/printing/score_engraver_spec.rb +5 -5
  123. data/spec/spec_helper.rb +5 -0
  124. metadata +85 -30
@@ -4,39 +4,39 @@ describe Change::Immediate do
4
4
  describe '#offsets' do
5
5
  it 'should return array with just the given base offset' do
6
6
  c = Change::Immediate.new(12)
7
- c.offsets(44).should eq([44])
7
+ expect(c.offsets(44)).to eq([44])
8
8
  end
9
9
  end
10
-
10
+
11
11
  describe '#remap' do
12
12
  it 'should return a clone of the change' do
13
13
  c = Change::Immediate.new(12)
14
14
  c2 = c.remap(1,{})
15
- c2.should eq(c)
16
- c2.should_not be c
15
+ expect(c2).to eq(c)
16
+ expect(c2).to_not be c
17
17
  end
18
18
  end
19
-
19
+
20
20
  describe '#to_transition' do
21
21
  before :all do
22
22
  @ch = Change::Immediate.new(20)
23
23
  @off = 0
24
24
  @f = @ch.to_transition(@off,0)
25
25
  end
26
-
26
+
27
27
  it 'should return a peicewise function' do
28
- @f.should be_a Function::Piecewise
28
+ expect(@f).to be_a Function::Piecewise
29
29
  end
30
-
30
+
31
31
  it 'should return a function defined from base offset to DOMAIN_MAX' do
32
- @f.domain_include?(@off).should be true
33
- @f.domain_include?(Function::DOMAIN_MAX).should be true
32
+ expect(@f.domain_include?(@off)).to be true
33
+ expect(@f.domain_include?(Function::DOMAIN_MAX)).to be true
34
34
  end
35
-
35
+
36
36
  it 'should return change value from base offset onward' do
37
- @f.at(@off).should eq(@ch.end_value)
38
- @f.at(@off+1).should eq(@ch.end_value)
39
- @f.at(@off+1000).should eq(@ch.end_value)
37
+ expect(@f.at(@off)).to eq(@ch.end_value)
38
+ expect(@f.at(@off+1)).to eq(@ch.end_value)
39
+ expect(@f.at(@off+1000)).to eq(@ch.end_value)
40
40
  end
41
41
  end
42
42
  end
@@ -46,41 +46,41 @@ describe Change::Gradual do
46
46
  @change = Change::Gradual.linear(100,1.5)
47
47
  @base = 25.5
48
48
  end
49
-
49
+
50
50
  describe '#offsets' do
51
51
  before :all do
52
52
  @offsets = @change.offsets(@base)
53
53
  end
54
-
54
+
55
55
  it 'should return array with 2 elements' do
56
- @offsets.size.should eq(2)
56
+ expect(@offsets.size).to eq(2)
57
57
  end
58
-
58
+
59
59
  it 'should include the given base offset' do
60
- @offsets.should include(@base)
60
+ expect(@offsets).to include(@base)
61
61
  end
62
-
62
+
63
63
  it 'should include the base offset + duration' do
64
- @offsets.should include(@base + @change.duration)
64
+ expect(@offsets).to include(@base + @change.duration)
65
65
  end
66
66
  end
67
-
67
+
68
68
  describe '#remap' do
69
69
  before :all do
70
70
  @c2 = @change.remap(@base, @base => 3, (@base + @change.duration) => 5)
71
71
  end
72
-
72
+
73
73
  it 'should return a new Gradual' do
74
- @c2.should be_a(Change::Gradual)
75
- @c2.should_not be(@change)
74
+ expect(@c2).to be_a(Change::Gradual)
75
+ expect(@c2).to_not be(@change)
76
76
  end
77
-
77
+
78
78
  it 'should keep end value, and change duration based on given offset map' do
79
- @c2.end_value.should eq(@change.end_value)
80
- @c2.duration.should eq(2)
79
+ expect(@c2.end_value).to eq(@change.end_value)
80
+ expect(@c2.duration).to eq(2)
81
81
  end
82
82
  end
83
-
83
+
84
84
  describe '#to_transition' do
85
85
  { 'linear transition' => Change::Gradual.linear(130,20),
86
86
  'sigmoid transition' => Change::Gradual.sigmoid(130,20)
@@ -91,43 +91,43 @@ describe Change::Gradual do
91
91
  @start_value = 50
92
92
  @func = @change.to_transition(@offset, @start_value)
93
93
  end
94
-
94
+
95
95
  it 'should return a piecewise function' do
96
- @func.should be_a Function::Piecewise
96
+ expect(@func).to be_a Function::Piecewise
97
97
  end
98
-
98
+
99
99
  it 'should return a function that is undefined before base offset' do
100
- @func.domain_include?(@offset-1e-5).should be false
101
- @func.domain_include?(@offset-1e5).should be false
100
+ expect(@func.domain_include?(@offset-1e-5)).to be false
101
+ expect(@func.domain_include?(@offset-1e5)).to be false
102
102
  end
103
-
103
+
104
104
  it 'should return a function defined from base offset to DOMAIN_MAX' do
105
- @func.domain_include?(@offset).should be true
106
- @func.domain_include?(@offset + @change.duration/2.0).should be true
107
- @func.domain_include?(@offset + @change.duration).should be true
108
- @func.domain_include?(@offset + @change.duration + 1).should be true
109
- @func.domain_include?(Function::DOMAIN_MAX).should be true
105
+ expect(@func.domain_include?(@offset)).to be true
106
+ expect(@func.domain_include?(@offset + @change.duration/2.0)).to be true
107
+ expect(@func.domain_include?(@offset + @change.duration)).to be true
108
+ expect(@func.domain_include?(@offset + @change.duration + 1)).to be true
109
+ expect(@func.domain_include?(Function::DOMAIN_MAX)).to be true
110
110
  end
111
-
111
+
112
112
  it 'should make function that evaluates to start_value at start offset' do
113
- @func.at(@offset).should eq(@start_value)
113
+ expect(@func.at(@offset)).to eq(@start_value)
114
114
  end
115
-
115
+
116
116
  it 'should make function that evaluates to end_value at start offset + duration' do
117
- @func.at(@offset + @change.duration).should eq(@change.end_value)
117
+ expect(@func.at(@offset + @change.duration)).to eq(@change.end_value)
118
118
  end
119
-
119
+
120
120
  it 'should make function that evaluates to 1/2 between start/end value at 1/2 between start/end offset' do
121
121
  tgt = (@change.end_value + @start_value) / 2.0
122
- @func.at(@offset + @change.duration/2.0).should be_within(1e-5).of(tgt)
122
+ expect(@func.at(@offset + @change.duration/2.0)).to be_within(1e-5).of(tgt)
123
123
  end
124
-
124
+
125
125
  it 'should make function that evaluates to end value after change has elapsed' do
126
- @func.at(@offset + @change.duration + 1).should eq(@change.end_value)
126
+ expect(@func.at(@offset + @change.duration + 1)).to eq(@change.end_value)
127
127
  end
128
128
  end
129
129
  end
130
-
130
+
131
131
  context 'start value already defined in change' do
132
132
  { 'linear transition' => Change::Gradual.linear(130,20,start_value:80),
133
133
  'sigmoid transition' => Change::Gradual.sigmoid(130,20,start_value:80)
@@ -137,7 +137,7 @@ describe Change::Gradual do
137
137
  offset = 3
138
138
  start_value = 50
139
139
  func = change.to_transition(offset, start_value)
140
- func.at(offset).should eq(change.start_value)
140
+ expect(func.at(offset)).to eq(change.start_value)
141
141
  end
142
142
  end
143
143
  end
@@ -150,53 +150,53 @@ describe Change::Gradual::Trimmed do
150
150
  @change = Change::Gradual.linear(100,1.5.to_r).to_trimmed(0.5.to_r,0.5.to_r)
151
151
  @base = 25.5.to_r
152
152
  end
153
-
153
+
154
154
  describe '#offsets' do
155
155
  before :all do
156
156
  @offsets = @change.offsets(@base)
157
157
  end
158
-
158
+
159
159
  it 'should return array with 2 elements' do
160
- @offsets.size.should eq(4)
160
+ expect(@offsets.size).to eq(4)
161
161
  end
162
-
162
+
163
163
  it 'should include the given base offset' do
164
- @offsets.should include(@base)
164
+ expect(@offsets).to include(@base)
165
165
  end
166
-
166
+
167
167
  it 'should include the base offset - preceding' do
168
- @offsets.should include(@base - @change.preceding)
168
+ expect(@offsets).to include(@base - @change.preceding)
169
169
  end
170
-
170
+
171
171
  it 'should include the base offset + remaining' do
172
- @offsets.should include(@base + @change.remaining)
172
+ expect(@offsets).to include(@base + @change.remaining)
173
173
  end
174
-
174
+
175
175
  it 'should include the base offset - preceding + duration' do
176
- @offsets.should include(@base - @change.preceding + @change.duration)
176
+ expect(@offsets).to include(@base - @change.preceding + @change.duration)
177
177
  end
178
178
  end
179
-
179
+
180
180
  describe '#remap' do
181
181
  before :all do
182
182
  @offsets = { @base => 3, (@base - @change.preceding) => 0,
183
183
  (@base + @change.remaining) => 5, (@base - @change.preceding + @change.duration) => 7 }
184
184
  @c2 = @change.remap(@base, @offsets)
185
185
  end
186
-
186
+
187
187
  it 'should return a new Gradual::Trimmed' do
188
- @c2.should be_a(Change::Gradual::Trimmed)
189
- @c2.should_not be(@change)
188
+ expect(@c2).to be_a(Change::Gradual::Trimmed)
189
+ expect(@c2).to_not be(@change)
190
190
  end
191
-
191
+
192
192
  it 'should keep end value, and change duration based on given offset map' do
193
- @c2.end_value.should eq(@change.end_value)
194
- @c2.duration.should eq(7)
195
- @c2.preceding.should eq(3)
196
- @c2.remaining.should eq(2)
193
+ expect(@c2.end_value).to eq(@change.end_value)
194
+ expect(@c2.duration).to eq(7)
195
+ expect(@c2.preceding).to eq(3)
196
+ expect(@c2.remaining).to eq(2)
197
197
  end
198
198
  end
199
-
199
+
200
200
  describe '#to_transition' do
201
201
  Change::Gradual::TRANSITIONS.each do |transition|
202
202
  context "#{transition} transition" do
@@ -207,38 +207,38 @@ describe Change::Gradual::Trimmed do
207
207
  untrimmed_offset = 0
208
208
  untrimmed_start_val = 50
209
209
  @untrimmed_trans = untrimmed.to_transition(untrimmed_offset, untrimmed_start_val)
210
-
210
+
211
211
  trimmed = untrimmed.trim(5,3)
212
212
  trimmed_offset = untrimmed_offset + trimmed.preceding
213
213
  trimmed_start_val = @untrimmed_trans.at(trimmed_offset)
214
214
  @trimmed_trans = trimmed.to_transition(trimmed_offset, trimmed_start_val)
215
-
215
+
216
216
  @xrange = trimmed_offset..(trimmed_offset + trimmed.remaining)
217
217
  end
218
-
218
+
219
219
  it 'should produce function that is undefined before trimmed domain' do
220
- @trimmed_trans.domain_include?(@xrange.first-1).should be false
220
+ expect(@trimmed_trans.domain_include?(@xrange.first-1)).to be false
221
221
  end
222
-
222
+
223
223
  it 'should produce function that is defined for trimmed domain' do
224
- @trimmed_trans.domain_include?(@xrange.first).should be true
225
- @trimmed_trans.domain_include?((@xrange.first + @xrange.last)/2.0).should be true
226
- @trimmed_trans.domain_include?(@xrange.last).should be true
224
+ expect(@trimmed_trans.domain_include?(@xrange.first)).to be true
225
+ expect(@trimmed_trans.domain_include?((@xrange.first + @xrange.last)/2.0)).to be true
226
+ expect(@trimmed_trans.domain_include?(@xrange.last)).to be true
227
227
  end
228
-
228
+
229
229
  it 'should produce function that is defined after trimmed domain' do
230
- @trimmed_trans.domain_include?(@xrange.last+1).should be true
231
- @trimmed_trans.domain_include?(Function::DOMAIN_MAX).should be true
230
+ expect(@trimmed_trans.domain_include?(@xrange.last+1)).to be true
231
+ expect(@trimmed_trans.domain_include?(Function::DOMAIN_MAX)).to be true
232
232
  end
233
-
233
+
234
234
  it 'should produce function that stays at end value after transition' do
235
- @trimmed_trans.at(@xrange.last + 1).should eq(@trimmed_trans.at(@xrange.last))
235
+ expect(@trimmed_trans.at(@xrange.last + 1)).to eq(@trimmed_trans.at(@xrange.last))
236
236
  end
237
-
237
+
238
238
  it 'should produce function that samples same as equivalent untrimmed' do
239
239
  srate = 50
240
- @trimmed_trans.sample(@xrange, srate).should eq(@untrimmed_trans.sample(@xrange, srate))
241
- end
240
+ expect(@trimmed_trans.sample(@xrange, srate)).to eq(@untrimmed_trans.sample(@xrange, srate))
241
+ end
242
242
  end
243
243
  end
244
244
  end
@@ -9,11 +9,11 @@ describe NoteTimeConverter::Tempo do
9
9
  converter = NoteTimeConverter.new(tc,bdc,200)
10
10
  (0..3.2).step(0.2).each do |offset|
11
11
  nps = Tempo::BPM.to_nps(tc.at(offset), bdc.at(offset))
12
- converter.notes_per_second_at(offset).should eq(nps)
12
+ expect(converter.notes_per_second_at(offset)).to eq(nps)
13
13
  end
14
14
  end
15
15
  end
16
-
16
+
17
17
  describe "#time_elapsed" do
18
18
  context "constant tempo, beat duration" do
19
19
  before :each do
@@ -22,17 +22,17 @@ describe NoteTimeConverter::Tempo do
22
22
  sample_rate = 48
23
23
  @converter = NoteTimeConverter.new(@tempo_computer, @bdur_computer, sample_rate)
24
24
  end
25
-
25
+
26
26
  it "should return a time of zero when note end is zero." do
27
- @converter.time_elapsed(0, 0).should eq(0)
27
+ expect(@converter.time_elapsed(0, 0)).to eq(0)
28
28
  end
29
-
29
+
30
30
  it "should return a time of 1 second when note end is equal to the initial notes-per-second" do
31
31
  note_end = @converter.notes_per_second_at(0)
32
- @converter.time_elapsed(0, note_end).should eq(1)
32
+ expect(@converter.time_elapsed(0, note_end)).to eq(1)
33
33
  end
34
34
  end
35
-
35
+
36
36
  context "linear tempo-change, constant beat duration" do
37
37
  before :each do
38
38
  @tempo_computer = ValueComputer.new(120, 1 => Change::Gradual.linear(60, 1))
@@ -40,43 +40,43 @@ describe NoteTimeConverter::Tempo do
40
40
  sample_rate = 200
41
41
  @converter = NoteTimeConverter.new(@tempo_computer, @bdur_computer, sample_rate)
42
42
  end
43
-
43
+
44
44
  it "should return a time of zero when note end is zero." do
45
- @converter.time_elapsed(0.0, 0.0).should eq(0.0)
45
+ expect(@converter.time_elapsed(0.0, 0.0)).to eq(0.0)
46
46
  end
47
-
47
+
48
48
  it "should return a time of 3 sec during a 1-note long transition from 120bpm to 60bpm" do
49
- @converter.notes_per_second_at(1.0).should eq(0.5)
50
- @converter.notes_per_second_at(2.0).should eq(0.25)
51
-
52
- @converter.time_elapsed(1.0, 2.0).should be_within(0.05).of(2.77)
49
+ expect(@converter.notes_per_second_at(1.0)).to eq(0.5)
50
+ expect(@converter.notes_per_second_at(2.0)).to eq(0.25)
51
+
52
+ expect(@converter.time_elapsed(1.0, 2.0)).to be_within(0.05).of(2.77)
53
53
  end
54
-
54
+
55
55
  end
56
56
  end
57
-
57
+
58
58
  describe "#note_time_map" do
59
59
  context "constant tempo, beat duration" do
60
- before :each do
60
+ before :each do
61
61
  @tempo_computer = ValueComputer.new 120
62
62
  @bdur_computer = ValueComputer.new Rational(1,4)
63
63
  sample_rate = 4800
64
64
  @converter = NoteTimeConverter.new(@tempo_computer, @bdur_computer, sample_rate)
65
65
  end
66
-
66
+
67
67
  it "should map offset 0.0 to time 0.0" do
68
68
  map = @converter.note_time_map [0.0]
69
- map[0.0].should eq(0.0)
69
+ expect(map[0.0]).to eq(0.0)
70
70
  end
71
71
 
72
72
  it "should map offset 0.25 to time 0.5" do
73
73
  map = @converter.note_time_map [0.0, 0.25]
74
- map[0.25].should be_within(0.01).of(0.5)
74
+ expect(map[0.25]).to be_within(0.01).of(0.5)
75
75
  end
76
-
76
+
77
77
  it "should map offset 1.0 to time 2.0" do
78
78
  map = @converter.note_time_map [0.0, 1.0]
79
- map[1.0].should be_within(0.01).of(2.0)
79
+ expect(map[1.0]).to be_within(0.01).of(2.0)
80
80
  end
81
81
  end
82
82
  end
@@ -36,7 +36,7 @@ describe Score::Tempo do
36
36
  it 'should use ScoreConverter#convert_score' do
37
37
  nscore1 = @score.to_timed(200)
38
38
  nscore2 = ScoreConverter.new(@score,200).convert_score
39
- nscore1.should eq(nscore2)
39
+ expect(nscore1).to eq(nscore2)
40
40
  end
41
41
  end
42
42
  end
@@ -21,32 +21,32 @@ describe ScoreConverter do
21
21
 
22
22
  it 'should return Hash with original part names' do
23
23
  parts = ScoreConverter.new(@score,200).convert_parts
24
- parts.should be_a Hash
25
- parts.keys.sort.should eq(@score.parts.keys.sort)
24
+ expect(parts).to be_a Hash
25
+ expect(parts.keys.sort).to eq(@score.parts.keys.sort)
26
26
  end
27
27
 
28
28
  it 'should convert part dynamic change offsets from note-based to time-based' do
29
29
  parts = ScoreConverter.new(@score,200).convert_parts
30
- parts.should have_key("simple")
30
+ expect(parts).to have_key("simple")
31
31
  part = parts["simple"]
32
- part.dynamic_changes.keys.sort.should eq([2,6])
32
+ expect(part.dynamic_changes.keys.sort).to eq([2,6])
33
33
  change = part.dynamic_changes[2.0]
34
- change.end_value.should eq(@changeA.end_value)
34
+ expect(change.end_value).to eq(@changeA.end_value)
35
35
  change = part.dynamic_changes[6.0]
36
- change.end_value.should eq(@changeB.end_value)
37
- change.duration.should eq(4)
36
+ expect(change.end_value).to eq(@changeB.end_value)
37
+ expect(change.duration).to eq(4)
38
38
 
39
39
  @score.start_meter = THREE_FOUR
40
40
  parts = ScoreConverter.new(@score,200).convert_parts
41
- parts.should have_key("simple")
41
+ expect(parts).to have_key("simple")
42
42
  part = parts["simple"]
43
- part.dynamic_changes.keys.sort.should eq([2,6])
43
+ expect(part.dynamic_changes.keys.sort).to eq([2,6])
44
44
  change = part.dynamic_changes[2.0]
45
- change.end_value.should eq(@changeA.end_value)
46
- change.duration.should eq(0)
45
+ expect(change.end_value).to eq(@changeA.end_value)
46
+ expect(change.duration).to eq(0)
47
47
  change = part.dynamic_changes[6.0]
48
- change.end_value.should eq(@changeB.end_value)
49
- change.duration.should eq(4)
48
+ expect(change.end_value).to eq(@changeB.end_value)
49
+ expect(change.duration).to eq(4)
50
50
  end
51
51
 
52
52
  context 'gradual changes with positive elapsed and/or remaining' do
@@ -61,9 +61,9 @@ describe ScoreConverter do
61
61
  parts = converter.convert_parts
62
62
  dcs = parts["abc"].dynamic_changes
63
63
 
64
- dcs.keys.should eq([4, 14])
65
- dcs[4.0].should eq(Change::Gradual.linear(Dynamics::F,4).to_trimmed(2,6))
66
- dcs[14.0].should eq(Change::Gradual.linear(Dynamics::F,2).to_trimmed(8,10))
64
+ expect(dcs.keys).to eq([4, 14])
65
+ expect(dcs[4.0]).to eq(Change::Gradual.linear(Dynamics::F,4).to_trimmed(2,6))
66
+ expect(dcs[14.0]).to eq(Change::Gradual.linear(Dynamics::F,2).to_trimmed(8,10))
67
67
  end
68
68
  end
69
69
  end
@@ -77,25 +77,25 @@ describe ScoreConverter do
77
77
 
78
78
  it 'shuld return array with same size' do
79
79
  prog = @converter.convert_program
80
- prog.should be_a Array
81
- prog.size.should eq(@score.program.size)
80
+ expect(prog).to be_a Array
81
+ expect(prog.size).to eq(@score.program.size)
82
82
  end
83
83
 
84
84
  it 'should convert program segments offsets from note-based to time-based' do
85
85
  prog = ScoreConverter.new(@score,200).convert_program
86
- prog.size.should eq(2)
87
- prog[0].first.should eq(0)
88
- prog[0].last.should eq(8)
89
- prog[1].first.should eq(4)
90
- prog[1].last.should eq(10)
86
+ expect(prog.size).to eq(2)
87
+ expect(prog[0].first).to eq(0)
88
+ expect(prog[0].last).to eq(8)
89
+ expect(prog[1].first).to eq(4)
90
+ expect(prog[1].last).to eq(10)
91
91
 
92
92
  @score.start_meter = THREE_FOUR
93
93
  prog = ScoreConverter.new(@score,200).convert_program
94
- prog.size.should eq(2)
95
- prog[0].first.should eq(0)
96
- prog[0].last.should eq(8)
97
- prog[1].first.should eq(4)
98
- prog[1].last.should eq(10)
94
+ expect(prog.size).to eq(2)
95
+ expect(prog[0].first).to eq(0)
96
+ expect(prog[0].last).to eq(8)
97
+ expect(prog[1].first).to eq(4)
98
+ expect(prog[1].last).to eq(10)
99
99
  end
100
100
  end
101
101
 
@@ -103,7 +103,7 @@ describe ScoreConverter do
103
103
  it 'should return a timed score' do
104
104
  score = Score::Tempo.new(120, start_meter: FOUR_FOUR)
105
105
  converter = ScoreConverter.new(score,200)
106
- converter.convert_score.should be_a Score::Timed
106
+ expect(converter.convert_score).to be_a Score::Timed
107
107
  end
108
108
 
109
109
  it 'should use output from convert_program' do
@@ -111,7 +111,7 @@ describe ScoreConverter do
111
111
  score = Score::Tempo.new(120, start_meter: FOUR_FOUR, program: prog)
112
112
  converter = ScoreConverter.new(score,200)
113
113
  nscore = converter.convert_score
114
- nscore.program.should eq(converter.convert_program)
114
+ expect(nscore.program).to eq(converter.convert_program)
115
115
  end
116
116
 
117
117
  it 'should use output from convert_parts' do
@@ -122,7 +122,7 @@ describe ScoreConverter do
122
122
  )
123
123
  converter = ScoreConverter.new(score,200)
124
124
  nscore = converter.convert_score
125
- nscore.parts.should eq(converter.convert_parts)
125
+ expect(nscore.parts).to eq(converter.convert_parts)
126
126
  end
127
127
  end
128
128
  end
@@ -4,17 +4,17 @@ describe Tempo::QNPM do
4
4
  before :all do
5
5
  @tempo = 60
6
6
  end
7
-
7
+
8
8
  describe '#to_nps' do
9
9
  it 'should change tempo value to be 1/240th' do
10
- Tempo::QNPM.to_nps(@tempo).should eq(Rational(1,4))
10
+ expect(Tempo::QNPM.to_nps(@tempo)).to eq(Rational(1,4))
11
11
  end
12
12
  end
13
-
13
+
14
14
  describe '#to_bpm' do
15
15
  it 'should divide tempo value by (4*beatdur)' do
16
- Tempo::QNPM.to_bpm(@tempo, Rational(1,4)).should eq(60)
17
- Tempo::QNPM.to_bpm(@tempo, Rational(1,2)).should eq(30)
16
+ expect(Tempo::QNPM.to_bpm(@tempo, Rational(1,4))).to eq(60)
17
+ expect(Tempo::QNPM.to_bpm(@tempo, Rational(1,2))).to eq(30)
18
18
  end
19
19
  end
20
20
  end
@@ -23,18 +23,18 @@ describe Tempo::BPM do
23
23
  before :all do
24
24
  @tempo = 60
25
25
  end
26
-
26
+
27
27
  describe '#to_nps' do
28
28
  it 'should multiply tempo value by beatdur/60' do
29
- Tempo::BPM.to_nps(@tempo,Rational(1,4)).should eq(Rational(1,4))
29
+ expect(Tempo::BPM.to_nps(@tempo,Rational(1,4))).to eq(Rational(1,4))
30
30
  end
31
31
  end
32
-
32
+
33
33
  describe '#to_qnpm' do
34
34
  it 'should multiply tempo value by (4*beatdur)' do
35
- Tempo::BPM.to_qnpm(@tempo,Rational(1,8)).should eq(30)
36
- Tempo::BPM.to_qnpm(@tempo,Rational(1,4)).should eq(60)
37
- Tempo::BPM.to_qnpm(@tempo,Rational(1,2)).should eq(120)
35
+ expect(Tempo::BPM.to_qnpm(@tempo,Rational(1,8))).to eq(30)
36
+ expect(Tempo::BPM.to_qnpm(@tempo,Rational(1,4))).to eq(60)
37
+ expect(Tempo::BPM.to_qnpm(@tempo,Rational(1,2))).to eq(120)
38
38
  end
39
39
  end
40
40
  end