リスト、tickとlook、ring— Sonic Pi 6

前回まで、基礎的な音の出し方について学習してきました。

今回はリストというプログラミングの機能や、Sonic Pi特有のtickやringを見てみます。より便利に音が作れるようになると思います!


リスト

プログラミングをやった方はご存知かと思いますが、リストはデータを一列に並べたものになります。 [ ] でくくり、カンマで区切ります。下記のような感じです。

[60,62,64]  # C4,D4,E4の音の入ったリスト

このリストの中身は左から、 0番、1番、2番の番号が振られています。リストの後に [0] を書くと0番目を取り出すことができます。

play [60,62,64][0] #60を取り出し、playする。

また、リストは名前をつけて保存しておくこともできます。

a = [60,62,64]
play a[0] #60

名前をつけておくとコードを書く量が少なくなって便利だと思います。

a = [60,62,64]
play a[0] #60
sleep 0.5
play a[1] #62
sleep 1
play a[2] #64
sleep 1
play a[1] #64

音だけでなく sleep の時間などもリストにできます。

a = [60,62,64]
b = [0.5,1]
play a[0]  #60
sleep b[0] #0.5
play a[1] #62
sleep b[1] #1.0
play a[2] #64
sleep b[1] #1.0
play a[1] #64

tickとlook

tickはSonic Pi特有の機能で、リストを順繰りに読み込んでくれる機能です。 live_loop を使ってみましょう。

a = [60,62,64]
live_loop :one do
play a.tick
sleep 0.5
end

上を実行すると、60、62、64の音が連続してなります。これはtickがaの0番目を playsleep し、続いて1番目を playsleep し、・・・を繰り返したためです。tickは読み込まれるたびに数字が増えていきます。

でも上では3回音がなり止まってしまいました。何が起きていたか、見てみましょう。下記のコードでは print look を追加しています。 look はその時点での tick の番号を読み込むことができます。( tick を呼び出してしまうと数字が進んでしまう)

a = [60,62,64]
live_loop :one do
play a.tick
print look
sleep 0.5
end

すると右のログに下記のようなものが表示され続けるかと思います。

{run: 38, time: 2.0}
├─ cue :one
├─ synth :beep, {note: :rest}
└─ 4

この時点で look ( =tick )が 4 になっていることがわかります。 a の4番目の音を鳴らそうとしてもaは3つしかないため、読み込む数字がなく、音がならなかったようです。ではここで、新たな機能である ring を見て観ましょう。

ring

ringはリストの終わりと始めがくっついてるようなものです。下記のように記載します。

[60,62,64].ring
(ring 60,62,64)

ringを用いると、先ほどのように番号がオーバーしても、はじめに戻って音を鳴らしてくれます。

a = [60,62,64].ring
live_loop :one do
play a.tick
sleep 0.5
end

これでいつまでも繰り返し音を鳴らしてくれるようになりました!


次はランダムな数字の作り方を扱います。