Skip to content

Latest commit

 

History

History
131 lines (91 loc) · 8.61 KB

readme.md

File metadata and controls

131 lines (91 loc) · 8.61 KB

8bit BGM generator

8bit BGM generator は、「作曲スキルがないけど、Pyxel の自作ゲームに BGM を入れたい」という方のための BGM 自動生成ツールです。

Pyxel をお持ちの方でなくても、ブラウザ版で体験いただくことができます。また、生成した曲を mp3 などの音声ファイルとして録音したり、MIDI ファイルとして出力した上で加工することで、Pyxel 以外のレトロゲーム開発や動画の BGM 等に使っていただくことも可能です(詳しくは後述)。

問題点を発見したり、要望がある方は、Twitter frenchbread (@frenchbread1222) まで DM 等でお知らせください。

自動生成の仕様

8 小節、3 または 4 パートの曲を生成します。パート編成は以下から選べます。

  • メロディ+リバーブ(ディレイ)+ベース
  • メロディ+ベース+ドラム
  • メロディ+サブメロディ+ベース
  • メロディ+サブメロディ+ベース+ドラム

3 チャンネル編成で生成した曲を Pyxel で取り込んだ場合、残りの 1 チャンネルを効果音用に自由に使えます。(4 チャンネル編成にする場合も、効果音の再生時に一時的に曲を止めることによって BGM と効果音を両立できます。)

テンポ、コード進行、ベースとドラムのリズムなどは登録されているパターンから指定します。メロディは自動生成ですが、パラメータによりある程度調整することもできます。

よくわからないという方は、とりあえず「きほん」タブの「プリセット」を適当に選択してみてください。その後でテンポを変えたり、リズムを差し替えることで、好みの曲調に近づけることができると思います。

ツールの使い方

  • ブラウザ上で動かす場合: https://retro-bgm-generator.web.app/ (スマートフォンでも動きますが、画面が小さく操作しづらいのと、作成した曲をエクスポートするのが困難なので、お試し用途以外は PC からアクセスください。)
  • ローカル環境で動かす場合: このリポジトリをダウンロードして、pyxel play 8bit-bgm-gen を実行してください。また、MIDI ファイルの出力をしたい場合、事前に pip install mido コマンドを実行して mido をインストールしてください。

※ブラウザ版では MIDI ファイルの出力ができません。MIDI ファイルを出力したい場合、Python および Pyxel をインストールした上でローカル環境で動かしていただく必要があります。

自動生成した曲を使うには?

①Pyxel で使う場合

Pyxel のサウンド仕様に沿ったテキストデータが json ファイルとして出力されるので、これをゲーム本体のスクリプトで読み込んで再生する形になります。(リポジトリ内の play.py 参照。)

②Pyxel 以外で使いたい場合

以下の 2 つの方法があります。

  • 8bit BGM generator で MIDI ファイルを出力します。この MIDI ファイルを直接プログラムから再生したり、お使いの DAW などで オーディオ形式のファイル(mp3, wav etc)を生成することで、多様な環境でお使いいただけます。ただし、8bit BGM generator で設定した音色は MIDI ファイルには反映されませんので、お使いの環境にあわせて音源を設定したり、音域をオクターブ単位で調整したりすることを推奨します。
  • たとえば Chrome の拡張機能「Chrome Audio Capture」 などを使うことで、ブラウザ上で鳴らしているシステムサウンドを mp3 ファイルなどに録音することができます。実際にゲームなどで使う場合は、無音部分のトリム編集などが必要になってきます。

チュートリアル動画

こちらをご覧ください(Youtube が開きます)

※この動画は ver1.00 時点のものなので現在のバージョンと少し仕様が異なっています。ご了承ください。

カスタマイズ方法

generator.json をカスタマイズすることで、登録されているコード進行・リズム(ベース・ドラム)以外のパターンの曲を生成することもできます。

