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」というファイルがサンプルになっています。
いやー、便利です。すごく便利。パラメータをポチポチするだけで結構雰囲気が変わるので楽しいです。
ちょっと長くなったので後半は次のnoteに書こうと思います。
次回は「実際に作ったBGMを自作ゲームに入れてみる」、そして「BGMと効果音を一緒に鳴らす」というところを書く予定です。
ここまで読んでいただきありがとうございました。
ここまで読んでいただきありがとうございます!