stringed 0.0.1 → 0.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/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Stringed
2
2
 
3
- TODO: Write a gem description
3
+ A library for Stringed instruments. Recognizes chords and notes for any stringed instrument.
4
4
 
5
5
  ## Installation
6
6
 
@@ -18,7 +18,8 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
- TODO: Write usage instructions here
21
+ guitar = Stringed::Instrument.new(%w( E2 A2 D3 G3 B3 E4 ))
22
+ guitar.
22
23
 
23
24
  ## Contributing
24
25
 
@@ -2,35 +2,31 @@ module Stringed
2
2
 
3
3
  class Instrument
4
4
 
5
- attr_accessor :strings, :neck_length
5
+ attr_accessor :strings, :fret_count
6
6
 
7
- def initialize(strings,neck_length)
8
- @strings = strings.map{ |string| InstrumentString.new(string.to_s)}
9
- @neck_length = neck_length
7
+ def initialize(strings,options={})
8
+ @strings = strings.map{ |string| InstrumentString.new(string.to_s, options)}
9
+ @fret_count = options.fetch(:fret_count,14)
10
10
  end
11
11
 
12
- def matches(note)
12
+ def find(note)
13
13
  matches = []
14
14
  strings.each do |string|
15
- matches << string.matches(note, {limit: @neck_length})
15
+ matches << string.find(note)
16
16
  end
17
17
  matches
18
18
  end
19
19
 
20
- def chord_matches(chord)
20
+ def find_chord(chord)
21
21
  matches = []
22
22
  strings.each do |string|
23
- string_matches = []
24
- chord.notes.each do |note|
25
- string_matches << string.matches(note.name,{ limit: @neck_length })
26
- end
27
- matches << string_matches.flatten.compact.sort
23
+ matches << string.find_chord(chord)
28
24
  end
29
25
  matches
30
26
  end
31
27
 
32
28
  def in_range?(fret_no)
33
- fret_no >= 0 and fret_no <= neck_length
29
+ fret_no >= 0 and fret_no <= fret_count
34
30
  end
35
31
 
36
32
  end
@@ -3,10 +3,11 @@ module Stringed
3
3
  class InstrumentString
4
4
  include Music
5
5
 
6
- attr_reader :root_note
6
+ attr_reader :root_note, :fret_count
7
7
 
8
- def initialize(root_note)
8
+ def initialize(root_note, options={})
9
9
  @root_note = Music::Note.new(root_note.to_s)
10
+ @fret_count = options.fetch(:fret_count,14)
10
11
  end
11
12
 
12
13
  def fret_note(fret_no)
@@ -31,14 +32,21 @@ module Stringed
31
32
  @root_note.to_s
32
33
  end
33
34
 
34
- def matches(note_name, options={})
35
- limit = options.has_key?(:limit) ? options[:limit] : 20
35
+ def find(note_name)
36
36
  matches = []
37
- (0..limit).each do |fret|
37
+ (0..(fret_count)).each do |fret|
38
38
  matches.push fret if fret_note(fret).name == note_name
39
39
  end
40
40
  matches
41
41
  end
42
42
 
43
+ def find_chord(chord)
44
+ matches = []
45
+ chord.notes.each do |note|
46
+ matches << find(note.name)
47
+ end
48
+ matches.flatten.compact.sort
49
+ end
50
+
43
51
  end
44
52
  end
@@ -1,3 +1,3 @@
1
1
  module Stringed
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -2,23 +2,23 @@ require 'spec_helper'
2
2
 
3
3
  describe Stringed::Instrument do
4
4
 
5
- let(:guitar) { Stringed::Instrument.new(%w( E2 A2 D3 G3 B3 E4 ), 20) }
5
+ let(:guitar) { Stringed::Instrument.new(%w( E2 A2 D3 G3 B3 E4 ), fret_count: 20) }
6
6
 
7
7
  it "should have strings" do
8
8
  guitar.strings.count.should == 6
9
9
  end
10
10
 
11
- it "should have a neck length" do
12
- guitar.neck_length.should == 20
11
+ it "should have a fret count" do
12
+ guitar.fret_count.should == 20
13
13
  end
14
14
 
15
15
  it "should know where all the matches for a given note are" do
