3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Sonic Pi でペンタトニックスケールを扱う(和音/単音、ランダムな要素を使う)

Last updated at Posted at 2021-11-20

以下の記事で使ってきた Sonic Pi の話です。

その中でペンタトニックスケールを扱ってみます。

ペンタトニックスケールについて

自分は音楽関連は詳しくないので、説明は以下のサイトなどに譲ります。
これを使おうとした理由は、ランダムに鳴らした音が良い感じに聞こえるようにしたい、というものです。

Sonic Pi と ペンタトニックスケール

ペンタトニックスケールを扱う方法

Sonic Pi では :major_pentatonic などという指定ができるものがあるようです。

アプリでも見られる公式チュートリアルの 8.3 に以下の記載があります。
スケール.jpg

その前の 8.2 に以下の記載などもありますが、単純に和音として鳴らすなら以下のような形になるようです。

和音.jpg

試しにループやスリープを含め、以下のようにしてみました。
単純に一定間隔で和音が鳴るだけ、のものになります。

loop do
  play scale(:c, :major_pentatonic)
  sleep 1
end

num_octaves を組み合わせた形も試してみました。

loop do
  play scale(:c, :major_pentatonic, num_octaves: 3)
  sleep 1
end

ランダムに音を選んで鳴らす

こちらは、スリープの時間を半分にして、ランダムに 1音ずつ選んで鳴らすものです。

loop do
  play choose(scale(:C, :major_pentatonic, num_octaves: 3))
  sleep 0.5
end

use_synth と組み合わせてみました。

use_synth :tb303
loop do
  play choose(scale(:C, :major_pentatonic, num_octaves: 3))
  sleep 0.25
end

use_bpm も使ってみたものです。

use_bpm 120
use_synth :tb303
loop do
  play choose(scale(:C3, :major_pentatonic, num_octaves: 3))
  sleep 0.25
end

ランダムに音を選んで鳴らす2

さらに別パターンも試してみます。
play_pattern_timed を使ったバージョンです。

loop do
  use_octave [1, 2, 3].choose
  play_pattern_timed scale(:c3, :major_pentatonic), 0.125, release: 0.1
  sleep [0.25, 0.25, 0.5].choose
end
use_bpm 80
use_synth :tb303
loop do
  use_octave [1, 2, 3].choose
  play_pattern_timed scale(:c3, :major_pentatonic, num_octaves: 2), 0.125, release: 0.1
  sleep [0.25, 0.25, 0.5].choose
end

ランダムに音を選んで鳴らす2

live_loopampcutoff なども使ってみます。

use_bpm 80

live_loop :mp do
  use_synth :tb303
  use_octave [1, 2].choose
  play choose(scale(:C, :major_pentatonic, num_octaves: 2)), amp: rrand(0.3, 0.4), cutoff: rrand(60, 100)
  sleep [0.25, 0.25, 0.5].choose
end

live_loop :mp2 do
  use_synth :tech_saws
  play choose(scale(:C, :major_pentatonic)), amp: rrand(0.5, 0.7), cutoff: rrand(60, 120)
  sleep 0.25
end

最後のものは、動かしてみた時の様子を動画にしてみました。

改良の余地はいろいろあると思うのですが、音楽・作曲とかが全く分からない自分が 10行ちょっとのコードを書いただけで、こんな感じの音が出来上がるのは面白いと感じました。

参考情報(後からも、いくつか追加)

●メロディーを鳴らす
 https://sonic-pi.mehackit.org/exercises/ja/01-introduction/02-play-a-melody.html
メロディーを鳴らす.jpg

●Class: SonicPi::Scale — Documentation for samaaron/sonic-pi (main)
 https://www.rubydoc.info/github/samaaron/sonic-pi/SonicPi/Scale
ペンタトニック_scale.jpg

●tick
 https://sonic-pi.mehackit.org/exercises/ja/04-generate-sounds/02-tick.html

live_loop :arp do
  play (scale :e3, :minor_pentatonic).tick, release: 0.1
  sleep 0.125
end

live_loop :arp2 do
  use_synth :dsaw
  play (scale :e2, :minor_pentatonic, num_octaves: 3).tick, release: 0.25
  sleep 0.25
end

●変数
 https://sonic-pi.mehackit.org/exercises/ja/04-generate-sounds/03-variables.html

上記の改変版1

live_loop :melody do
  use_synth :blade
  r = [0.25, 0.25, 0.5, 1].choose
  play (scale(:C, :major_pentatonic, num_octaves: 2)).choose, attack: 0, release: r
  sleep r
end

上記の改変版2

live_loop :bass do
  use_synth :fm
  n = (scale :C, :major_pentatonic).tick
  3.times do
    play n
    sleep 1
  end
  play n
  sleep 0.5
  play (scale :C, :major_pentatonic).tick
  sleep 0.5
end
live_loop :bass do
  use_synth :fm
  r = [0.25, 0.25, 0.5, 1].choose
  n = (scale :C, :major_pentatonic, num_octaves: 2).tick
  play n, attack: 0, release: r
  sleep 0.35
end
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?