見出し画像

pyxelの作曲ツールを使ってみる(1)

Pythonのレトロゲームエンジン「pyxel」。個人的に非常におすすめのゲームエンジンで、結構色々動かしてはきたのですが、完全に手つかずの領域があります。
「音楽」です。

pyxel自体にはサウンドエディタが付いているので効果音やBGMも作れるのですが、いかんせん僕に音楽の知識がなさすぎる。
ということで作ったゲームはどれも無音…だったのですが、ここにきて素晴らしいツールがリリースされました!

ポチポチするだけで、良い感じのサウンドを作ってくれる「8bit BGM Generator」です!
作者はfrenchbreadさん。下記のnoteに紹介記事があります。

「まぁ無音で良いか…」とあきらめていたわけですが、これでBGMを付けてやるとあら不思議。一気に「それっぽさ」が3割増しです。

ではでは早速実際の使い方にいってみましょう。

▲まずはGitHubからソースを一式取ってきます。
ブラウザでも動くのですが、後々の手間を考えればローカルに持ってくるのが良いと思います。

▲(*)ブラウザ版は上のリンクで公開されています。動作だけであればここで試すのもよさそうです。

「Code」のボタンを押して、一覧から「Download ZIP」を選択。これでリポジトリがそのままZIPフォルダでゲットできます。

解凍したらどこか適当なところに置きます。
ツールの本体は「src」の下の「generator.py」です。こいつを実行して画面が表示されればOK。

▲これが出れば大丈夫です。

が、僕はここでうまくいきませんでした。何やらエンコーディング関連のエラーが出てきて落ちてしまいます。
結果から言うとWindows 環境で動かしていたのが悪いのかファイルオープン時のエンコードがCP932(Shift-JIS)になってしまったのが原因っぽいです。
これを直すためにgenerator.pyをちょっと書き換えます。

「open」の文字列で検索するとファイルオープンの箇所が出てきます。全部で5つです。

open("tones.json", "rt")  ← こんな感じになっているところを
open("tones.json", "rt" ,encoding="utf-8")  ←こうします。
 
第1、第2引数は場所によって違いますが、追記する内容は一緒です。

「,encoding="utf-8"」を追記して、明示的にutf-8でエンコードする形ですね。これで動くようになりました。

動いたらプリセットを基にパラメータを適当にいじって気に入った感じにします。そうしたらエクスポートボタンを押して保存。

▲ここを押します
▲メッセージが出てきます。

プロジェクトルートなので、generator.pyの1つ上の階層に保存されるはずです。ファイルがあるか、更新日時はどうか見てみましょう。

ただ僕の環境だと保存がうまくいきませんでした。なのでgenerator.pyをもう少し書き換えます。
234行目に保存先ファイルの取得部分があります。

self.output_file = os.path.abspath("music.json")   ←動的にパスを取るところを
self.output_file = "../music.json"  ←文字列べた書きにしちゃいます

見た目はともかくこれで保存もされるようになりました。

実際に保存したmusic.jsonをどのようにpyxelアプリに入れるかは、プロジェクトルートにある「play.py」というファイルがサンプルになっています。

▲play.pyを実行したところ。
スペースキーで音楽が流れます。
ここで先ほど作ったBGMがきちんと保存されたか確認するのも良いですね

いやー、便利です。すごく便利。パラメータをポチポチするだけで結構雰囲気が変わるので楽しいです。

ちょっと長くなったので後半は次のnoteに書こうと思います。
次回は「実際に作ったBGMを自作ゲームに入れてみる」、そして「BGMと効果音を一緒に鳴らす」というところを書く予定です。

ここまで読んでいただきありがとうございました。

ここまで読んでいただきありがとうございます!