parabuzzle (owner)

Revisions

gist: 214755 Download_button fork
public
Public Clone URL: git://gist.github.com/214755.git
Embed All Files: show embed
Ruby #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!ruby
#
# A simple script to figure out the key of a song based on the scale that fits
# Probably many better ways of doing this but it works
 
#Setup Major scales
@keys = Hash.new
@keys.store('c_major',["a","b","c","d","e","f","g"])
@keys.store('g_major',["a","b","c","d","e","fs","g"])
@keys.store('d_major',["a","b","cs","d","e","fs","g"])
@keys.store('a_major',["a","b","cs","d","e","fs","gs"])
@keys.store('e_major',["a","b","cs","ds","e","fs","gs"])
@keys.store('b_major',["as","b","cs","ds","e","fs","gs"])
@keys.store('fsharp_major',["as","b","cs","ds","es","fs","gs"])
@keys.store('csharp_major',["as","bs","cs","ds","es","fs","gs"])
#flats
@keys.store('f_major',["a","bf","c","d","e","f","g"])
@keys.store('bflat_major',["a","bf","c","d","ef","f","g"])
@keys.store('eflat_major',["af","bf","c","d","ef","f","g"])
@keys.store('aflat_major',["af","bf","c","df","ef","f","g"])
@keys.store('dflat_major',["af","bf","c","df","ef","f","gf"])
@keys.store('gflat_major',["af","bf","cf","df","ef","f","gf"])
@keys.store('cflat_major',["af","bf","cf","df","ef","ff","gf"])
 
#Setup Minor scales
@keys.store('a_minor',["a","b","c","d","e","f","g"])
@keys.store('e_minor',["a","b","c","d","e","fs","g"])
@keys.store('b_minor',["a","b","cs","d","e","fs","g"])
@keys.store('fsharp_minor',["a","b","cs","d","e","fs","gs"])
@keys.store('csharp_minor',["a","b","cs","ds","e","fs","gs"])
@keys.store('gsharp_minor',["as","b","cs","ds","e","fs","gs"])
@keys.store('dsharp_minor',["as","b","cs","ds","es","fs","gs"])
@keys.store('asharp_minor',["as","bs","cs","ds","es","fs","gs"])
#flats
@keys.store('d_minor',["a","bf","c","d","e","f","g"])
@keys.store('g_minor',["a","bf","c","d","ef","f","g"])
@keys.store('c_minor',["af","bf","c","d","ef","f","g"])
@keys.store('f_minor',["af","bf","c","df","ef","f","g"])
@keys.store('bflat_minor',["af","bf","c","df","ef","f","gf"])
@keys.store('eflat_minor',["af","bf","cf","df","ef","f","gf"])
@keys.store('aflat_minor',["af","bf","cf","df","ef","ff","gf"])
 
def whatkeys?(array)
  key = Hash.new
  array.each do |note|
    @keys.each do |k,n|
      if n == array.sort
        key.store(k,n)
      end
    end
  end
  return key
end
 
test = ["c","bf","a","ef","d","f","g"]
key = whatkeys?(test)
key.each do |k,v|
  puts k
end