
FM3 Buddha Machineをラズパイで作る(1) ループ音源を自動作成する
今回から5回に分けてRaspberry Piを使ってFM3 Buddha Machineを作りたいと思います。
作ろうとしたきっかけは、FM3というアーティストのBuddha Machineという音楽再生機を部屋の掃除中に見つけ、久しぶりに聞きたい!と思ったところ、鉛電池を10年以上入れっぱなしにしたのが原因で液漏れして電極が錆びてしまい聴けなかったからです。
FM3 Buddha MachineはCDの代わりに中国の電子念仏機に模した再生機で楽曲を販売するという斬新な試みでした。現在はSpotifyなどのサブスクで聴けます。本体は電源スイッチを兼ねた回転式ボリュームと曲送りボタンのみで、曲送りボタンを押すまでずっと同じ音源がループします。
もう一度聞きたいので、今回はRaspberry Piで作ります。まず第1回目はループ音源をRaspberry Piで作成するところから紹介します。
1. 必要なもの
1-1. Raspberry Pi本体
非常に用途の広いシングルボードコンピューターです。GPIO(汎用入出力)が標準で付いているためハードウエアに組み込みやすい設計であり、Linuxも動作するためPCのようにも使えます。
今回はRaspberry Pi4を使います。使用するOSはRaspberry Pi OS(64bit) / 2022-04-04バージョンです(Debian Bullseye)
1-2. 周辺機器
Raspberry Pi4を使うときに必要な周辺機器です。
キーボード、マウス
Raspberry Pi OSをインストールしてVNC Serverを設定した後は使わないのでパソコンで使っているキーボード、マウスを使い回すのが良いと思います。マウスはUSB接続の有線マウスの方が安定します。ACアダプタ
Raspberry Pi4の場合、本体側電源端子はUSB TypeC接続です。5V/3Aの出力が必要です。HDMIケーブル
Raspberry Pi4の本体側HDMI端子はmicroHDMIです。スピーカー、イヤホン
音の再生を確認するときに必要です。今回はBluetoothヘッドセットのJabra Talk45を使います。MicroSDカード
Raspberry PiのOSインストールに必要です。今回はADATA製の32GB MicroSDカード(UHS-1)を使います。パソコン
Raspberry PiにOSをインストールするときにOSイメージをMicroSDカードに書き込みするときに使います。またRaspberry PiのOSセットアップ後はパソコンからVNC Viewerでリモート操作した方が便利です。今回はWindows 11パソコンを使います。音源
ループ再生する音源ファイルをMP3、OGG、M4A、FLAC、WAVファイルのいずれかで用意します。
2. 動作環境の構築手順
2-1. Raspberry Pi OSのインストール
詳しくは以下の記事をご覧ください。
2-2. スピーカー、イヤホンの接続
Raspberry Piはイヤホンジャック、USB、Bluetooth、HDMIとさまざまな方法で音声を出力できます。今回はBluetoothを使用します。
接続するBluetooth機器の電源を入れ、ペアリングモードにします。使用する機器によってペアリングモードにする操作は異なります。
タスクバーのBluetoothアイコンをクリックし、「デバイスを追加」をクリックします。

接続したいBluetooth機器を選択し、ペアをクリックします。

ペアリングが成功したら、メッセージボックスに書かれているようにボリュームアイコンを右クリックして音声出力をBluetooth機器に変更します。

2-3. Pymusiclooperをインストールする
Raspberry PiにはPythonを実行する環境が標準インストールされています。Raspberry Pi OS / 2022-04-04バージョンにインストールされているPythonのバージョンはv3.9.2です。
今回は音声ファイル内で最適なループポイントを自動的に見つけ、音楽をシームレスかつずっと再生してくれるpymusiclooperというpythonライブラリでループ再生する音源を作成したいと思います。まずはRaspberry Piにpymusiclooperをインストールします。Raspberry Pi OSのLXTerminalを起動し、以下のコマンドを順番に入力します。pymusiclooper内でmp3を再生するときにmpg123を使うので併せてインストールします。
sudo apt install mpg123
pip install pymusiclooper
pymusiclooperのインストールが完了しましたら、いったんRaspberry Piを再起動してください。再起動後にLXTerminalでpymusiclooper -hと入力したとき以下のように表示されればインストールに成功しています。
pymusiclooper [-h] [-v] [-i] [-p] [-e] [--preserve-tags] [-t] [-r] [-f]
[-n N_JOBS] [-o OUTPUT_DIR] [-m MIN_DURATION_MULTIPLIER] [-V] path
2-4. 音源ファイルを転送する
パソコンからRaspberry Piに音源を転送します。VNC Viewerの画面中央上にあるメニューからTransfer Filesをクリックします。

