music-utils 0.3.20 → 0.4.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.
- data/CHANGELOG.md +14 -2
- data/README.md +2 -1
- data/lib/interval.rb +26 -10
- data/music-utils.gemspec +1 -1
- data/spec/interval_spec.rb +17 -2
- metadata +4 -4
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,17 @@
|
|
1
|
-
## 0.0.1 (
|
1
|
+
## 0.0.1 (March 23, 2011)
|
2
2
|
|
3
3
|
Features:
|
4
4
|
|
5
|
-
-
|
5
|
+
- First commit
|
6
|
+
|
7
|
+
## 0.3.20 (April 26, 2011)
|
8
|
+
|
9
|
+
Features:
|
10
|
+
|
11
|
+
- Added support to full diatonic scale in quality method
|
12
|
+
|
13
|
+
## 0.4.0 (April 26, 2011)
|
14
|
+
|
15
|
+
Features:
|
16
|
+
|
17
|
+
- Added support for notes alterations
|
data/README.md
CHANGED
@@ -10,6 +10,7 @@ Simple intervals:
|
|
10
10
|
* Interval.new('do', 'mi', 0).number #=> 3 (3th)
|
11
11
|
* Interval.new('do', 'mi', 0).semitone #=> 4 (semi-tones)
|
12
12
|
* Interval.new('do', 'mi', 0).quality #=> M (major)
|
13
|
+
* Interval.new('do#', 'mi', 0).quality #=> m (major)
|
13
14
|
|
14
15
|
Compound intervals:
|
15
16
|
|
@@ -19,7 +20,7 @@ Compound intervals:
|
|
19
20
|
|
20
21
|
To Do
|
21
22
|
-----
|
22
|
-
* Add
|
23
|
+
* Add more rspec examples
|
23
24
|
|
24
25
|
Copyright
|
25
26
|
---------
|
data/lib/interval.rb
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
module Scales
|
3
3
|
DIATONIC_SCALE = ['do', 're', 'mi', 'fa', 'sol', 'la', 'si']
|
4
4
|
QUALITIES = {
|
5
|
-
2 => {0 => 'd', 1 => 'm', 2 => 'M', 3 => 'A'},
|
6
|
-
3 => {2 => 'd', 3 => 'm', 4 => 'M', 5 => 'A'},
|
5
|
+
2 => {0 => 'd', 1 => 'm', 2 => 'M', 3 => 'A', 4 => 'AA'},
|
6
|
+
3 => {1 => 'dd', 2 => 'd', 3 => 'm', 4 => 'M', 5 => 'A', 6 => 'AA'},
|
7
7
|
4 => {3 => 'dd', 4 => 'd', 5 => 'P', 6 => 'A', 7 => 'AA'},
|
8
8
|
5 => {5 => 'dd', 6 => 'd', 7 => 'P', 8 => 'A', 9 => 'AA'},
|
9
|
-
6 => {7 => 'd', 8 => 'm', 9 => 'M', 10 => 'A'},
|
10
|
-
7 => {9 => 'd', 10 => 'm', 11 => 'M', 12 => 'A'},
|
9
|
+
6 => {6 => 'dd', 7 => 'd', 8 => 'm', 9 => 'M', 10 => 'A', 11 => 'AA'},
|
10
|
+
7 => {8 => 'dd', 9 => 'd', 10 => 'm', 11 => 'M', 12 => 'A', 13 => 'AA'},
|
11
11
|
8 => {10 => 'dd', 11 => 'd', 12 => 'P', 13 => 'A', 14 => 'AA'}
|
12
12
|
}
|
13
13
|
end
|
@@ -25,16 +25,16 @@ class Interval
|
|
25
25
|
# It classifies the diatonic interval
|
26
26
|
def number
|
27
27
|
# initialize counter and index of scale
|
28
|
-
i = DIATONIC_SCALE.index(@note1)
|
28
|
+
i = DIATONIC_SCALE.index(@note1[0..1])
|
29
29
|
count = 1
|
30
30
|
|
31
31
|
# No unison
|
32
|
-
if @note1 == @note2
|
32
|
+
if @note1[0..1] == @note2[0..1]
|
33
33
|
count += 1; i += 1
|
34
34
|
end
|
35
35
|
|
36
36
|
# Counting notes
|
37
|
-
while DIATONIC_SCALE[i] != @note2
|
37
|
+
while DIATONIC_SCALE[i] != @note2[0..1]
|
38
38
|
i += 1
|
39
39
|
if i > DIATONIC_SCALE.length
|
40
40
|
i = 0; next
|
@@ -48,16 +48,16 @@ class Interval
|
|
48
48
|
# Returns the number of semitones
|
49
49
|
def semitone
|
50
50
|
# initialize counter and index of scale
|
51
|
-
i = DIATONIC_SCALE.index(@note1)
|
51
|
+
i = DIATONIC_SCALE.index(@note1[0..1])
|
52
52
|
count = 0
|
53
53
|
|
54
54
|
# No unison
|
55
|
-
if @note1 == @note2
|
55
|
+
if @note1[0..1] == @note2[0..1]
|
56
56
|
count += 1; i += 1
|
57
57
|
end
|
58
58
|
|
59
59
|
# Counting semi-tones
|
60
|
-
while DIATONIC_SCALE[i] != @note2
|
60
|
+
while DIATONIC_SCALE[i] != @note2[0..1]
|
61
61
|
i += 1
|
62
62
|
if i > DIATONIC_SCALE.length
|
63
63
|
i = 0; next
|
@@ -72,6 +72,22 @@ class Interval
|
|
72
72
|
end
|
73
73
|
|
74
74
|
count = count + (12 * @step) if @step > 0
|
75
|
+
|
76
|
+
# Counting notes alterations
|
77
|
+
alter = @note1[2..3]
|
78
|
+
|
79
|
+
alter.each_char do |c|
|
80
|
+
count += 1 if c == 'b'
|
81
|
+
count -= 1 if c == '#'
|
82
|
+
end
|
83
|
+
|
84
|
+
alter = @note2[2..3]
|
85
|
+
|
86
|
+
alter.each_char do |c|
|
87
|
+
count -= 1 if c == 'b'
|
88
|
+
count += 1 if c == '#'
|
89
|
+
end
|
90
|
+
|
75
91
|
count
|
76
92
|
end
|
77
93
|
|
data/music-utils.gemspec
CHANGED
data/spec/interval_spec.rb
CHANGED
@@ -24,7 +24,12 @@ describe Interval do
|
|
24
24
|
i = Interval.new('do', 'mi', 0)
|
25
25
|
i.semitone.should == 4
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
|
+
it "simple interval dob-mi# should be 6 semitones" do
|
29
|
+
i = Interval.new('dob', 'mi#', 0)
|
30
|
+
i.semitone.should == 6
|
31
|
+
end
|
32
|
+
|
28
33
|
it "simple interval do-do should be 12 semitones" do
|
29
34
|
i = Interval.new('do', 'do', 0)
|
30
35
|
i.semitone.should == 12
|
@@ -46,7 +51,17 @@ describe Interval do
|
|
46
51
|
i = Interval.new('do', 'mi', 0)
|
47
52
|
i.quality.should == 'M'
|
48
53
|
end
|
49
|
-
|
54
|
+
|
55
|
+
it "quality of interval do#-mi should be m" do
|
56
|
+
i = Interval.new('do#', 'mi', 0)
|
57
|
+
i.quality.should == 'm'
|
58
|
+
end
|
59
|
+
|
60
|
+
it "quality of interval dob-mi# should be AA" do
|
61
|
+
i = Interval.new('dob', 'mi#', 0)
|
62
|
+
i.quality.should == 'AA'
|
63
|
+
end
|
64
|
+
|
50
65
|
it "quality of interval do-do should be P" do
|
51
66
|
i = Interval.new('do', 'do', 0)
|
52
67
|
i.quality.should == 'P'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: music-utils
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-04-26 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement: &
|
16
|
+
requirement: &77436860 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *77436860
|
25
25
|
description: Utils for music
|
26
26
|
email:
|
27
27
|
- jorgeluis700@gmail.com
|
@@ -54,7 +54,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
54
54
|
version: '0'
|
55
55
|
segments:
|
56
56
|
- 0
|
57
|
-
hash: -
|
57
|
+
hash: -975623391
|
58
58
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
59
|
none: false
|
60
60
|
requirements:
|