trriad 0.0.1 → 0.0.2.19

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/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: []