trriad 0.0.1 → 0.0.2.19

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,16 @@
1
+ == 0.0.2.x 2007-xx-xx
2
+
3
+ * add "<key>".scale support, you can now do
4
+ "Bb".scale and get ["Bb", "C", "D", "Eb", "F", "G", "A"]
5
+ * add declarations for the following chord types:
6
+ maj,6,m6,maj7,m7,dim,+,9,7+5,7b5,m7b5,m9,9+5,9b5,
7
+ maj9,6add9,7b9,7sus4,7add6,11,11+,11b9,13 and 13b9
8
+ (m and 7 were already present in 0.0.1)
9
+ * documentation updates
10
+ * more code comments
11
+ * website
12
+ * readme
13
+
1
14
  == 0.0.1 2007-05-30
2
15
 
3
16
  * 1 major enhancement:
data/Manifest.txt CHANGED
@@ -5,6 +5,7 @@ README.txt
5
5
  Rakefile
6
6
  lib/trriad.rb
7
7
  lib/trriad/chord.rb
8
+ lib/trriad/chord_data.rb
8
9
  lib/trriad/core_ext.rb
9
10
  lib/trriad/core_ext/string.rb
10
11
  lib/trriad/core_ext/string/chord.rb
@@ -18,3 +19,4 @@ website/index.txt
18
19
  website/javascripts/rounded_corners_lite.inc.js
19
20
  website/stylesheets/screen.css
20
21
  website/template.rhtml
22
+ website/todo.txt
data/README.txt CHANGED
@@ -1,5 +1,7 @@
1
1
  README for trriad
2
2
  =================
3
+ More detailed information is at http://trriad.rubyforge.org
4
+
3
5
  This is trriad, a musical library for dealing with chords and stuff.
4
6
 
5
7
  for now, the following should work:
data/Rakefile CHANGED
@@ -47,9 +47,9 @@ HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
47
47
  DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
48
48
 
49
49
  NAME = "trriad"
50
- REV = nil
50
+ #REV = nil
51
51
  # UNCOMMENT IF REQUIRED:
52
- #REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
52
+ REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
53
53
  VERS = Trriad::VERSION::STRING + (REV ? ".#{REV}" : "")
54
54
  CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']
