12
3

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 1 year has passed since last update.

Sonic Piで ネオクラシカルメタル系のフレーズを作ってみた。

Posted at

これは何?

過去に音楽系の記事をいくつか書いているのですが、最近 Sonic Pi というコードベースで音楽を作成できるツールを知ったので、少し遊んでみました。

過去書いた音楽系の記事:
Rubyでクラシカルなアルペジオを作ってみた
Scratch でジングルベルを演奏してみた

Sonic Pi とは

Rubyをベースにした記法で音楽を作成できるツールで、プログラミングや音楽の勉強などにも使われいるそうです。

DLはこちらから → https://sonic-pi.net/

画面の説明

スクショ

左上がコードの入力になっており、Rubyをベースにした記法で音楽を鳴らす命令を書いていく部分となります。
左下には、いくつかのタブが用意されていて詳しくは下記になります。

  • Turtorial
    • Sonic Pi の使い方が詳しく書いてあります
  • Examples
    • すぐにそれっぽい音が鳴らせるようなサンプルプログラムが紹介されています。
      • 選んだものを画面左上のコード入力欄にペーストして再生することで確認ができます。
  • Synths
    • 音を鳴らすための楽器の種類が紹介されています。
    • 実際に音階を奏でる場合にはこちらから何かしら一つの楽器を選ぶ必要があります。
  • Fx
    • SynthsやSamplesの音を加工するためのエフェクターが紹介されています。
  • Samples
    • 音のサンプルがいくつか紹介されています。楽器とは違い、音階を決めずにそのまま鳴らすものというイメージです。効果音というのが正しい表現かもしれません。
  • Lang
    • コードの記法についてのドキュメントが記載されています。

ドラムパターンの作成

まずは曲のテンポを決めます

use_bpmという命令で、曲のテンポを指定できるので、use_bpm 180と入力します。

スクショ

バスドラムを設定します

スクショ

SamplesのDrum Soundsの中にある :drum_heavy_kick を使用します。
※▶︎で音を確認できます。

メタル系のフレーズを作りたいので、バスドラムは16部音符でまるでツーバスのような感じで連打します。
Samplesの中にある音を再生させるには、sample :drum_heavy_kick とします。

一旦書いてみたコードがこちら

loop do
  sample :drum_heavy_kick
  sleep (1.0/4)
end

繰り返し構文とSleepという次の音を何拍後に鳴らすかという命令を組み合わせて作成しています。
今回は 16部音符で鳴らしたいので、1拍の4分の1としています。

スネアドラムを設定します

スクショ
SamplesのSnare Drumsの中にある :sn_zome を使用します。

スネアドラムは2拍目と4拍目で鳴らすのが一般的なので、先にSleepを挟みながら処理を書きます。

loop do
  sleep (1.0)
  sample :sn_zome
end

ライドシンバルを設定します

SamplesのDrum Soundsの中にある :drum_cymbal_soft を使用します。

ライドシンバルは各拍の頭で鳴らすのが一般的なので、バスドラムと似たような形で処理を書きます。

loop do
  sample :drum_cymbal_soft 
  sleep (1.0)
end

ドラム全体を合わせてみる

それぞれの設定が終わったので、一度再生ボタンを押してみますが、バスドラムの音しか鳴りません。
プログラムは基本的には上から下に順番に実行されるので、一番上のloop構文が無限ループしており、スネアに到達していません。

そこでSonic Piに用意されている live_loop という命令を使います。
live_loopは各ループを同時に鳴らしてくれます。

なので、各 loop命令をlive_loopに置き換えていきます。
live_loopには名前が必要なので合わせて設定していきます。

live_loop :drums_k do
  sample :drum_heavy_kick
  sleep (1.0/4)
end

live_loop :drums_s do
  sleep (1.0)
  sample :sn_zome
end

live_loop :drums_h do
  sample :drum_cymbal_open 
  sleep (1.0)
end

これでドラムパターンは完成です。
とても激しいドラムの音が聞こえてきたかと思います。

アルペジオパターンの作成

ネオクラシカルといえば、アルペジオを主体としたフレーズが多く使われるので、メインとなるアルペジオを作成していきます。

音色を設定します

スクショ

Synthsの中にある :piano を使用します。
(色々とそれっぽい音を探してみたのですが、いまいち合うものがなかったので、大人しくピアノの音色を使うことにしました)

Synths の音を鳴らす場合には、use_synth :pianoをいう感じに音を鳴らす前に宣言する必要があります。

use_synth :piano
# 音階を書いていく
end

音階を設定します

折角なので、Rubyでクラシカルなアルペジオを作ってみたで使用したアルペジオを再利用します。

音階を鳴らすためには play note(symbol_or_number)を使います。
前回作成したアルペジオは6音で1パターンとしていたので、今回はドラムパターンとリズムが合うように3連符で設定してきます。

use_synth :piano
play :E3
sleep (1.0/3)
play :A3
sleep (1.0/3)
play :C4
sleep (1.0/3)
play :E4
sleep (1.0/3)
play :C4
sleep (1.0/3)
play :A3
sleep (1.0/3)
...

ドラムパターンとアルペジオを合わせて完成

繰り返し回数なども調整しつつ、実際に完成したのがこちらになります。
スクリーンショット 2023-06-19 17.20.22.png

use_bpm 180

live_loop :drums_k do
  sample :drum_heavy_kick
  sleep (1.0/4)
end

live_loop :drums_s do
  sleep (1.0)
  sample :sn_zome
end

live_loop :drums_h do
  sample :drum_cymbal_open
  sleep (1.0)
end

live_loop :arpeggio do
  use_synth :piano
  4.times do
    play :E3
    sleep (1.0/3)
    play :A3
    sleep (1.0/3)
    play :C4
    sleep (1.0/3)
    play :E4
    sleep (1.0/3)
    play :C4
    sleep (1.0/3)
    play :A3
    sleep (1.0/3)
  end
  4.times do
    play :D3
    sleep (1.0/3)
    play :G3
    sleep (1.0/3)
    play :B3
    sleep (1.0/3)
    play :D4
    sleep (1.0/3)
    play :B3
    sleep (1.0/3)
    play :G3
    sleep (1.0/3)
  end
  4.times do
    play :C3
    sleep (1.0/3)
    play :F3
    sleep (1.0/3)
    play :A3
    sleep (1.0/3)
    play :C4
    sleep (1.0/3)
    play :A3
    sleep (1.0/3)
    play :F3
    sleep (1.0/3)
  end
  4.times do
    play :B2
    sleep (1.0/3)
    play :E3
    sleep (1.0/3)
    play :Ab3
    sleep (1.0/3)
    play :B3
    sleep (1.0/3)
    play :Ab3
    sleep (1.0/3)
    play :E3
    sleep (1.0/3)
  end
end

音源

最後に

Rubyを使ったことがある人であれば、比較的スムーズにコードで音楽が作れるので、普通に楽しかったです。
また、用意されている音源やより高度な命令も用意されているので、コードベースでかなり本格的な音楽も作成できそうだなと思いました。

音楽を作りながら、プログラムの基本的な構文やアルゴリズムの勉強もできるので、教育現場でもかなり役立ちそうに思いました!

12
3
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
12
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?