ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

Raspberry Pi 3B+ に sonic-pi をインストールしてみた

(2024-02-01 初稿 - 2024-02-02 追記)

はじめに

最近、自分で動画を作成してみようかと思っている。しかし、BGMのない動画はやや寂しいので、これまた自分で簡単な曲を作ってみようと思っている。

筆者は、Debianを使っているので、楽曲を作るソフトウェアといえば、sonic-pi または rosegarden くらいしか知らない。どなたか、Linux環境でも良いDTMを紹介してください。m(_ _)m

このページでは、久しぶりにRaspberry Piにsonic-piをインストールして、使ってみたので、そのメモを残す。

最初に言っておくが、Raspberry Pi 4 ではsonic-piをインストールできたが、音を鳴らすことができなかった。もしかしたら、筆者がBluetoothのスピーカーを利用していることが原因かもしれない。

いずれにしても、Raspberry Pi OS 12(bookwarm) は pulseaudioとpipewireへの過渡期にあるようで、少なくともBluetoothスピーカーにつないだRaspberry Pi 4にインストールすることはあきらめた。

ちなみに、sonic-piはリアルタイムに演奏するためにjackを利用するが、jackはひとつのプログラムで専有されやすいようで、マルチユーザー環境では利用が難しいようである。そこで、pipewireがこれらの問題を解決するために開発されたようだが、前述のとおり、Raspberry pi OSではちょうど過渡期のようで、うまく動作させられなかった。

そこで、デフォルトではWaylandやpipewireがインストールされない余っていたRaspberry Pi 3B+にsonic-piをインストールして、HDMIでディスプレイ兼スピーカーに接続して使ってみたところ、うまく動作させることができた。以下の記述は、このような環境におけるものである。

筆者の環境

念の為に、筆者の環境を示す。

$ cat /etc/debian_version
11.8
$ uname -a
Linux rp32 6.1.21-v7+ #1642 SMP Mon Apr  3 17:20:52 BST 2023 armv7l GNU/Linux

sonic-pi のインストール

sonic-piのパッケージは、Raspberry Pi OSにあるので、インストールは以下のとおり。

$ sudo apt install sonic-pi

ちなみに、インストールしたsonic-piのバージョンは、3.2.2。

注意点として、インストールの途中で、jackを利用するので、マルチユーザにはおすすめできないが、変更をするか?と聞かれる(うろ覚えで申し訳ない)。デフォルトでは「いいえ」が選択されているが、「はい」を選択して変更をしないとうまく音が出ない。

起動中のSonic-pi

筆者は、とても作曲について記述するほどの技量を持ち合わせていないので、以下にリンクを掲載するので、具体的な方法は以下で学んで欲しい。

大変驚いたことに、以下のサイトにギターのTABをそのまま演奏するコードが載っており、実際に動作できることを確認した。

もちろん、TABを貼り付けた後にいろいろと加工しないと行けないが、かなり効率的に楽曲をつくることができることは間違いがなく、sonic-piがrubyをベースとするデジタルプログラミングシンセサイザーであるメリットだ。

上記、サイトから引用させていただくと、コードは以下のとおり。以下のコードは、Led Zeppelinの「Stairway to Heaven」。

t0=
"e-------5-7-----7-8-----8-2-----2-0---------0---------------------
b-----5-----5-------5-------3-------1---1-----1-------------------
g---5---------5-------5-------2-------2---------2-0-2-2-----------
-7-------6-------5-------4-------3-------------------------------
a-------------------------------------------------2-0-0---0--/8-7-
e-----------------------------------------------------------------"
t=t0.split("\n").reject(&:empty?)
tuning=[:E3,:A3,:D4,:G4,:B4,:E5].reverse
for i in 0...t.length/6
  for j in 1...t[i].length
    for k in 0...6
      case t[i*6+k][j]
        when "0","1","2","3","4","5","6","7","8","9"
        play tuning[k]+t[i*6+k][j].to_i
      end
    end
  sleep 0.15
  end
end

(2024-02-02 追記)

ちなみに、ここでは、紹介しないが、ChatGPT等の生成AIを利用すれば、簡単に曲を作ってもらえる。

(追記終了)

おわりに

何か良いBGMができたら、こちらで紹介しようと思っているが、いつのことやら… (^^ゞ

関連ページ