key_change 1.0.1

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/key_change.rb +175 -0
  3. metadata +46 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e9bfc6b47c91ccf65c17feba58b638104b3f190a
4
+ data.tar.gz: 321c735ca9c0cd2c8fb453abc6e42010448fb9e1
5
+ SHA512:
6
+ metadata.gz: 4c8fdaf73f7e931cc8c187e6b4593f7333b21a503050ae760f1d760c8e2d87ac1acf82e61aaf89f0ce9d7f44a469e49d5cc01a72a2f741ebdc5b7af4bac3a021
7
+ data.tar.gz: e6f10d45200e330f2246499b5ba92d38c5efa95c76bf9947acd37016add6b0a4b1fde207d5bb74aeefeeb4eecd44cfc8653485ceb3af1e216aa4c87040eaa539
data/lib/key_change.rb ADDED
@@ -0,0 +1,175 @@
1
+ # 便利なファンクションの定義
2
+ def Sharp? (note)
3
+ if note.match(/♯/) || note.match(/\#/)
4
+ return true
5
+ else
6
+ return false
7
+ end
8
+ end
9
+
10
+ def Flat? (note)
11
+ if note.match(/♭/) || note.match(/b/)
12
+ return true
13
+ else
14
+ return false
15
+ end
16
+ end
17
+
18
+
19
+ # 主本のメソッド
20
+ def Change (chords, old_key, new_key, option)
21
+
22
+ # 必要な変数の定義
23
+ notes_sharp = ["C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯", "A", "A♯", "B"]
24
+ notes_flat = ["C", "D♭", "D", "E♭", "E", "F", "G♭", "G", "A♭", "A", "B♭", "B"]
25
+ new_chords = []
26
+
27
+ # b か # であったら変換してくれる
28
+ if Sharp?(old_key)
29
+ old_key.gsub!(/\#/, "♯")
30
+ elsif Flat?(old_key)
31
+ old_key.gsub!(/\b/, "♭")
32
+ end
33
+
34
+ if Sharp?(new_key)
35
+ new_key.gsub!(/\#/, "♯")
36
+ elsif Flat?(new_key)
37
+ new_key.gsub!(/b/, "♭")
38
+ end
39
+
40
+
41
+ # 古いキーの位置を調べて取得する
42
+ if Flat? (old_key)
43
+ old_key_position = notes_flat.index(old_key) + 1
44
+ else
45
+ old_key_position = notes_sharp.index(old_key) + 1
46
+ end
47
+
48
+ # 新しい方も
49
+ if Flat? (new_key)
50
+ new_key_position = notes_flat.index(new_key) + 1
51
+ else
52
+ new_key_position = notes_sharp.index(new_key) + 1
53
+ end
54
+
55
+ # キーの差を計算する
56
+ if new_key_position == old_key_position
57
+ return chords
58
+ elsif new_key_position < old_key_position
59
+ difference = old_key_position - new_key_position
60
+ key_up = false
61
+ else
62
+ difference = new_key_position - old_key_position
63
+ key_up = true
64
+ end
65
+
66
+ chords.each do |chord|
67
+
68
+ # メソッドが終わってもオリジナルのコードが影響を受けてgsub!されるので注意してください
69
+ if Sharp?(chord)
70
+ chord.gsub!(/\#/, "♯")
71
+ elsif Flat?(chord)
72
+ chord.gsub!(/b/, "♭")
73
+ end
74
+
75
+ addition = ""
76
+ case chord
77
+ when /dim7/ then
78
+ addition = "dim7"
79
+ when /dim/ then
80
+ addition = "dim"
81
+ when /2/ then
82
+ addition = "2"
83
+ when /sus4/ then
84
+ addition = "sus4"
85
+ when /sus/ then
86
+ addition = "sus"
87
+ when /maj7/ then
88
+ addition = "maj7"
89
+ when /maj/ then
90
+ addition = "maj"
91
+ when /m7/ then
92
+ addition = "m7"
93
+ when /m/ then
94
+ addition = "m"
95
+ when /7/ then
96
+ addition = "7"
97
+ when /6/ then
98
+ addition = "6"
99
+ when /9/ then
100
+ addition = "9"
101
+ when /aug/ then
102
+ addition = "aug"
103
+ when /11/ then
104
+ addition = "11"
105
+
106
+ end
107
+ # chord を上手く計算するために、addition を chord から取り除く
108
+ if addition != ""
109
+ chord.gsub!(addition, "")
110
+ end
111
+
112
+
113
+
114
+ if key_up == true
115
+ if Flat?(chord)
116
+ original_position = notes_flat.index(chord) + 1
117
+ new_position = original_position + difference
118
+ if new_position > 12
119
+ new_position -= 12
120
+ end
121
+ new_position -= 1
122
+ else
123
+ original_position = notes_sharp.index(chord) + 1
124
+ new_position = original_position + difference
125
+ if new_position > 12
126
+ new_position -= 12
127
+ end
128
+ new_position -= 1
129
+ end
130
+ else # key_up == false
131
+ if Flat?(chord)
132
+ original_position = notes_flat.index(chord) + 1
133
+ new_position = original_position - difference
134
+ if new_position < 1
135
+ new_position += 12
136
+ end
137
+ new_position -= 1
138
+ else
139
+ original_position = notes_sharp.index(chord) + 1
140
+ new_position = original_position - difference
141
+ if new_position < 1
142
+ new_position += 12
143
+ end
144
+ new_position -= 1
145
+ end
146
+ end
147
+
148
+ if option == :default
149
+ option = :sharp
150
+ end
151
+
152
+ case option
153
+ when :sharp then
154
+ if Flat?(chord)
155
+ new_chords << notes_flat[new_position] + addition
156
+ else
157
+ new_chords << notes_sharp[new_position] + addition
158
+ end
159
+ when :flat then
160
+ if Sharp?(chord)
161
+ new_chords << notes_sharp[new_position] + addition
162
+ else
163
+ new_chords << notes_flat[new_position] + addition
164
+ end
165
+ when :all_sharp then
166
+ new_chords << notes_sharp[new_position] + addition
167
+ when :all_flat then
168
+ new_chords << notes_flat[new_position] + addition
169
+ end
170
+
171
+ end #chords.eachの終わり
172
+
173
+ return new_chords
174
+
175
+ end
metadata ADDED
@@ -0,0 +1,46 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: key_change
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Gabriel Arcangel Zayas
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-07-17 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |-
14
+ Change the chords of an array of any length by providing the array, the original key and the new key in the arguments of the function
15
+ Please visit the following link for documentation: https://github.com/gazayas/key_change
16
+ 音楽のchordの配列を楽に転調する。詳細はこちら:https://github.com/gazayas/key_change
17
+ email: g-zayas@hotmail.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - lib/key_change.rb
23
+ homepage: http://www.sanbika.jp
24
+ licenses: []
25
+ metadata: {}
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ requirements: []
41
+ rubyforge_project:
42
+ rubygems_version: 2.5.1
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: Do a key change in music
46
+ test_files: []