55
55
  RDOC_OPTS = ['--quiet', '--title', 'trriad documentation',
data/lib/trriad.rb CHANGED
@@ -4,5 +4,6 @@ end
4
4
  require 'fileutils'
5
5
 
6
6
  require File.dirname(__FILE__) + '/trriad/version'
7
+ require File.dirname(__FILE__) + '/trriad/chord_data'
7
8
  require File.dirname(__FILE__) + '/trriad/chord'
8
9
  require File.dirname(__FILE__) + '/trriad/core_ext.rb'
data/lib/trriad/chord.rb CHANGED
@@ -1,69 +1,42 @@
1
1
  module Trriad
2
2
  module Chord
3
3
 
4
- CHORDS = {
5
- "m" => "1,3b,5",
6
- "7" => "1,3,5,7b"
7
- }
8
-
9
- NOTESSHARP = "C,C#,D,D#,E,F,F#,G,G#,A,A#,B".split(",")
10
- NOTESFLAT = "C,Db,D,Eb,E,F,Gb,G,Ab,A,Bb,B".split(",")
11
-
12
- DISTANCES = "2,2,1,2,2,2,1".split(",")
13
-
14
- SHARPS = "G,D,A,E,F,C".split(",")
15
- FLATS = "Bb,Eb,Ab,Db,Gb,Cb,Fb".split(",")
16
-
17
- #puts CHORDS
18
- #puts CHORDS["m"]
19
-
20
- def self.valid_note(note)
21
- NOTESSHARP.include?(note) ? true :
22
- NOTESFLAT.include?(note) ? true :
23
- false
24
- end
25
-
26
- def next_semi(root)
27
- if NOTESSHARP.include?(root) then
28
- at=NOTESSHARP.index(root)
29
- tmp=NOTESSHARP + NOTESSHARP
30
- at+=1
31
- tmp[at]
32
- else
33
- if NOTESFLAT.include?(root) then
34
- at=NOTESFLAT.index(root)
35
- at+=1
36
- NOTESFLAT[at]
4
+ # check if it's a valid note
5
+ # returns true of false
6
+ def self.valid_note(note)
7
+ NOTES[:sharp].include?(note) ? true :
8
+ NOTES[:flat].include?(note) ? true :
9
+ false
37
10
  end
38
- end
39
- end
40
-
41
- def get_toonladder(root)
42
- result="#{root}"
43
- cur=root
44
- DISTANCES.each { |distance|
45
- 1.upto(distance.to_i) {
46
- cur=next_semi(cur)
47
- }
48
- result += ",#{cur}"
49
- }
50
- result
51
- end
52
11
 
53
- #puts next_semi("C")
54
- #puts next_semi("Db")
55
- #puts get_toonladder("C")
56
-
57
- #NOTESSHARP.each { |root|
58
- # puts get_toonladder(root)
59
- #}
12
+ # get the next semi note
13
+ # return the note as a string
14
+ def self.next_semi(root, accidental = :sharp)
15
+ if NOTES[accidental].include?(root) then
16
+ at=NOTES[accidental].index(root)
17
+ tmp=NOTES[accidental] + NOTES[accidental]
18
+ at+=1
19
+ tmp[at]
20
+ end
21
+ end
60
22
 
61
- #NOTESFLAT.each { |root|
62
- # puts get_toonladder(root)
63
- #}
64
- #puts valid_note("C")
65
- #puts valid_note("C#")
66
- #puts valid_note("Db")
23
+ # get the scale of a root note
24
+ # returns an array of strings with the scale notes
25
+ def self.get_scale(root)
26
+ accitental = nil
27
+ accidental = :flat if KEYS[:flat].include?(root)
28
+ accidental = :sharp if KEYS[:sharp].include?(root)
29
+
30
+ result="#{root}"
31
+ cur=root
32
+ DISTANCES.each { |distance|
33
+ 1.upto(distance.to_i) {
34
+ cur=next_semi(cur,accidental)
35
+ }
36
+ result += ",#{cur}"
37
+ }
38
+ result.split(',')
39
+ end
67
40
 
68
41
  end
69
42
  end
@@ -0,0 +1,53 @@
1
+ module Trriad
2
+ module Chord
3
+
4
+ # all the different chord notations
5
+ CHORDS = {
6
+ "maj" => "1,3,5".split(','),
7
+ "m" => "1,3b,5".split(','),
8
+ "7" => "1,3,5,7b".split(','),
9
+ "6" => "1,3,5,6".split(','),
10
+ "m6" => "1,3b,5,6".split(','),
11
+ "maj7" => "1,3,5,7".split(','),
12
+ "m7" => "1,3b,5,7".split(','),
13
+ "dim" => "1,3b,5b,6".split(','),
14
+ "+" => "1,3,5#".split(','),
15
+ "9" => "1,3,5,7b,9".split(','),
16
+ "7+5" => "1,3,5#,7b".split(','),
17
+ "7b5" => "1,3,5b,7b".split(','),
18
+ "m7b5" => "1,3b,5b,7b".split(','),
19
+ "m9" => "1,3b,5,7b,9".split(','),
20
+ "9+5" => "1,3,5#,7b,9".split(','),
21
+ "9b5" => "1,3,5b,7b,9".split(','),
22
+ "maj9" => "1,3,5,7,9".split(','),
23
+ "6add9" => "1,3,5,6,9".split(','),
24
+ "7b9" => "1,3,5,7b,9b".split(','),
25
+ "7sus4" => "1,4,5,7b".split(','),
26
+ "7add6" => "1,3,5,6,7b".split(','),
27
+ "11" => "1,3,5,7b,9,11".split(','),
28
+ "11+" => "1,3,5,7b,9,11#".split(','),
29
+ "11b9" => "1,3,5,7b,9b,11".split(','),
30
+ "13" => "1,3,5,7b,9,11,13".split(','),
31
+ "13b9" => "1,3,5,7b,9b,11,13".split(','),
32
+ }
33
+
34
+ # sharp and flat available notes
35
+ NOTES = {
36
+ :sharp => "C,C#,D,D#,E,F,F#,G,G#,A,A#,B".split(","),
37
+ :flat => "C,Db,D,Eb,E,F,Gb,G,Ab,A,Bb,B".split(",")
38
+ }
39
+
40
+ #DISTANCES = "2,2,1,2,2,2,1".split(",")
41
+ # the semitone distances for a major key
42
+ DISTANCES = "2,2,1,2,2,2".split(",")
43
+
44
+ # differentiate the keys with sharps and flats
45
+ KEYS = {
46
+ # since we only have :sharp an :flat, I need to put "C" somewhere
47
+ # so it's in :sharp
48
+ :sharp => "C,G,D,A,E,B,F#,C#".split(","),
49
+ :flat => "Bb,Eb,Ab,Db,Gb,Cb,Fb".split(","),
50
+ }
51
+
52
+ end
53
+ end
@@ -1 +1,2 @@
1
+ # core extensions for trriad
1
2
  Dir[File.dirname(__FILE__) + "/core_ext/*.rb"].each { |file| require(file) }
@@ -1,10 +1,16 @@
1
1
  module Trriad
2
2
  module CoreExtensions
3
3
  module String
4
+ #String extension module for chords
4
5
  module Chord
6
+ #is this a valid note?
5
7
  def is_valid_note()
6
8
  Trriad::Chord::valid_note(self)
7
9
  end
10
+ #get the of a root note
11
+ def scale()
12
+ Trriad::Chord::get_scale(self)
13
+ end
8
14
  end
9
15
  end
10
16
  end
@@ -2,7 +2,7 @@ module Trriad #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 1
5
+ TINY = 2
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
data/spec/trriad_spec.rb CHANGED
@@ -29,3 +29,16 @@ describe "Invalid Note" do
29
29
  !"Ebb".is_valid_note()
30
30
  end
31
31
  end
32
+
33
+ describe "Scale" do
34
+ it "C should be C,D,E,F,G,A,B" do
35
+ "C".scale == "C,D,E,F,G,A,B"
36
+ end
37
+ it "F# should be F#,G#,A#,B,C#,D#,E#" do
38
+ "F#".scale == "F#,G#,A#,B,C#,D#,E#"
39
+ end
40
+ it "Bb should be Bb,C,D,E,F,G,A" do
41
+ "Bb".scale == "Bb,C,D,E,F,G,A"
42
+ end
43
+
44
+ end
data/website/index.txt CHANGED
@@ -22,10 +22,21 @@ h2. Demonstration of usage
22
22
 
23
23
  For now, trriad isn't able to much things... just the following:
24
24
 
25
- "C".is_valid_note() -> true
25
+ h3. getting scales
26
26
 
27
- "W".is_valid_note() -> false
27
+ "C".scale => ["C", "D", "E", "F", "G", "A", "B"]
28
28
 
29
+ "Bb".scale => ["Bb", "C", "D", "Eb", "F", "G", "A"]
30
+
31
+ h3. checking for valid notes
32
+
33
+ "C".is_valid_note -> true
34
+
35
+ "W".is_valid_note -> false
36
+
37
+
38
+ h2. Todo
39
+ "Todo":todo.html
29
40
 
30
41
  h2. Forum
31
42
 
@@ -42,7 +42,12 @@
42
42
  </p>
43
43
  </div>
44
44
 
45
- <!-- insert site tracking codes here, like Google Urchin -->
45
+ <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
46
+ </script>
47
+ <script type="text/javascript">
48
+ _uacct = "UA-68330-5";
49
+ urchinTracker();
50
+ </script>
46
51
 
47
52
  </body>
48
53
  </html>
data/website/todo.txt ADDED
@@ -0,0 +1,7 @@
1
+ h1. Todo list for ttriad
2
+
3
+ * "C".to_chord -> "C,E,G"
4
+ * "C,Eb,G".to_notation -> "Cm"
5
+ * different chords (m,m7,dim,maj,etc)
6
+ * scales (diatonic, chromatic, etc)
7
+
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: trriad
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2007-05-30 00:00:00 +02:00
6
+ version: 0.0.2.19
7
+ date: 2007-05-31 00:00:00 +02:00
8
8
  summary: Ruby gem for dealing with several musical items like describing notes, transposing notes, build chords, etc
9
9
  require_paths:
10
10
  - lib
@@ -36,6 +36,7 @@ files:
36
36
  - Rakefile
37
37
  - lib/trriad.rb
38
38
  - lib/trriad/chord.rb
39
+ - lib/trriad/chord_data.rb
39
40
  - lib/trriad/core_ext.rb
40
41
  - lib/trriad/core_ext/string.rb
41
42
  - lib/trriad/core_ext/string/chord.rb
@@ -49,6 +50,7 @@ files:
49
50
  - website/javascripts/rounded_corners_lite.inc.js
50
51
  - website/stylesheets/screen.css
51
52
  - website/template.rhtml
53
+ - website/todo.txt
52
54
  test_files: []
53
55
 
54
56
  rdoc_options:
@@ -60,6 +62,7 @@ extra_rdoc_files:
60
62
  - Manifest.txt
61
63
  - README.txt
62
64
  - website/index.txt
65
+ - website/todo.txt
63
66
  executables: []
64
67
 
65
68
  extensions: []