このセクションでは、非常に有用なデータ構造であるリストについて見ていきます。以前に我々はランダム化の章でリストについて簡単に触れました。音符のリストから無作為に選んで再生する次のようなコードです。
play choose([50, 55, 62])
ここでは、コードやスケールを表現するためのリストの使い方についても見ていきます。最初に、コードを演奏する方法をおさらいしてみましょう。sleep
を使用しない場合、すべての音が同時に演奏されることを思い出してください。
play 52
play 55
play 59
このコードの別の表現方法を見てみましょう。
1つの方法は、[52, 55, 59]のように、すべての音符をリストに配置することです。使いやすいplay関数は、リストになった音符をどのように演奏するかをすぐに理解します。次のコードを試してみてください。
play [52, 55, 59]
おー、これは読みやすいですね。音符リストの演奏は、通常のオプションのいずれも妨げになりません。
play [52, 55, 59], amp: 0.3
もちろん、MIDIの代わりに伝統的な音符の名前を使うこともできます。
play [:E3, :G3, :B3]
多少の音楽理論の知識を持っている方なら、3オクターブでEマイナーのコードが演奏されたことがわかるでしょう。
もう1つの非常に便利なリストの機能は、リストから情報を取得する機能です。これは少し奇妙に聞こえるかもしれなませんが、本の23ページを開いてくださいと誰かに頼まれることよりも簡単なことです。リストの場合は、インデックス23の要素は何ですか? と尋ねればいいのです。唯一、奇妙なことは、プログラミングのインデックスは通常、1ではなく0から開始されることです。
リストのインデックスは1,2,3と数える代わりに、0,1,2と数えていきます。
それではもう少し詳細にみてみましょう。次のリストを見てください。
[52, 55, 59]
これは特に難しいことは何もありません。リストの2番目の要素は何でしょうか? そう、もちろん55
です。簡単ですね。それでは、同様にコンピュータが答えることができるかどうかを見てみましょう。
puts [52, 55, 59][1]
以前にこのようなものを見たことがない場合、少し奇妙に見えるかもしれませんが、大丈夫。私を信頼してください。難しいことはありません。上記の行には、puts
という命令、リストの52, 55, 59
、インデックスが[1]
の3つの部分があります。まずはじめに、Sonic Piへログの中から答えを出力させるためputsを命令します。次にリストを与えています。そして最後に第2の要素を問い合わせています。角括弧でインデックスを囲む必要があり、カウントは0
で始まるので、2番目の要素のインデックスは1
となります。下記、みてみましょう。
# indexes: 0 1 2
[52, 55, 59]
コードputs [52, 55, 59][1]
を実行してみてください。ログに55
と表示されるでしょう。インデックス1
を別のインデックスに変えてみてください。さらに長いlist
を与えて、どのように演奏で使えるのか考えてみてください。例えば、どのような音楽の構造が音符の連続として表現されるか? などです。