ローカルダウンロードの上、自己責任でご使用ください。(形式が正しくない場合、正常動作しない可能性が高いです。)

コード進行

  "chords": [
    {
      "description": "Ⅰ - Ⅶ♭",
      "progression": [
        { "loc": 0, "notes": "209019030909" },
        { "loc": 16, "notes": "901093090920" },
        { "loc": 32, "notes": "209019030909" },
        { "loc": 48, "notes": "901093090920" },
        { "loc": 64, "repeat": 0 },
        { "loc": 80, "repeat": 1 },
        :
  • "description" は画面上に表示する説明です。曲には影響しません。
  • "progression.loc" は曲のロケーションを指します。16 ごとに 1 小節ですので、1 小節ごとにコードを変える場合は、上の例のように 0, 16... と指定します。
  • "progression.notes" はコードやメロディの構成音を示します。12 個の数字は、C, C#, D .. に対応します。
    • "0" は使わない音です。
    • "1" は「コードを構成するベース以外の必須音」です。"1"の音はコード内で必ず使います。
    • "2" はベース音です。メロディでも使いますが、必須にはなりません。
    • "3" は「コードを構成するが省略可能な音」です。この音はメロディに登場しない場合もあります。
    • "9" はコード構成音以外で、メロディに使える音です。
    • たとえば C メジャースケジュールのコード C の場合、C が"2"、E が"1"、G が"3"、DFAB が"9"となり、"notes"として指定する文字列は"209019030909"です。
    • 上の例において、G を"1"と指定することも可能ですが、特にコードの長さが少ない場合、"1" の数が多いと曲の生成に時間がかかったり、フリーズする場合があります。"1" の数は 2 つまで、1/2 小節ごとにコードを切り替える場合は 1 つのみとすることを推奨します。
  • "progression.repeat" は、progression 要素の n 番目(1 つ目は n=0)と同じコード・メロディを繰り返す指定です。"repeat"を指定する場合、"notes"は指定しないでください。

ベースパターン

  "base": [
    :
    {
      "basic": "0.2.4.2.0.2.4.2.",
      "final": "0.2.4.2.2.4.2.4."
    },
    :
  • "final"は 8 小節目、"basic"はそれ以外の小節に適用するパターンで、フォーマットは同じです。
  • 1 つの文字が 16 分音符に相当しますので、文字列の長さは必ず 16 文字にしてください。
  • "0"は休符です。
  • "1"は 5 度の音、"2"はルート音、"3"は"1"より 1 オクターブ高い 5 度の音、"4"は"2"より 1 オクターブ高いルート音を示します。
  • "."で前の音を伸ばします。たとえば "4.4." や "2.2." であれば、8 分音符 x 2 を示します。"00"と"0."は同じ結果になります。

ドラムパターン

  "drums": [
    :
    {
      "basic": "1033203310332033",
      "final": "1033203310332220"
    }
  ],
  • "final"は 4, 8 小節目、"basic"はそれ以外の小節に適用するパターンで、フォーマットは同じです。
  • 1 つの文字が 16 分音符に相当しますので、文字列の長さは必ず 16 文字にしてください。
  • "0"は休符です。
  • "1"はバスドラム、"2"はスネアドラム、"3"はハイハット、"5"はロータム、"6"はミドルタム、"7"はハイタムです。(patterns.json の"key"に対応しますので、音色を追加・変更することも可能です。)

更新履歴

2023/10/14 Ver1.21 mido インストール時にエラーとなる問題を修正

2023/10/10 Ver1.20 MIDI 出力機能をサポート

2023/09/23 Ver1.10 メロディ生成アルゴリズム改善、サブメロディ生成に対応

2023/09/09 Ver1.02 ブラウザ版のエクスポートに対応

2023/06/01 Ver1.01 Windows でローカル実行時にファイル保存できないバグを修正

2023/05/08 Ver1.00 初版リリース