Send filesをクリックし、転送したいファイルをパソコンから選んでください。

選択すると対象ファイルがRaspberry Piのデスクトップにコピーされます。

2-5. ループ音源を作成する
今回はRaspberry Piのデスクトップに05.mp3というファイルがあると仮定して説明します(/home/pi/Desktop/05.mp3)。コマンドはLXTerminalに入力します。
[必須コマンド]
path:音声ファイルまたは音声ファイルの含まれているディレクトリのパスを指定します。
[オプションコマンド]
-p:
自動的に判別した最適なループポイントで曲を繰り返し再生します。LXTerminalに以下のようなコマンドを入力します。
pymusiclooper -p "/home/pi/Desktop/05.mp3"
Playing with loop from 00:20.167 back to 00:05.666; similarity: 77.9%
(press Ctrl+C to stop looping.)
これだけで最適なループの場所を判別します。今回の例ですと、5.666秒から20.167秒までをループ再生したときのつなぎ目の類似性が一番高く、77.9%であることを示しています。
残念ながら85%を切るとつなぎ目に違和感が出てしまうので、この後に紹介する「-m MIN_DURATION_MULTIPLIER」オプションで調整しないといけません。
また使用する曲の長さによっては解析にかなりの時間が掛かります。その場合にも「-m MIN_DURATION_MULTIPLIER」オプションを使うことで解析時間を短縮できます。
Ctrl+cを2回入力すると再生停止します
-i:
発見されたループポイントの中からどのループを使うか手動でプレビュー/選択します。LXTerminalに以下のようなコマンドを入力します。今回の例ですと3つのループポイントを検索できました。ルーポイント番号入力すると再生できます。またループポイント番号にpを加えるとプレビュー再生ができます。
pymusiclooper -i "/home/pi/Desktop/05.mp3"
Discovered loop points:
0) from 00:20.167 back to 00:05.666; score: 77.91%
1) from 00:24.218 back to 00:08.928; score: 69.81%
2) from 00:24.218 back to 00:01.730; score: 62.31%
Enter the number for the loop you'd like to use
(append p to preview; e.g. 0p):
-m MIN_DURATION_MULTIPLIER:
MIN_DURATION_MULTIPLIERには、ループが非常に長い場合、ループポイントに使用する最小時間をデフォルトの0.35(35%)から変更する値を指定します。より高い値を指定することで処理が高速になります。逆にループポイントが短い場合には、より短い値を指定することでループのつなぎ目の類似性が高くなります。今回の例ですと0.2(20%)を指定することで、93.38%のループポイントを見つけました。
pymusiclooper -i "/home/pi/Desktop/05.mp3" -m 0.20
Discovered loop points:
0) from 00:07.349 back to 00:00.163; score: 93.38%
1) from 00:08.696 back to 00:01.498; score: 91.25%
2) from 00:08.928 back to 00:01.730; score: 89.86%
3) from 00:09.369 back to 00:02.171; score: 86.09%
4) from 00:10.043 back to 00:02.844; score: 78.46%
5) from 00:20.167 back to 00:05.666; score: 77.91%
6) from 00:17.589 back to 00:07.686; score: 72.87%
7) from 00:24.218 back to 00:08.928; score: 69.81%
8) from 00:24.218 back to 00:01.730; score: 62.31%
9) from 00:09.369 back to 00:02.844; score: 61.35%
Enter the number for the loop you'd like to use
(append p to preview; e.g. 0p):
-e:
曲をイントロ、ループ、アウトロの各ファイルをWAV形式で書き出します。音源のある階層にLoopsフォルダーを自動的に作成し、そこにファイルを作成します。
pymusiclooper -e "/home/pi/Desktop/05.mp3"
Successfully exported '05.mp3' intro/loop/outro sections to '/home/pi/Desktop/Loops'
[コマンドの組み合わせ]
ここまで紹介しましたコマンドを組み合わせて一気に処理します。ループポイントの最小時間を0.2に変更してループをWAV形式で書きだしたい場合には、以下のようなコマンドを入力します。
pymusiclooper -e -p "/home/pi/Desktop/05.mp3" -m 0.20
これでループ音源の作成は完了です。必要なものがそろっていれば、週末に比較的短時間で試せると思いますのでぜひお試しください。
ここまで読んでいただきありがとうございます。次回はこの音源を外部から再生、曲送りする部分を作成したいと思いますのでよろしければ引き続き読んでいただけると幸いです。