music-utils 1.0.1 → 1.0.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.
- data/CHANGELOG.md +7 -0
- data/Rakefile +7 -0
- data/benchmark/music-utils_bm.rb +16 -5
- data/lib/music-utils/interval/interval.rb +15 -4
- data/lib/music-utils/scales/scales.rb +47 -11
- data/lib/music-utils/version.rb +1 -1
- data/spec/interval/interval_spec.rb +5 -0
- data/spec/music-utils_spec.rb +10 -9
- metadata +8 -8
data/CHANGELOG.md
CHANGED
data/Rakefile
CHANGED
@@ -12,6 +12,13 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
|
|
12
12
|
spec.fail_on_error = false
|
13
13
|
end
|
14
14
|
|
15
|
+
desc "Run benchmarks"
|
16
|
+
task :bench do
|
17
|
+
Dir["benchmark/**/*_bm.rb"].each do |f|
|
18
|
+
eval(File.read(f))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
15
22
|
# Gems tasks
|
16
23
|
require "bundler"
|
17
24
|
Bundler::GemHelper.install_tasks
|
data/benchmark/music-utils_bm.rb
CHANGED
@@ -5,15 +5,26 @@ require 'music-utils/scales/scales'
|
|
5
5
|
require 'benchmark'
|
6
6
|
|
7
7
|
n = 100_000
|
8
|
+
label_width = 60
|
8
9
|
|
9
|
-
Benchmark.
|
10
|
-
b.report('with strings:') do
|
10
|
+
Benchmark.bm(label_width) do |b|
|
11
|
+
b.report('Classifying do-mi interval with strings (number):') do
|
12
|
+
n.times { MusicUtils.number('do', 'mi') }
|
13
|
+
end
|
14
|
+
b.report('Classifying do-mi interval with strings (quality):') do
|
15
|
+
n.times { MusicUtils.quality('do', 'mi') }
|
16
|
+
end
|
17
|
+
b.report('Classifying do-mi interval with strings (short notation):') do
|
11
18
|
n.times { MusicUtils.short('do', 'mi') }
|
12
19
|
end
|
13
|
-
|
14
|
-
|
20
|
+
|
21
|
+
b.report('Classifying do-mi interval with scales (number):') do
|
22
|
+
n.times { MusicUtils.number(Scales::DO, Scales::MI) }
|
23
|
+
end
|
24
|
+
b.report('Classifying do-mi interval with scales (quality):') do
|
25
|
+
n.times { MusicUtils.quality(Scales::DO, Scales::MI) }
|
15
26
|
end
|
16
|
-
b.report('with scales:') do
|
27
|
+
b.report('Classifying do-mi interval with scales (short notation):') do
|
17
28
|
n.times { MusicUtils.short(Scales::DO, Scales::MI) }
|
18
29
|
end
|
19
30
|
end
|
@@ -7,10 +7,21 @@ module MusicUtils
|
|
7
7
|
include Scales
|
8
8
|
|
9
9
|
def initialize(note1, note2, step)
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
10
|
+
|
11
|
+
# SOL is the only note of length = 3
|
12
|
+
n = 0
|
13
|
+
n += 1 if note1[0..2].to_sym == SOL
|
14
|
+
|
15
|
+
@note1 = note1[0..1 + n].to_sym
|
16
|
+
@note1_alt = note1[2 + n..3 + n]
|
17
|
+
|
18
|
+
# SOL is the only note of length = 3
|
19
|
+
n = 0
|
20
|
+
n += 1 if note2[0..2].to_sym == SOL
|
21
|
+
|
22
|
+
@note2 = note2[0..1 + n].to_sym
|
23
|
+
@note2_alt = note2[2 + n..3 + n]
|
24
|
+
|
14
25
|
@step = step
|
15
26
|
end
|
16
27
|
|
@@ -2,21 +2,57 @@
|
|
2
2
|
module Scales
|
3
3
|
|
4
4
|
# Notes
|
5
|
-
DO
|
6
|
-
RE
|
7
|
-
MI
|
8
|
-
FA
|
5
|
+
DO = :do
|
6
|
+
RE = :re
|
7
|
+
MI = :mi
|
8
|
+
FA = :fa
|
9
9
|
SOL = :sol
|
10
|
-
LA
|
11
|
-
SI
|
10
|
+
LA = :la
|
11
|
+
SI = :si
|
12
12
|
|
13
13
|
DIATONIC_SCALE = [DO, RE, MI, FA, SOL, LA, SI]
|
14
14
|
|
15
15
|
# Alterations:
|
16
|
-
FLAT
|
17
|
-
DFLAT
|
18
|
-
SHARP
|
19
|
-
DSHARP
|
16
|
+
FLAT = 'b'
|
17
|
+
DFLAT = FLAT + FLAT
|
18
|
+
SHARP = '#'
|
19
|
+
DSHARP = SHARP + SHARP
|
20
|
+
|
21
|
+
# Altered notes
|
22
|
+
DOF = DO.to_s + FLAT
|
23
|
+
DOFF = DO.to_s + DFLAT
|
24
|
+
DOS = DO.to_s + SHARP
|
25
|
+
DOSS = DO.to_s + DSHARP
|
26
|
+
|
27
|
+
REF = RE.to_s + FLAT
|
28
|
+
REFF = RE.to_s + DFLAT
|
29
|
+
RES = RE.to_s + SHARP
|
30
|
+
RESS = RE.to_s + DSHARP
|
31
|
+
|
32
|
+
MIF = MI.to_s + FLAT
|
33
|
+
MIFF = MI.to_s + DFLAT
|
34
|
+
MIS = MI.to_s + SHARP
|
35
|
+
MISS = MI.to_s + DSHARP
|
36
|
+
|
37
|
+
FAF = FA.to_s + FLAT
|
38
|
+
FAFF = FA.to_s + DFLAT
|
39
|
+
FAS = FA.to_s + SHARP
|
40
|
+
FASS = FA.to_s + DSHARP
|
41
|
+
|
42
|
+
SOLF = SOL.to_s + FLAT
|
43
|
+
SOLFF = SOL.to_s + DFLAT
|
44
|
+
SOLS = SOL.to_s + SHARP
|
45
|
+
SOLSS = SOL.to_s + DSHARP
|
46
|
+
|
47
|
+
LAF = LA.to_s + FLAT
|
48
|
+
LAFF = LA.to_s + DFLAT
|
49
|
+
LAS = LA.to_s + SHARP
|
50
|
+
LASS = LA.to_s + DSHARP
|
51
|
+
|
52
|
+
SIF = SI.to_s + FLAT
|
53
|
+
SIFF = SI.to_s + DFLAT
|
54
|
+
SIS = SI.to_s + SHARP
|
55
|
+
SISS = SI.to_s + DSHARP
|
20
56
|
|
21
57
|
# Qualities
|
22
58
|
PERF = 'P'
|
@@ -33,7 +69,7 @@ module Scales
|
|
33
69
|
3 => {1 => DIMP, 2 => DIM, 3 => MIN, 4 => MAJ, 5 => AUG, 6 => AUGP},
|
34
70
|
4 => {3 => DIMP, 4 => DIM, 5 => PERF, 6 => AUG, 7 => AUGP},
|
35
71
|
5 => {5 => DIMP, 6 => DIM, 7 => PERF, 8 => AUG, 9 => AUGP},
|
36
|
-
6 => {
|
72
|
+
6 => {7 => DIMP, 8 => DIM, 9 => MIN, 10 => MAJ, 11 => AUG, 12 => AUGP},
|
37
73
|
7 => {8 => DIMP, 9 => DIM, 10 => MIN, 11 => MAJ, 12 => AUG, 13 => AUGP},
|
38
74
|
8 => {10 => DIMP, 11 => DIM, 12 => PERF, 13 => AUG, 14 => AUGP}
|
39
75
|
}
|
data/lib/music-utils/version.rb
CHANGED
data/spec/music-utils_spec.rb
CHANGED
@@ -1,42 +1,43 @@
|
|
1
1
|
require 'music-utils'
|
2
2
|
|
3
3
|
describe MusicUtils do
|
4
|
-
|
4
|
+
include Scales
|
5
|
+
|
5
6
|
context "Intervals" do
|
6
7
|
|
7
8
|
context "By number" do
|
8
9
|
it "the number of simple interval do-mi should be a 3rd" do
|
9
|
-
MusicUtils.number(
|
10
|
+
MusicUtils.number(DO, MI).should == 3
|
10
11
|
end
|
11
12
|
it "the number of do-mi compound interval should be a 10th" do
|
12
|
-
MusicUtils.number(
|
13
|
+
MusicUtils.number(DO, MI, 1).should == 10
|
13
14
|
end
|
14
15
|
end
|
15
16
|
|
16
17
|
context "By semitones" do
|
17
18
|
it "simple interval do-mi should be 4 semitones" do
|
18
|
-
MusicUtils.semitones(
|
19
|
+
MusicUtils.semitones(DO, MI).should == 4
|
19
20
|
end
|
20
21
|
it "compound interval do-mi should be 16 semitones" do
|
21
|
-
MusicUtils.semitones(
|
22
|
+
MusicUtils.semitones(DO, MI, 1).should == 16
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
26
|
context "By quality" do
|
26
27
|
it "quality of interval do-mi should be M" do
|
27
|
-
MusicUtils.quality(
|
28
|
+
MusicUtils.quality(DO, MI).should == 'M'
|
28
29
|
end
|
29
30
|
it "quality of compound interval do-mi should be M" do
|
30
|
-
MusicUtils.quality(
|
31
|
+
MusicUtils.quality(DO, MI, 1).should == 'M'
|
31
32
|
end
|
32
33
|
end
|
33
34
|
|
34
35
|
context "By short notation" do
|
35
36
|
it "the short notation of do#-mi interval should be m3" do
|
36
|
-
MusicUtils.short(
|
37
|
+
MusicUtils.short(DOS, MI).should == 'm3'
|
37
38
|
end
|
38
39
|
it "the short notation of do#-mi compound interval should be m10" do
|
39
|
-
MusicUtils.short(
|
40
|
+
MusicUtils.short(DOS, MI, 1).should == 'm10'
|
40
41
|
end
|
41
42
|
end
|
42
43
|
|
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: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-05-
|
12
|
+
date: 2011-05-12 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &84854900 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0.8'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *84854900
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: bundler
|
27
|
-
requirement: &
|
27
|
+
requirement: &84854710 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *84854710
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
requirement: &
|
38
|
+
requirement: &84854480 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *84854480
|
47
47
|
description: Utils for music. At the moment only to classify intervals.
|
48
48
|
email:
|
49
49
|
- jorgeluis700@gmail.com
|