Stormworks: Build and Rescue

Stormworks: Build and Rescue

Not enough ratings
『琴音』- 曲データ入力
By mamezo99
『琴音』マイコンの曲入力説明。

An explanation of how to input song data to the "Kotone" microcontroller.

Please use the translation site to read the explanations in English and other languages. Translation from Japanese to other languages.
So I'm not good at English ...

   
Award
Favorite
Favorited
Unfavorite
はじめに
このガイドでは、『琴音』(Kotone)への曲データ入力の説明をします。
https://steamproxy-script.pipiskins.com/sharedfiles/filedetails/?id=2308360245

MIDIファイルを16進数値文字テキストにし、マイコンに曲を入れることが出来ますが、入れることの出来るデータに制限があります。


★MIDIファイルの制限
  1. トラック数が1つのものしか入れられない。
     フォーマット0のものはトラック数が1つなので問題なし。
     フォーマット1のものはトラック数が1の場合は入るが、ほとんどの場合複数あるのでフォーマット0へ変換をしたほうがいい。※フォーマット2は何も対応を考えていない。
  2. 時間単位が「デルタタイム」のみ。
     時間単位が「実時間」は対応してない。
  3. ほとんどのイベントに対応していない。
     対応しているイベントは、ノートオン/ノートオフ/テンポ設定/トラック終端、4つ。
     他イベントは読み飛ばし、チャンネル、ベロシティも無視。

★マイコンの制限
  • マイコンの記憶用Luaに曲データを記述する為、文字数制限がある。
     記憶用Luaは64。

★ブザーの制限
  1. 「オフ→オン」とした場合、オンの時間が短くても長くても同じ音が再生される。オフからオンに切り替わったときに決められた音が鳴り、鳴っている最中に次の音が来た場合、前の音は途中で止まる。
  2. D4~D6までの音しか出せない。
  3. 音の種類が少ない。音の種類を”シートベルト”にすることでピアノの音が出せるが、他はBeep音などの機械音しかない。他楽器の音が選べると良かったのだが・・。
手順:
  • A)MIDIファイルを用意。
  • B)MIDIファイルから16進数数値文字列テキスト作成。
  • C)現在使用している曲の総文字数を確認。
  • D)マイコン内に(B)データを記述。
  • E)マイコンに設定(曲の読込開始位置/オクターブ/最大読込メモリ番号)を記述。
(A)MIDIファイルを用意
手持ちのMIDIファイル、または楽譜入力ソフトでMIDIファイルの出力が可能なものを使用するのがいいでしょう。
MIDIファイル(SMF File: Standard Midi file)のトラック数が1つのデータでしか上手く読み込めないので(1つ目のトラックデータしか見ない為)、フォーマット0(トラック数が1つしかないフォーマット)の曲データを使うのが無難だと思います。
フォーマット0対応と書かれたツールを探すか、フォーマット0のファイルへ変換出来るツールを探すのがいいでしょう。

私は詳しくありませんが、フリーのもので以下のようなものがありました。
  • 『世界樹』MIDIシーケンサー・MIDI編集ソフト
     MIDIフォーマット0の出力が可能。

  • 『MuseScore』音符作成ソフト
     MIDIフォーマット1のみ対応。簡単な楽譜を入れてみたが、そのときはトラック1つのデータになっていた。たまたまか?
(B)MIDIファイルから、16進数値文字列テキスト作成
・"Certutil" コマンドを使用した方法。

 コマンドプロンプトを起動して使用。
certutil -f -encodehex 入力ファイル 出力ファイル 12
(C)現在使用している曲の総文字数を確認
『琴音』マイコンを起動し、曲番号=-1を入力すると、#MT=<数値> が表示されます。
#MTは、現在使用している曲データの総文字数なのでメモしておいてください。

曲を追加するときの読込開始位置として使用します。
(D)マイコン内に(B)のデータを記述


メモリ用Luaの中から、番号が小さく空きがあるものを探す。(前の曲のデータの後ろに追加可能)

まだ曲データを入れてないときに、メモリ番号1のLuaを開くと以下の図のように表示されます。


BM="" のダブルクォーテーションに囲まれた部分に(B)で用意したテキストを入れ、サイズが大きく入らない場合は分割し、メモリ用Luaの次番号のBM=""の中へと入れていく。
(E)マイコンの設定
MainのLUAに追加した曲の読込設定を記述する。

読込設定は、nIX,nOC,MRの3箇所
nIX={曲1の読込開始位置, 曲2の読込開始位置,...............} nOC={曲1のオクターブ,曲2のオクターブ,................} MR=読込最大メモリ番号
  • (C)でメモしておいた数値をnIXに入れる。
  • オクターブは「元データのまま」=「1オクターブ上げる」=1「1オクターブ下げる」=-1
  • MRは曲データの入るメモリ用Luaの最終番号にする。(1~10のメモリ用Luaに曲を入れた場合、10を入れると1から10までのデータが読み込まれる。)

おまけ:曲探し
「パブリックドメイン」 「Public domain」
+ジャンル。(クラッシックやジャズ、民謡など)

ウェブ検索で上記のものを探すと色々見つかります。
私はそれに加えて、「MIDI DOWNLOAD」で探してみています。
2 Comments
mamezo99  [author] 20 Dec, 2020 @ 2:16am 
I'm glad to know that you are using this guide. By the way, I was surprised that other than Japanese-speaking people are using it.
Thank you.
L3NVER 19 Dec, 2020 @ 5:04pm 
Very nice