SMARTCAMP Engineer Blog

スマートキャンプ株式会社(SMARTCAMP Co., Ltd.)のエンジニアブログです。業務で取り入れた新しい技術や試行錯誤を知見として共有していきます。

クリスマスイブなのでSonicPiを使って3時間でジングルベル(曲)作ってみた

f:id:ug_23:20191224192627j:plain

こんにちは。スマートキャンプの郷田です。

本記事はスマートキャンプ Advent Calendar 2019 - Qiitaの24日目の記事です。

私は普段から趣味で楽器演奏や曲作りをしているので、前から少し気になってたSoundPiを使ったサウンドプログラミングで簡単なループ音源を作ってみようと思います!

SonicPiとは?

コードベースで音楽制作のできる無料ツールです。

sonic-pi.net

Windows、macOS、Raspberry Piで実行することができます。

利用時の画面はこちら

f:id:sc_goda:20191224184524g:plain

作成したものはこちら

  • 今回は3時間でできるところまでを目指して作成してみました。

  • 最初の1時間でチュートリアル、ヘルプを読み、残りの2時間でコーディングをしました。

  • チュートリアルはダウンロードしたアプリケーション内で閲覧でき、日本語に翻訳されているため始めるには十分な情報量です。

  • 曲の題材として、この記事はクリスマスイブの公開のため、ジングルベルを選曲しました。

  • 作成した時の気分でEDM風?なアレンジにしてみました。

※10秒程度の音源が再生されます soundcloud.com

コード

SonicPi

# Sonic Pi v3.1

## setting

use_bpm 132


## main

live_loop :ch_lead do
  with_fx :octaver do
    lead_s :E4, 0.5
    lead_s :E4, 0.5
    lead_s :E4, 1
    
    lead_s :E4, 0.5
    lead_s :E4, 0.5
    lead_s :E4, 1
    
    lead_s :E4, 0.5
    lead_s :G4, 0.5
    lead_s :C4, 0.75
    lead_s :D4, 0.25
    
    lead_s :E4, 2
    
    lead_s :F4, 0.5
    lead_s :F4, 0.5
    lead_s :F4, 0.75
    lead_s :F4, 0.25
    
    lead_s :F4, 0.5
    lead_s :E4, 0.5
    lead_s :E4, 0.5
    lead_s :E4, 0.25
    lead_s :E4, 0.25
    
    lead_s :G4, 0.5
    lead_s :G4, 0.5
    lead_s :F4, 0.5
    lead_s :D4, 0.5
    
    lead_s :C4, 2
  end
end

live_loop :ch_bass do
  2.times do
    bass_s :C1, 0.5
  end
  sleep 3
  
  3.times do
    bass_s :C1, 1
  end
  sleep 1
  
  2.times do
    bass_s :F1, 0.5
  end
  sleep 3
  
  2.times do
    bass_s :G1, 1
  end
  bass_s :C1, 2
end

live_loop :ch_beat do
  with_fx :reverb, mix: 0.5 do
    2.times do
      sample :bd_haus
      sample :bd_klub
      sleep 0.5
    end
    sleep 1
    sample :drum_snare_soft, amp: 5, rate: 1.7
    sleep 2
    2.times do
      sample :bd_haus
      sample :bd_klub
      sleep 1
    end
    sample :drum_snare_soft, amp: 5, rate: 1.7
    sample :bd_haus
    sample :bd_klub
    sleep 2
  end
end

live_loop :ch_hh do
  2.times do
    sample :drum_cymbal_closed, rate: 2.4
    sleep 0.5
  end
  sample :drum_cymbal_open, rate: 1.4, amp: 0.5, start: 0.2, finish: 0.7, release: 1
  sleep 1
  8.times do
    sample :drum_cymbal_closed, rate: 2.4
    sleep 0.25
  end
end


## sounds

define :bass_s do |n, crotchet|
  use_synth :dsaw
  play n, amp: 2
  sleep crotchet
end

define :lead_s do |n, crotchet|
  use_synth :saw
  play n, amp: 0.7, sustain:0.2, release: 1.2 * crotchet
  use_synth :noise
  play n, amp: 0.5, sustain:0.2, release: crotchet
  sleep crotchet
end

コードはSonicPiにコピペすれば、そのまま再生できるはずです!

SonicPiを使ってみた感想

  • DTMのUIで行える音楽と比べて、SonicPiでできることがプログラミングであるため「抽象化も具体化もとても高い音楽を作ることができそう!」という可能性を感じました!

  • 波形の選択、ADSRを数値での設定、Fxの設定といったシンセサイザー機能や、サンプリング音源の再生速度や逆再生といったサンプラー機能等がとても楽しいです!

  • 逆に DTMやシンセサイザーといった音楽の知識が全くない人だと、楽しみ方がわからないかと思います。

  • 今回のコードはかなり煩雑になってしまっているのですが、先人が沢山いらっしゃるので、学んで趣味の一つとして楽しんで行きたいと思います!

  • 今の所、仕事では使えなさそうです。

最後に

私の作った曲はいかがだったでしょうか?

SonicPiの詳細ついてはググれば色々と記事がでてくるので、ご自身でお調べください!

そして、プログラミングと音楽制作(DTM)が好きな方であれば、直感的にコードで音楽を表現できるので、是非1度は触って見ることをおすすめします!