16
- guitar.matches('F').should eq [[1,13], [8,20], [3,15], [10], [6,18], [1,13]]
17
- guitar.matches('D').should eq [[10], [5, 17], [0, 12], [7, 19], [3, 15], [10]]
16
+ guitar.find('F').should eq [[1,13], [8,20], [3,15], [10], [6,18], [1,13]]
17
+ guitar.find('D').should eq [[10], [5, 17], [0, 12], [7, 19], [3, 15], [10]]
18
18
  end
19
19
 
20
20
  it "should know where all the matches for a given chord are" do
21
- guitar.chord_matches(Chord.new(['C4', 'E4', 'G4'])).should eq [[0, 3, 8, 12, 15, 20],
21
+ guitar.find_chord(Chord.new(['C4', 'E4', 'G4'])).should eq [[0, 3, 8, 12, 15, 20],
22
22
  [3, 7, 10, 15, 19],
23
23
  [2, 5, 10, 14, 17],
24
24
  [0, 5, 9, 12, 17],
@@ -2,40 +2,42 @@ require 'spec_helper'
2
2
 
3
3
  describe InstrumentString do
4
4
 
5
- let(:e2){ InstrumentString.new('E2') }
5
+ let(:e2){ InstrumentString.new('E2', :fret_count => 20) }
6
6
 
7
- context "InstrumentString#new" do
8
- it {
9
- e2.root_note.should eq Note.new('E2')
10
- }
11
- it { InstrumentString.new(Note.new('A2')).root_note.to_s.should eq 'A2' }
7
+ it "should have a root note" do
8
+ e2.root_note.should eq Note.new('E2')
12
9
  end
13
10
 
14
- it "should know what note is at any fret" do
11
+ it "should have a fret_count" do
12
+ e2.fret_count.should eq 20
13
+ end
14
+
15
+ it "should know the note at any fret" do
15
16
  e2.fret_note(4).should eq Note.new('G#2')
16
- e2.fret_note(5).should eq Note.new('A2' )
17
17
  end
18
18
 
19
- it "should know what fret to use for a pitch" do
20
- e2.fret_no('G2').should eq 3
19
+ it "should know the fret no of a given note" do
21
20
  e2.fret_no('D#3').should eq 11
22
21
  end
23
22
 
24
- it "should know how the fret_no an octave up from any given fret_no" do
25
- InstrumentString.octave_up(0).should == 12
23
+ it "should know an octave up from a given fret" do
24
+ InstrumentString.octave_up(2).should == 14
26
25
  end
27
26
 
28
- it "should know how the fret_no an octave down from any given fret_no" do
29
- InstrumentString.octave_down(12).should == 0
27
+ it "should know an octave down from a given fret" do
28
+ InstrumentString.octave_down(14).should == 2
30
29
  end
31
30
 
32
- it { e2.to_s.should eq "E2" }
31
+ it "should know to_s" do
32
+ e2.to_s.should eq "E2"
33
+ end
33
34
 
34
- it "should know the matches for a note name" do
35
- e2.matches("F", :limit => 20).should eq [1,13]
36
- e2.matches("F", :limit => 30).should eq [1,13,25]
35
+ it "should be able to find a note" do
36
+ e2.find("F").should eq [1,13]
37
37
  end
38
38
 
39
- it "should know the matches for a chord"
39
+ it "should be able to find a chord" do
40
+ e2.find_chord(Chord.new(["D3","F#3","A3"])).should eq [2,5,10,14,17]
41
+ end
40
42
 
41
43
  end
data/stringed.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |gem|
9
9
  gem.authors = ["andrewthomascampbell@gmail.com"]
10
10
  gem.email = ["andrewthomascampbell.com"]
11
11
  gem.description = %q{A library for Stringed instruments.}
12
- gem.summary = %q{Recognizes chords and notes for any stringed instrument and any tuning.}
12
+ gem.summary = %q{Recognizes chords and notes for any stringed instrument.}
13
13
  gem.homepage = "https://github.com/andycamp/stringed"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stringed
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -88,7 +88,7 @@ rubyforge_project:
88
88
  rubygems_version: 1.8.24
89
89
  signing_key:
90
90
  specification_version: 3
91
- summary: Recognizes chords and notes for any stringed instrument and any tuning.
91
+ summary: Recognizes chords and notes for any stringed instrument.
92
92
  test_files:
93
93
  - spec/spec_helper.rb
94
94
  - spec/stringed/instrument_spec.rb