ブログは死なず、ただ放置されるのみ。

終わっちゃいましたね。

Ruby スクリプトでベースのポジションを覚える

実は私はベーシストです。
といいつつ白状しますが、実はフレッドのどこ押さえたらどの音が出るのかちゃんと覚えてません。
ところで、今は亡き超名ベーシスト、ジャコ・パストリアスがベースを始めるときに、やはりミュージシャンだった父親にまず何をしたらいいか聞いたところ、「全ポジションで何の音が出るのか暗記しろ」と言われて、すぐに暗記してしまったという逸話(例によって記憶あいまい)を思い出して、自分もちゃんと覚えようと思って、そのためのクイズを出してくれる Ruby スクリプトを作ってみました。例によって動作は ASR1.8.4.5で確認しています。

# bass_quiz.rb

str = []
#           3 5 7 9  
str[3] = "------------"   #G
str[2] = "-----------'"   #D
str[1] = "--'-'-'-'---"   #A
str[0] = "-----------'"   #E

scale = ["E", "F", "F#", "G", "G#", "A", "A#", "B", "C", "C#", "D", "D#"]
tune  = [0, 5, 10, 2]

q_str = rand(3)
q_pos = rand(11)

str[q_str][q_pos] = "?"

print "   3 5 7 9\n"
str.reverse_each do |i|
	print "|", i, "\n"
end

print "?"

if gets.chop.upcase == scale[(q_pos + tune[q_str] + 1) % 12]
	print "正解\n"
else
	print "正解は", scale[(q_pos + tune[q_str] + 1) % 12], "\n"
end
d:\>bass_quiz.rb
   3 5 7 9
------------
-----------'
--'-'-'-'---
?----------'
?

こんな風に無愛想な画面ですが、?が示すポジションの音を入力してください。大文字小文字は区別されません。半音はフラット(b)ではなくシャープ(#)で入力してください。

d:\>bass_quiz.rb
   3 5 7 9
------------
-----------'
--'-'-'-'---
-?---------'
?f# 正解 d:\> d:\>bass_quiz.rb 3 5 7 9
------------
-----------'
-?'-'-'-'---
-----------'
?c 正解はB d:\>

あくまで無愛想に正解か、不正解の場合は答えを表示します。

ちなみに写真は、今回のスクリプトを書く際に、フレットのどこにドットが入っていたかを忘れたので確認するために携帯で取ったマイベースで、フェンダージャパンのミドルスケールのジャズベースというすでに公式サイトのカタログに載っていない軟弱者向けの一品です。手が小さいからロングスケールはつらいのよ…。