motion-music 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/motion-music/version.rb +1 -1
- data/lib/rb-music/version.rb +1 -1
- metadata +2 -70
- data/.gitignore +0 -6
- data/Gemfile +0 -8
- data/Guardfile +0 -6
- data/doc/Gemfile.html +0 -111
- data/doc/Gemfile_lock.html +0 -168
- data/doc/Guardfile.html +0 -111
- data/doc/LICENSE.html +0 -124
- data/doc/Object.html +0 -116
- data/doc/RBMusic.html +0 -164
- data/doc/RBMusic/Interval.html +0 -440
- data/doc/RBMusic/Note.html +0 -620
- data/doc/RBMusic/NoteSet.html +0 -277
- data/doc/RBMusic/Scale.html +0 -274
- data/doc/README_md.html +0 -163
- data/doc/created.rid +0 -8
- data/doc/fonts.css +0 -167
- data/doc/fonts/Lato-Light.ttf +0 -0
- data/doc/fonts/Lato-LightItalic.ttf +0 -0
- data/doc/fonts/Lato-Regular.ttf +0 -0
- data/doc/fonts/Lato-RegularItalic.ttf +0 -0
- data/doc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/doc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/doc/images/add.png +0 -0
- data/doc/images/arrow_up.png +0 -0
- data/doc/images/brick.png +0 -0
- data/doc/images/brick_link.png +0 -0
- data/doc/images/bug.png +0 -0
- data/doc/images/bullet_black.png +0 -0
- data/doc/images/bullet_toggle_minus.png +0 -0
- data/doc/images/bullet_toggle_plus.png +0 -0
- data/doc/images/date.png +0 -0
- data/doc/images/delete.png +0 -0
- data/doc/images/find.png +0 -0
- data/doc/images/loadingAnimation.gif +0 -0
- data/doc/images/macFFBgHack.png +0 -0
- data/doc/images/package.png +0 -0
- data/doc/images/page_green.png +0 -0
- data/doc/images/page_white_text.png +0 -0
- data/doc/images/page_white_width.png +0 -0
- data/doc/images/plugin.png +0 -0
- data/doc/images/ruby.png +0 -0
- data/doc/images/tag_blue.png +0 -0
- data/doc/images/tag_green.png +0 -0
- data/doc/images/transparent.png +0 -0
- data/doc/images/wrench.png +0 -0
- data/doc/images/wrench_orange.png +0 -0
- data/doc/images/zoom.png +0 -0
- data/doc/index.html +0 -93
- data/doc/js/darkfish.js +0 -140
- data/doc/js/jquery.js +0 -18
- data/doc/js/navigation.js +0 -142
- data/doc/js/search.js +0 -109
- data/doc/js/search_index.js +0 -1
- data/doc/js/searcher.js +0 -228
- data/doc/projections_json.html +0 -115
- data/doc/rb-music_gemspec.html +0 -132
- data/doc/rdoc.css +0 -580
- data/doc/table_of_contents.html +0 -192
- data/lib/rb-music.rb +0 -8
- data/motion-music.gemspec +0 -20
- data/projections.json +0 -12
- data/rb-music.gemspec +0 -29
- data/spec/rb-music/constants_spec.rb +0 -27
- data/spec/rb-music/interval_spec.rb +0 -90
- data/spec/rb-music/note_set_spec.rb +0 -191
- data/spec/rb-music/note_spec.rb +0 -318
- data/spec/rb-music/scale_spec.rb +0 -88
- data/spec/spec_helper.rb +0 -14
data/doc/table_of_contents.html
DELETED
@@ -1,192 +0,0 @@
|
|
1
|
-
<!DOCTYPE html>
|
2
|
-
|
3
|
-
<html>
|
4
|
-
<head>
|
5
|
-
<meta charset="UTF-8">
|
6
|
-
|
7
|
-
<title>Table of Contents - RDoc Documentation</title>
|
8
|
-
|
9
|
-
<link href="./fonts.css" rel="stylesheet">
|
10
|
-
<link href="./rdoc.css" rel="stylesheet">
|
11
|
-
|
12
|
-
<script type="text/javascript">
|
13
|
-
var rdoc_rel_prefix = "./";
|
14
|
-
</script>
|
15
|
-
|
16
|
-
<script src="./js/jquery.js"></script>
|
17
|
-
<script src="./js/navigation.js"></script>
|
18
|
-
<script src="./js/search_index.js"></script>
|
19
|
-
<script src="./js/search.js"></script>
|
20
|
-
<script src="./js/searcher.js"></script>
|
21
|
-
<script src="./js/darkfish.js"></script>
|
22
|
-
|
23
|
-
|
24
|
-
<body id="top" class="table-of-contents">
|
25
|
-
<main role="main">
|
26
|
-
<h1 class="class">Table of Contents - RDoc Documentation</h1>
|
27
|
-
|
28
|
-
|
29
|
-
<h2 id="classes">Classes and Modules</h2>
|
30
|
-
<ul>
|
31
|
-
<li class="class">
|
32
|
-
<a href="Object.html">Object</a>
|
33
|
-
</li>
|
34
|
-
<li class="module">
|
35
|
-
<a href="RBMusic.html">RBMusic</a>
|
36
|
-
</li>
|
37
|
-
<li class="class">
|
38
|
-
<a href="RBMusic/Interval.html">RBMusic::Interval</a>
|
39
|
-
</li>
|
40
|
-
<li class="class">
|
41
|
-
<a href="RBMusic/Note.html">RBMusic::Note</a>
|
42
|
-
</li>
|
43
|
-
<li class="class">
|
44
|
-
<a href="RBMusic/NoteSet.html">RBMusic::NoteSet</a>
|
45
|
-
</li>
|
46
|
-
<li class="class">
|
47
|
-
<a href="RBMusic/Scale.html">RBMusic::Scale</a>
|
48
|
-
</li>
|
49
|
-
</ul>
|
50
|
-
|
51
|
-
<h2 id="methods">Methods</h2>
|
52
|
-
<ul>
|
53
|
-
|
54
|
-
<li class="method">
|
55
|
-
<a href="RBMusic/Note.html#method-c-from_latin">::from_latin</a>
|
56
|
-
—
|
57
|
-
<span class="container">RBMusic::Note</span>
|
58
|
-
|
59
|
-
<li class="method">
|
60
|
-
<a href="RBMusic/Interval.html#method-c-from_name">::from_name</a>
|
61
|
-
—
|
62
|
-
<span class="container">RBMusic::Interval</span>
|
63
|
-
|
64
|
-
<li class="method">
|
65
|
-
<a href="RBMusic/Interval.html#method-c-from_semitones">::from_semitones</a>
|
66
|
-
—
|
67
|
-
<span class="container">RBMusic::Interval</span>
|
68
|
-
|
69
|
-
<li class="method">
|
70
|
-
<a href="RBMusic/Interval.html#method-c-from_tones_semitones">::from_tones_semitones</a>
|
71
|
-
—
|
72
|
-
<span class="container">RBMusic::Interval</span>
|
73
|
-
|
74
|
-
<li class="method">
|
75
|
-
<a href="RBMusic/NoteSet.html#method-c-new">::new</a>
|
76
|
-
—
|
77
|
-
<span class="container">RBMusic::NoteSet</span>
|
78
|
-
|
79
|
-
<li class="method">
|
80
|
-
<a href="RBMusic/Scale.html#method-c-new">::new</a>
|
81
|
-
—
|
82
|
-
<span class="container">RBMusic::Scale</span>
|
83
|
-
|
84
|
-
<li class="method">
|
85
|
-
<a href="RBMusic/Interval.html#method-c-new">::new</a>
|
86
|
-
—
|
87
|
-
<span class="container">RBMusic::Interval</span>
|
88
|
-
|
89
|
-
<li class="method">
|
90
|
-
<a href="RBMusic/Note.html#method-c-new">::new</a>
|
91
|
-
—
|
92
|
-
<span class="container">RBMusic::Note</span>
|
93
|
-
|
94
|
-
<li class="method">
|
95
|
-
<a href="RBMusic/Note.html#method-i-3D-3D">#==</a>
|
96
|
-
—
|
97
|
-
<span class="container">RBMusic::Note</span>
|
98
|
-
|
99
|
-
<li class="method">
|
100
|
-
<a href="RBMusic/Note.html#method-i-accidental">#accidental</a>
|
101
|
-
—
|
102
|
-
<span class="container">RBMusic::Note</span>
|
103
|
-
|
104
|
-
<li class="method">
|
105
|
-
<a href="RBMusic/NoteSet.html#method-i-add">#add</a>
|
106
|
-
—
|
107
|
-
<span class="container">RBMusic::NoteSet</span>
|
108
|
-
|
109
|
-
<li class="method">
|
110
|
-
<a href="RBMusic/Interval.html#method-i-add">#add</a>
|
111
|
-
—
|
112
|
-
<span class="container">RBMusic::Interval</span>
|
113
|
-
|
114
|
-
<li class="method">
|
115
|
-
<a href="RBMusic/Note.html#method-i-add">#add</a>
|
116
|
-
—
|
117
|
-
<span class="container">RBMusic::Note</span>
|
118
|
-
|
119
|
-
<li class="method">
|
120
|
-
<a href="RBMusic/Scale.html#method-i-degree_count">#degree_count</a>
|
121
|
-
—
|
122
|
-
<span class="container">RBMusic::Scale</span>
|
123
|
-
|
124
|
-
<li class="method">
|
125
|
-
<a href="RBMusic/Note.html#method-i-enharmonic-3F">#enharmonic?</a>
|
126
|
-
—
|
127
|
-
<span class="container">RBMusic::Note</span>
|
128
|
-
|
129
|
-
<li class="method">
|
130
|
-
<a href="RBMusic/Note.html#method-i-enharmonically_equivalent_to-3F">#enharmonically_equivalent_to?</a>
|
131
|
-
—
|
132
|
-
<span class="container">RBMusic::Note</span>
|
133
|
-
|
134
|
-
<li class="method">
|
135
|
-
<a href="RBMusic/Note.html#method-i-frequency">#frequency</a>
|
136
|
-
—
|
137
|
-
<span class="container">RBMusic::Note</span>
|
138
|
-
|
139
|
-
<li class="method">
|
140
|
-
<a href="RBMusic/Note.html#method-i-latin">#latin</a>
|
141
|
-
—
|
142
|
-
<span class="container">RBMusic::Note</span>
|
143
|
-
|
144
|
-
<li class="method">
|
145
|
-
<a href="RBMusic/Scale.html#method-i-notes_in_range">#notes_in_range</a>
|
146
|
-
—
|
147
|
-
<span class="container">RBMusic::Scale</span>
|
148
|
-
|
149
|
-
<li class="method">
|
150
|
-
<a href="RBMusic/Note.html#method-i-octave">#octave</a>
|
151
|
-
—
|
152
|
-
<span class="container">RBMusic::Note</span>
|
153
|
-
|
154
|
-
<li class="method">
|
155
|
-
<a href="RBMusic/Note.html#method-i-scale">#scale</a>
|
156
|
-
—
|
157
|
-
<span class="container">RBMusic::Note</span>
|
158
|
-
|
159
|
-
<li class="method">
|
160
|
-
<a href="RBMusic/Interval.html#method-i-semitone">#semitone</a>
|
161
|
-
—
|
162
|
-
<span class="container">RBMusic::Interval</span>
|
163
|
-
|
164
|
-
<li class="method">
|
165
|
-
<a href="RBMusic/Interval.html#method-i-subtract">#subtract</a>
|
166
|
-
—
|
167
|
-
<span class="container">RBMusic::Interval</span>
|
168
|
-
|
169
|
-
<li class="method">
|
170
|
-
<a href="RBMusic/Note.html#method-i-subtract">#subtract</a>
|
171
|
-
—
|
172
|
-
<span class="container">RBMusic::Note</span>
|
173
|
-
|
174
|
-
<li class="method">
|
175
|
-
<a href="RBMusic/NoteSet.html#method-i-subtract">#subtract</a>
|
176
|
-
—
|
177
|
-
<span class="container">RBMusic::NoteSet</span>
|
178
|
-
|
179
|
-
<li class="method">
|
180
|
-
<a href="RBMusic/Interval.html#method-i-tone_semitone">#tone_semitone</a>
|
181
|
-
—
|
182
|
-
<span class="container">RBMusic::Interval</span>
|
183
|
-
</ul>
|
184
|
-
</main>
|
185
|
-
|
186
|
-
|
187
|
-
<footer id="validator-badges" role="contentinfo">
|
188
|
-
<p><a href="http://validator.w3.org/check/referer">Validate</a>
|
189
|
-
<p>Generated by <a href="http://rdoc.rubyforge.org">RDoc</a> 4.1.1.
|
190
|
-
<p>Based on <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish</a> by <a href="http://deveiate.org">Michael Granger</a>.
|
191
|
-
</footer>
|
192
|
-
|
data/lib/rb-music.rb
DELETED
data/motion-music.gemspec
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
2
|
-
require "motion-music/version"
|
3
|
-
|
4
|
-
Gem::Specification.new do |s|
|
5
|
-
s.name = "motion-music"
|
6
|
-
s.version = MotionMusic::VERSION
|
7
|
-
s.platform = Gem::Platform::RUBY
|
8
|
-
s.license = "MIT"
|
9
|
-
s.summary = "Music theory library for RubyMotion"
|
10
|
-
s.description = "This gem wraps the rb-music gem to provide RubyMotion classes for working with musical notes, scales and intervals."
|
11
|
-
s.author = "Mark Wise"
|
12
|
-
s.authors = ["Mark Wise"]
|
13
|
-
s.email = ["markmediadude@mgail.comm"]
|
14
|
-
s.files = `git ls-files`.split($\)
|
15
|
-
s.homepage = "https://rubygems.org/mwise/motion-music"
|
16
|
-
|
17
|
-
s.require_paths = ["lib"]
|
18
|
-
|
19
|
-
s.extra_rdoc_files = ['README.md']
|
20
|
-
end
|
data/projections.json
DELETED
data/rb-music.gemspec
DELETED
@@ -1,29 +0,0 @@
|
|
1
|
-
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
2
|
-
require "rb-music/version"
|
3
|
-
|
4
|
-
Gem::Specification.new do |s|
|
5
|
-
s.name = "rb-music"
|
6
|
-
s.version = RBMusic::VERSION
|
7
|
-
s.platform = Gem::Platform::RUBY
|
8
|
-
s.license = "MIT"
|
9
|
-
s.summary = "Music theory library for Ruby"
|
10
|
-
s.description = "This gem provides Ruby classes for working with musical notes, scales and intervals."
|
11
|
-
s.author = "Mark Wise"
|
12
|
-
s.authors = ["Mark Wise"]
|
13
|
-
s.email = ["markmediadude@mgail.comm"]
|
14
|
-
s.files = ["lib/rb-music.rb"]
|
15
|
-
s.homepage = "https://rubygems.org/mwise/rb-music"
|
16
|
-
|
17
|
-
s.require_paths = ["lib"]
|
18
|
-
s.required_ruby_version = ">= 1.8.6"
|
19
|
-
s.files = `git ls-files -- lib/*`.split("\n")
|
20
|
-
s.files += %w[README.md LICENSE]
|
21
|
-
s.test_files = `git ls-files -- spec/*`.split("\n")
|
22
|
-
|
23
|
-
s.extra_rdoc_files = ['README.md']
|
24
|
-
|
25
|
-
s.add_development_dependency("guard-rspec")
|
26
|
-
s.add_development_dependency("rake")
|
27
|
-
s.add_development_dependency("rspec")
|
28
|
-
s.add_development_dependency("simplecov")
|
29
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require_relative '../spec_helper'
|
2
|
-
|
3
|
-
describe "RBMusic Constants" do
|
4
|
-
|
5
|
-
describe RBMusic::NOTE_NAMES do
|
6
|
-
it "is correct" do
|
7
|
-
subject.should == ["F", "C", "G", "D", "A", "E", "B"]
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
describe RBMusic::ACCIDENTALS do
|
12
|
-
it "is correct" do
|
13
|
-
subject.should == ["bb", "b", "", "#", "x"]
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
describe RBMusic::NOTES do
|
18
|
-
it "contains a key for each note/accidental combination" do
|
19
|
-
RBMusic::NOTE_NAMES.each do |note_name|
|
20
|
-
ACCIDENTALS.each do |accidental|
|
21
|
-
NOTES.should have_key("#{note_name}#{accidental}")
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
@@ -1,90 +0,0 @@
|
|
1
|
-
require_relative '../spec_helper'
|
2
|
-
|
3
|
-
describe RBMusic::Interval do
|
4
|
-
|
5
|
-
context "after initialization" do
|
6
|
-
let(:subject) { described_class.new("some coord") }
|
7
|
-
|
8
|
-
it "assigns the coord argument" do
|
9
|
-
subject.coord.should == "some coord"
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
describe "class methods" do
|
14
|
-
describe "#from_name" do
|
15
|
-
it "looks up the correct coordinates" do
|
16
|
-
subject = described_class.from_name("major_second")
|
17
|
-
|
18
|
-
subject.coord.should == described_class::INTERVALS[:major_second]
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#from_semitones" do
|
23
|
-
it "looks up the correct coordinates" do
|
24
|
-
subject = described_class.from_semitones(3)
|
25
|
-
|
26
|
-
subject.coord.should == described_class::INTERVALS_SEMITONES[3]
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
describe "#from_tones_semitones" do
|
31
|
-
it "looks up the correct coordinates" do
|
32
|
-
subject = described_class.from_tones_semitones([0, 3])
|
33
|
-
|
34
|
-
subject.coord.should == [9, -15]
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe "instance methods" do
|
40
|
-
let(:subject) { described_class.from_name("major_second") }
|
41
|
-
|
42
|
-
describe "#tone_semitone" do
|
43
|
-
it "returns the tone / semitone vector" do
|
44
|
-
subject.tone_semitone.should == [1, 0]
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
describe "#semitone" do
|
49
|
-
it "returns number of semitones" do
|
50
|
-
subject.semitone.should == 2
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "#add" do
|
55
|
-
context "when given a string" do
|
56
|
-
it "adds the string as an Interval" do
|
57
|
-
result = subject.add("major_second")
|
58
|
-
result.coord.should == Interval.from_name("major_third").coord
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
context "when given an Interval" do
|
63
|
-
it "adds the given Interval's coordinates and returns a new Interval" do
|
64
|
-
result = subject.add(described_class.from_name("minor_second"))
|
65
|
-
result.coord.should == Interval.from_name("minor_third").coord
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
describe "#subtract" do
|
71
|
-
context "when given a string" do
|
72
|
-
it "returns a Interval with the given string as Interval subtracted" do
|
73
|
-
result = subject.subtract("major_second")
|
74
|
-
result.coord.should == Interval.from_name("unison").coord
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
context "when given an Interval" do
|
79
|
-
it "subtracts the coordinates of the given Interval and returns a new Interval" do
|
80
|
-
subject = described_class.from_name("major_third")
|
81
|
-
result = subject.subtract(described_class.from_name("major_second"))
|
82
|
-
|
83
|
-
result.coord.should == Interval.from_name("major_second").coord
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
@@ -1,191 +0,0 @@
|
|
1
|
-
require_relative '../spec_helper'
|
2
|
-
|
3
|
-
describe RBMusic::NoteSet do
|
4
|
-
|
5
|
-
describe "class methods" do
|
6
|
-
describe "#from_scale" do
|
7
|
-
let(:scale) { RBMusic::Scale.new("C", "major") }
|
8
|
-
|
9
|
-
context "without any arguments" do
|
10
|
-
it "raises an ArgumentError" do
|
11
|
-
lambda {
|
12
|
-
described_class.from_scale
|
13
|
-
}.should raise_error(ArgumentError)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
context "without a valid RBMusic::Scale" do
|
18
|
-
it "raises an ArgumentError" do
|
19
|
-
lambda {
|
20
|
-
described_class.from_scale("foo")
|
21
|
-
}.should raise_error(RBMusic::ArgumentError)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context "with a RBMusic::Scale only" do
|
26
|
-
let(:subject) { described_class.from_scale(scale) }
|
27
|
-
|
28
|
-
it "returns a #{described_class}" do
|
29
|
-
subject.should be_a(described_class)
|
30
|
-
end
|
31
|
-
|
32
|
-
it "builds a note for each scale degree in the default octave ranage (1)" do
|
33
|
-
subject.notes.length.should == scale.degree_count
|
34
|
-
end
|
35
|
-
|
36
|
-
it "builds notes from the default octave (0)" do
|
37
|
-
subject.notes[0].should == Note.from_latin("#{scale.key}0")
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
context "with a RBMusic::Scale and an octave" do
|
42
|
-
let(:octave) { 3 }
|
43
|
-
let(:subject) { described_class.from_scale(scale, octave) }
|
44
|
-
|
45
|
-
it "builds notes for the scale from the given octave" do
|
46
|
-
subject.notes[0].should == Note.from_latin("#{scale.key}#{octave}")
|
47
|
-
subject.notes.length.should == scale.degree_count
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
context "with a RBMusic::Scale, octave and octave range" do
|
52
|
-
let(:octave) { 3 }
|
53
|
-
let(:octaves) { 2 }
|
54
|
-
let(:subject) { described_class.from_scale(scale, octave, octaves) }
|
55
|
-
|
56
|
-
it "builds notes for the given octave range" do
|
57
|
-
degrees = scale.degree_count
|
58
|
-
|
59
|
-
subject.notes[0].should == Note.from_latin("#{scale.key}#{octave}")
|
60
|
-
subject.notes[degrees].should == Note.from_latin("#{scale.key}#{octave + 1}")
|
61
|
-
subject.notes.length.should == scale.degree_count * octaves
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
context "with an invalid octave range" do
|
66
|
-
it "raises an ArgumentError" do
|
67
|
-
lambda {
|
68
|
-
described_class.from_scale(scale, 3, -1)
|
69
|
-
}.should raise_exception(RBMusic::ArgumentError)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
describe "instance methods" do
|
76
|
-
|
77
|
-
describe "#initialize" do
|
78
|
-
let(:notes_array) { ["foo", "bar"] }
|
79
|
-
|
80
|
-
it "assigns the notes array" do
|
81
|
-
subject = described_class.new(notes_array)
|
82
|
-
|
83
|
-
subject.notes.should == notes_array
|
84
|
-
end
|
85
|
-
end
|
86
|
-
|
87
|
-
describe "#==" do
|
88
|
-
let(:notes) { ["foo", "bar"] }
|
89
|
-
|
90
|
-
context "when all the notes are equal" do
|
91
|
-
it "is true" do
|
92
|
-
described_class.new(notes).should == described_class.new(notes)
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
context "when note all the notes are equal" do
|
97
|
-
it "is false" do
|
98
|
-
described_class.new(notes).should_not == described_class.new([1, 2])
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
|
-
describe "#add" do
|
104
|
-
let(:f4) { Note.from_latin("F4") }
|
105
|
-
let(:g4) { Note.from_latin("G4") }
|
106
|
-
let(:subject) { NoteSet.new([f4, g4]) }
|
107
|
-
|
108
|
-
context "when adding an interval string" do
|
109
|
-
let(:operand) { "major_second" }
|
110
|
-
|
111
|
-
it "retuns a new NoteSet with the operand added to each element of the original" do
|
112
|
-
result = subject.add(operand)
|
113
|
-
|
114
|
-
result.should be_a(NoteSet)
|
115
|
-
result[0].frequency.should == subject[0].add(operand).frequency
|
116
|
-
result[1].frequency.should == subject[1].add(operand).frequency
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
context "when adding an interval symbol" do
|
121
|
-
let(:operand) { :major_second }
|
122
|
-
|
123
|
-
it "retuns a new NoteSet with the operand added to each element of the original" do
|
124
|
-
result = subject.add(operand)
|
125
|
-
|
126
|
-
result.should be_a(NoteSet)
|
127
|
-
result[0].frequency.should == subject[0].add(operand).frequency
|
128
|
-
result[1].frequency.should == subject[1].add(operand).frequency
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
context "when adding an note" do
|
133
|
-
let(:operand) { Note.from_latin("C4") }
|
134
|
-
|
135
|
-
it "retuns a new NoteSet with the operand added to each element of the original" do
|
136
|
-
result = subject.add(operand)
|
137
|
-
|
138
|
-
result.should be_a(NoteSet)
|
139
|
-
result[0].frequency.should == subject[0].add(operand).frequency
|
140
|
-
result[1].frequency.should == subject[1].add(operand).frequency
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
end
|
145
|
-
|
146
|
-
describe "#subtract" do
|
147
|
-
let(:f4) { Note.from_latin("F4") }
|
148
|
-
let(:g4) { Note.from_latin("G4") }
|
149
|
-
let(:subject) { NoteSet.new([f4, g4]) }
|
150
|
-
|
151
|
-
context "when subtracting an interval string" do
|
152
|
-
let(:operand) { "major_second" }
|
153
|
-
|
154
|
-
it "retuns a new NoteSet with the operand subtracted to each element of the original" do
|
155
|
-
result = subject.subtract(operand)
|
156
|
-
|
157
|
-
result.should be_a(NoteSet)
|
158
|
-
result[0].frequency.should == subject[0].subtract(operand).frequency
|
159
|
-
result[1].frequency.should == subject[1].subtract(operand).frequency
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
context "when subtracting an interval symbol" do
|
164
|
-
let(:operand) { :major_second }
|
165
|
-
|
166
|
-
it "retuns a new NoteSet with the operand subtracted to each element of the original" do
|
167
|
-
result = subject.subtract(operand)
|
168
|
-
|
169
|
-
result.should be_a(NoteSet)
|
170
|
-
result[0].frequency.should == subject[0].subtract(operand).frequency
|
171
|
-
result[1].frequency.should == subject[1].subtract(operand).frequency
|
172
|
-
end
|
173
|
-
end
|
174
|
-
|
175
|
-
context "when subtracting an note" do
|
176
|
-
let(:operand) { Note.from_latin("C4") }
|
177
|
-
|
178
|
-
it "retuns a new NoteSet with the operand subtracted to each element of the original" do
|
179
|
-
result = subject.subtract(operand)
|
180
|
-
|
181
|
-
result.should be_a(NoteSet)
|
182
|
-
result[0].coord.should == subject[0].subtract(operand).coord
|
183
|
-
result[1].coord.should == subject[1].subtract(operand).coord
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
end
|
188
|
-
|
189
|
-
end
|
190
|
-
|
191
|
-
end
|