motion-music 0.0.2 → 0.0.3
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 +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
|