リング

標準のリストで面白いスピンオンにリングがあります。いくつかのプログラミングを理解していれば、リングバッファやリングアレイなどをみたことがあるかもしれません。ここでは、まさにring(環状リスト)についてみていきます。 - それは短く、簡単です。

リストの前章では、インデックスの機構を使用してリストから要素を取り出す方法を説明しました。

puts [52, 55, 59][1]

もしインデックス100を取り出そうとしら、何が起こるでしょう?まあ、3つの要素しか持たないリストの中でインデックス100の要素は、明らかにありません。だからSonic Piは空を意味する nil を返すでしょう。

ここでは、現在のビート(拍子)が継続的に増加するcounterを考えてみましょう。まずはカウンターとリストを作成します。

counter = 0
notes = [52, 55, 59]

これで、リストの音符にアクセスするためのカウンタを使用することができます。

puts notes[counter]

素晴らしい、52を取得しました。カウンターを増やして別の音符を取得してみましょう。

counter = (inc counter)
puts notes[counter]

すごいでしょう、 55を取得し、それを再び繰り返すならば59を得ます。さらに繰り返す場合は、リスト内の数が不足しnil`になるでしょう。では、ちょうどループのはじめに戻り、再びリストの先頭から開始したい場合はどうしたらようでしょうか?そのためにリングを使います。

リングの作成

2つの方法の内、どちらか1つの方法でリングを作成することができます。どちらもパラメータとしての環(円環構造を持つリスト)要素であるring関数を利用します。

(ring 52, 55, 59)

また、正常のリストを取得し、.ringメッセージをそれを送りリングに変換することができます。

[52, 55, 59].ring

リングのインデックス化

いったんリングを取得したら、インデックスがマイナスもしくはリングの数値より大きい場合を除いて、通常のリストを使用する場合とまったく同じ方法で使用することができます。、そしてリングの1つの要素として括弧でくくられて表示されます。

(ring 52, 55, 59)[0] #=> 52
(ring 52, 55, 59)[1] #=> 55
(ring 52, 55, 59)[2] #=> 59
(ring 52, 55, 59)[3] #=> 52
(ring 52, 55, 59)[-1] #=> 59

リングを使用する

現在のビート(拍子)の値を表すために変数を使用しているとしましょう​​。 その変数は、現在表しているビート値に関わらず、インデックスとして音符を演奏するためや、 リリースタイム(放出時間)、リングに格納されている有用な値として使うことができます。

スケールとコードはリング

知っておくと役立つこととして、scale(音階)とchord (和音)によって返されたリストもリングであり、任意のインデックスでそれらにアクセスすることを可能にします。

リングのコンストラクタ(構成子)

加えて、リングを構成する多くの機能があります。

詳細については、それら個々のドキュメンテーションを見てください。