コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
takumi ◆Ce3Q40uXWJjn
2024/8/5 1:10
質問
3号のMMLを4用に変換するプログラム
3号のMMLを4用に変換するプログラムって沢山あると思うのですが、様々な方のプログラムを同時に利用すると逆におかしくなりますか?というか、All over the MMLs(たつきん様)の作品内のMML変換の仕組みについて教えて頂きたいです

コメント

アバター
たつきん1192 2024/8/9 20:35 ◆C.1dcTLZggd7
All over the MMLsの変換はおもちつきΣとプチコンバータの流用です
なので、詳しい仕組み等はやりのめさんとうつりきまぐれさんに聞いてください()
アバター
やりのめ 2024/8/10 16:53 ◆UVcqvDMK6EGh
まとめWikiにも載ってますね。
http://wiki.hosiken.jp/petc4/html/Mame/MML3and4.html

あと、Σの変換プログラムの大半は、高原のなさんがNewSP SODAで作られたものの流用だったりします。
アバター
高原のな 2024/8/11 15:53 ◆bY8RViwvoODw
All over the MMLs搭載のおもちΣ由来の変換プログラムはなんか見た感じ複雑そうだったので、面倒見ようと思います(源流はわたしかNaさんかが書いた変換プログラムだと思います)
(最強の変換ツール作ってしまうのも手?)
アバター
高原のな 2024/8/12 13:06 ◆bY8RViwvoODw
おおまかに読みました
・Σの方式は構文に一定の規則を期待して変換しているので、変換済みのMMLを読ませるとおかしくなるどころかエラーになることがあります。そこそこ速いですが
・プチコンバータ由来の変換はきちんと解析を入れているので、性能がいいです。こちらを単独で使うのが推奨ですね(まだコードをちゃんと読んでないので保証はしませんが、Σの方式と同じ変換は最低限やっているようです)
 ・ただし、プチコンバータ系はExtendedMML(もはやわたししか使ってない説がある)がエラーなく変換できるかはわかりません
アバター
Ryou Tanpo 2024/8/18 8:14 ◆AI5iRr9FjmkJ
うつりきまぐれ / りょうたんぽです。プチコンバータの作者です。超長文失礼します。

プチコンバータの変換処理も使われているとのことなので、その辺りの仕様をまとめました。すんません、めっちゃ長いです。


※ 以下のプチコンバータに関する内容は、プチコンバータv0.8.0以降 (水色のアイコン) のものです。プチコンバータv0.7.7以前 (灰色のアイコン) はMML変換に対応していません

長いので次のコメントに分割
アバター
Ryou Tanpo 2024/8/18 8:15 ◆AI5iRr9FjmkJ
プチコンバータv0.8.4ではMMLの変換 (SB3からSB4の一方向) を実装してます。
またPETITC/RUNTIME.LIBをEXECした上で、外部からMMLの変換処理を呼び出すことができます。
引数1つ、戻り値 (OUT引数) 1つのごくシンプルなDEFで、それぞれ入力 (SB3) と出力 (SB4) のMML文字列となります

MML4$=PCMML_MML3TO4(MML3$)

プチコンバータがMMLを変換する際、対象のMMLは字句解析した上で、次の処理を行っています

- マクロの宣言を先頭へ
- @コマンド 144〜151を216〜223に
- Qコマンドの値を4倍に
- 音符、Lコマンドの音長を192の約数に
- ダブルシャープとダブルフラットを解消
- 調号と音長の順番を正規化 (調号を音長の前へ置く)
- @MONコマンドの削除

ただし、プチコンバータの変換には次のような問題点があります

- 音長を192の約数に直す処理が間違っている?
- Nコマンドの音長が処理されない
- ダブルシャープとダブルフラットの処理が雑
- 削除されている@MONはSB4にも存在する

さらに、次の仕様が考慮されていません (変換が全く実装されていない)

- SB4で@VとVの意味が入れ替わった
- タイがポルタメントに優先しなくなった
- ポルタメントの音長が省略された場合の挙動の変更
- ループがベロシティの値をリセットしなくなった
- ループ回数に変数が使えなくなった

