key_change 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/key_change.rb +52 -91
  3. metadata +3 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9bfc6b47c91ccf65c17feba58b638104b3f190a
4
- data.tar.gz: 321c735ca9c0cd2c8fb453abc6e42010448fb9e1
3
+ metadata.gz: 1a54f17413b6a34e150c7004034f67f7bbf00703
4
+ data.tar.gz: a8651b1b3c5c44f355630d661c0dd66e442a17f3
5
5
  SHA512:
6
- metadata.gz: 4c8fdaf73f7e931cc8c187e6b4593f7333b21a503050ae760f1d760c8e2d87ac1acf82e61aaf89f0ce9d7f44a469e49d5cc01a72a2f741ebdc5b7af4bac3a021
7
- data.tar.gz: e6f10d45200e330f2246499b5ba92d38c5efa95c76bf9947acd37016add6b0a4b1fde207d5bb74aeefeeb4eecd44cfc8653485ceb3af1e216aa4c87040eaa539
6
+ metadata.gz: 3ec0e319e3247508228a12416b1dc9a1c795e764e4a71f6a123e1f24b5b1ead7b9229fae355c12f15b33a5db0e49ccaefb778b5fa488c529752280b8fe36e12e
7
+ data.tar.gz: 88ccc06a6c2b087474c44f81406fa982057c4267ea57e76b030c3be6d5c86aabb6c01b8e846768c829a77cab475c7d29901983d1b66fa88600d83959da6aad71
data/lib/key_change.rb CHANGED
@@ -1,56 +1,48 @@
1
+ # 必要な変数の定義
2
+ NOTES_SHARP = ["C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯", "A", "A♯", "B"]
3
+ NOTES_FLAT = ["C", "D♭", "D", "E♭", "E", "F", "G♭", "G", "A♭", "A", "B♭", "B"]
4
+
1
5
  # 便利なファンクションの定義
2
- def Sharp? (note)
3
- if note.match(/♯/) || note.match(/\#/)
4
- return true
5
- else
6
- return false
6
+ def sharp? (note)
7
+ note.match(/♯/) || note.match(/#/)
8
+ end
9
+
10
+ def flat? (note)
11
+ note.match(/♭/) || note.match(/b/)
12
+ end
13
+
14
+ # 「b」か「#」であったら変換されます
15
+ def replace(note)
16
+ if sharp?(note)
17
+ note.gsub!(/#/, "♯")
18
+ elsif flat?(note)
19
+ note.gsub!(/b/, "♭")
7
20
  end
8
21
  end
9
22
 
10
- def Flat? (note)
11
- if note.match(/♭/) || note.match(/b/)
12
- return true
23
+ # noteの位置を調べて返します
24
+ # C と C♯ の差で (position = 1 - 0) にならないように「1」を足します
25
+ def note_position(note)
26
+ if flat?(note)
27
+ NOTES_FLAT.index(note) + 1
13
28
  else
14
- return false
29
+ NOTES_SHARP.index(note) + 1
15
30
  end
16
31
  end
17
32
 
33
+ # 主要のメソッド
34
+ def change (original_chords, old_key, new_key, option)
18
35
 
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 = []
36
+ chords = Marshal.load(Marshal.dump(original_chords))
26
37
 
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
+ replace(old_key)
39
+ replace(new_key)
40
+ chords.each do |chord|
41
+ replace(chord)
38
42
  end
39
43
 
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
44
+ old_key_position = note_position(old_key)
45
+ new_key_position = note_position(new_key)
54
46
 
55
47
  # キーの差を計算する
56
48
  if new_key_position == old_key_position
@@ -63,14 +55,7 @@ def Change (chords, old_key, new_key, option)
63
55
  key_up = true
64
56
  end
65
57
 
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
58
+ chords.map do |chord|
74
59
 
75
60
  addition = ""
76
61
  case chord
@@ -102,48 +87,26 @@ def Change (chords, old_key, new_key, option)
102
87
  addition = "aug"
103
88
  when /11/ then
104
89
  addition = "11"
105
-
106
90
  end
91
+
107
92
  # chord を上手く計算するために、addition を chord から取り除く
108
93
  if addition != ""
109
94
  chord.gsub!(addition, "")
110
95
  end
111
96
 
112
-
113
-
97
+ original_position = note_position(chord)
114
98
  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
99
+ new_position = original_position + difference
100
+ if new_position > 12
101
+ new_position -= 12
129
102
  end
130
103
  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
104
+ new_position = original_position - difference
105
+ if new_position < 1
106
+ new_position += 12
145
107
  end
146
108
  end
109
+ new_position -= 1
147
110
 
148
111
  if option == :default
149
112
  option = :sharp
@@ -151,25 +114,23 @@ def Change (chords, old_key, new_key, option)
151
114
 
152
115
  case option
153
116
  when :sharp then
154
- if Flat?(chord)
155
- new_chords << notes_flat[new_position] + addition
117
+ if flat?(chord)
118
+ NOTES_FLAT[new_position] + addition
156
119
  else
157
- new_chords << notes_sharp[new_position] + addition
120
+ NOTES_SHARP[new_position] + addition
158
121
  end
159
122
  when :flat then
160
- if Sharp?(chord)
161
- new_chords << notes_sharp[new_position] + addition
123
+ if sharp?(chord)
124
+ NOTES_SHARP[new_position] + addition
162
125
  else
163
- new_chords << notes_flat[new_position] + addition
126
+ NOTES_FLAT[new_position] + addition
164
127
  end
165
128
  when :all_sharp then
166
- new_chords << notes_sharp[new_position] + addition
129
+ NOTES_SHARP[new_position] + addition
167
130
  when :all_flat then
168
- new_chords << notes_flat[new_position] + addition
131
+ NOTES_FLAT[new_position] + addition
169
132
  end
170
133
 
171
- end #chords.eachの終わり
172
-
173
- return new_chords
134
+ end #chords.mapの終わり
174
135
 
175
136
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: key_change
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Arcangel Zayas
@@ -11,9 +11,8 @@ cert_chain: []
11
11
  date: 2016-07-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
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
14
+ Music key change. Please visit the following link for documentation: https://github.com/gazayas/key_change
15
+ Rubyで転調を行う。詳細はこちら:https://github.com/gazayas/key_change
17
16
  email: g-zayas@hotmail.com
18
17
  executables: []
19
18
  extensions: []