なお、プチコンバータは渡されたMMLとその変換結果を保持していて、すでに変換されたMML文字列に対してはキャッシュされた結果を返します。

長文になりましたがプチコンバータにまつわる事情はざっと以上になります。


同時に使われている? と思われるリズミカルおもちつきΣと、All over the MMLsのコードはまだ読めてません。
アバター
Ryou Tanpo 2024/8/19 7:33 ◆AI5iRr9FjmkJ
<<< 以下停滞中の為期待しないで下さい >>>

……が、ともかくMML処理に関しては何かと需要がありそうなので、変換も含めて包括的なライブラリを作る予定です。(新プチコンバータを作りたいけれどなかなか全てを作る意欲が出ないので、せめてMMLだけでも……)

変換処理はもちろん作り直します。

ユーザーから字句解析の結果を簡単に処理できるようなシステムを中心に、それらを使ったMML変換とSB3 or SB4の判定を入れようと思ってるところです。他にも何かあれば教えてください。


長文失礼しました
アバター
takumi 2024/8/19 22:40 ◆Ce3Q40uXWJjn
みなさん回答ありがとうございます、、、!
返信が遅くなってすみません🙏
All over the MMLsの変換はおもちつきΣとプチコンバータの流用だったのですね。私はΣの方のプログラムを見たことがないので自分でも調べてみようと思います。

>> Σの方式は構文に一定の規則を期待して変換しているので、変換済みのMMLを読ませるとおかしくなるどころかエラーになることがあります。

ということはこの方法は引数として定義されるMML文字列は3号用のものであるという前提ということで合っていますでしょうか?

>> またPETITC/RUNTIME.LIBをEXECした上で、外部からMMLの変換処理を呼び出すことができます。

とりあえず今の段階ではこの方法を使わせていただきたいと思います。ありがとうございます。

あと、もう一つ気になっていた事があるのですが、特定のSB3用のMMLをBGMPLAYしようとするとプログラムが停止する(フリーズしたような感じ? +ボタンは反応します)ことがあるのですが、これは何故なのでしょうか…?
CHKMMLで弾けないので、プログラム実行中に選択すすと詰んでしまいます…
アバター
Ryou Tanpo 2024/8/21 17:49 ◆AI5iRr9FjmkJ
ぜんぜん文脈が変わるんですけど、ExtendedMMLとか知らなかったので調べてみました。マクロを使ってメタデータを設定してるんですね……

なるほど マクロが呼び出されない限り構文チェックされないところを利用してるのであれば、1回も使われてないマクロは無視 (マクロの呼び出しがある場合に限り宣言も処理する) すれば回避できそう。

まだ実際には検証してませんが、プチコンバータはMMLの全てのコマンドを完全に解析してるわけではなく、構文エラーとされた部分は単に無視されるので、正しいMMLでかつ変換対象となるようなコードが含まれなければたぶん動作すると思います。
アバター
Ryou Tanpo 2024/8/23 15:30 ◆AI5iRr9FjmkJ
> あと、もう一つ気になっていた事があるのですが、特定のSB3用のMMLをBGMPLAYしようとするとプログラムが停止する(フリーズしたような感じ? +ボタンは反応します)ことがあるのですが、これは何故なのでしょうか…?

プチコンバータで変換したMMLでしょうか?
アバター
takumi 2024/9/15 1:52 ◆Ce3Q40uXWJjn
>プチコンバータで変換したMMLでしょうか?
いえ、元のSB3楽曲です。
アバター
takumi 2024/9/15 1:56 ◆Ce3Q40uXWJjn
返信が遅くなってしまいすみません💦
とりあえず変換プログラムはのなさん&NaさんのとRyouさんのを併用させて頂きたいと思います。エラーを吐く可能性を下げるため、変換を通す際はマクロやExMMLのメタデータを展開・削除してから行うようにすることにしました。
ありがとうございました🙏
アバター
高原のな 2024/9/15 20:57 ◆bY8RViwvoODw
あ! 引用して質問されていたのに気づかず、返信忘れてました

> ということはこの方法は引数として定義されるMML文字列は3号用のものであるという前提ということで合っていますでしょうか?
合っています!

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -