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

アバター
ジプッチャ ◆tkYhkmSxSAam
2019/8/29 20:21
情報交換
MMLでの謎のループ回数エラーについて
MMLがおよそ1000文字を超えると、異常のないはずのループ部分で「ループ回数が範囲外」というエラーが出ることがあります。

現時点で推測できること:
・[CDEFGAB<C]10 のような、「ループ内でオクターブが変わった後元に戻らない」という構文がMML中のどこかにあるときに発生するもよう。

【9/12追記】↑これが原因ではないかも。Naさんによると、MML文字列のコピーは再生できるそうです。

・[CDEFGAB<C>]10 のように修正すれば再生できるようになる。
・修正して再生した後にもう一度>を削除して再生しようとしたら今度はエラーにならなかったりと、不可解な揺れがある。

CyberRexさんの投稿(http://petitverse.hosiken.jp/community/petitcom/diary/?read=3339&ukey=0)にて、
このエラーを見るのは私だけではないことが判明しました。

しかし、まだまだ謎の部分がたくさんあります。
プチコン4やBIGでも起こるのか、どういう条件で起こるのか。
どういうメカニズムで起こるエラーなのか、仕様なのかバグなのか。

もし、何か知っていることがありましたら何でもいいのでお寄せください。

コメント

アバター
Na 2019/8/29 20:39 ◆QoELVrBXBQCI
自分の環境ではまだ1度もそのようなことはないのですが...
プチコンのバージョンは最新(3.6.3)ですか?

たぶん関係ありませんがver3.6.3でMML内に"N$0"を約7回以上書くとInternalError、約20回以上書くとハングアップするバグがあります。(以前Wikiの既知の不具合のコメント欄に書きました)
「7回」「20回」というのは一例で、それより少ない場合もあります。
こちらも詳しい条件はわかってません。

追記 今1回だけOut of range起きました。
アバター
ジプッチャ 2019/8/31 13:36 ◆tkYhkmSxSAam
ありがとうございます。また謎が増えましたね…
バージョンは最新です。
1回だけOut of rangeが起きた時どんなMMLだったか教えていただけますか?
アバター
Na 2019/8/31 13:53 ◆QoELVrBXBQCI
BGMPLAY "["+"CFDGEFGDFCEGDEDFGECD><"*500+"<]50"
みたいなやつだったと思います
アルファベットはC〜Gを適当に並べたと思います
アバター
ジプッチャ 2019/9/1 20:35 ◆tkYhkmSxSAam
やっぱり起こるんですね。
ありがとうございます。
ネットやリファレンスなどを探してもそれらしき情報は載っていませんね…。
機会があればSmileBoomさんに直接聞いてみようと思います。
(↑TwitterもFacebookも持っていない人)
アバター
Na 2019/9/11 18:08 ◆QoELVrBXBQCI
また起きました。
はっぴぃ&んどくりぃむのMMLの [R1]12 という箇所です。
_MMLD$という変数にMMLが入っている状態で、
再生できない例
BGMSET 128,_MMLD$

BGMPLAY _MMLD$

A$=_MMLD$+""
BGMPLAY A$

再生できる例
SAVE "TXT:H.MML",_MMLD$
BGMPLAY LOAD("TXT:H.MML",0)

CLIPBOARD _MMLD$
BGMPLAY CLIPBOARD()
アバター
ジプッチャ 2019/9/11 18:11 ◆tkYhkmSxSAam
おおう…
ループ内でオクターブが変わった後元に戻らない箇所があったりしますか?
アバター
Na 2019/9/11 18:13 ◆QoELVrBXBQCI
ループ内でのオクターブの変更は1個もありませんでした。
アバター
Na 2019/9/11 18:17 ◆QoELVrBXBQCI
さらにいろいろ試しました。
TOPMENUに1回戻る→再生できず
BGMCLEAR→再生できず
スマイルボタンを押し、戻る→再生できず
(しかしここで誤ってRUNしたため_MMLD$の中身消滅)
アバター
Na 2019/9/11 18:29 ◆QoELVrBXBQCI
他に分かっていること
エラーが起きる前の状況として、
・まず譜面ファイルからはっぴぃのMMLをREADして、_MMLD$に入れる。
・BGMPLAY _MMLD$(エラーなし)
・再び譜面ファイルからはっぴぃのMMLをREADして、_MMLD$に入れる。
・_MMLD$からテンポ変更を探す。(このMMLの場合先頭の1か所のみしかない)
・テンポ変更の直後に"$7=1"を追加。
ただし追加はSUBST$を使わず、
_MMLD$[I]="$7=1"+_MMLD$[I]
みたいにしている。
・BGMSTOP
・WAIT 30
・BGMSET 128,_MMLD$→エラー

ちなみにこのはっぴぃのMMLは、弾幕音遊戯に入っているものから各チャンネルの無限ループを手動で消したものです。

エラーが起きたMMLの文字数は9968

また、エラーが起きた個所 [R1]12 というのは、MMLの途中ではなく、一番最後にありました。
アバター
Na 2019/9/12 20:37 ◆QoELVrBXBQCI
またはっぴぃの同じ個所でエラー起きました...
ただし今回は"$7=1"を入れる前です。

BGMPLAY _MMLD$ →エラー
SAVE "TXT:H.MML",_MMLD$
BGMPLAY LOAD("TXT:H.MML",0) →再生できる
?_MMLD$==LOAD("TXT:H.MML",0) →1と表示
?FREEMEM →8156564
BGMPLAY MID$(_MMLD$,0,LEN(_MMLD$)) →再生できる
BGMPLAY _MMLD$+"" →再生できる
A$=MID$(_MMLD$,0,LEN(_MMLD$))
BGMPLAY A$ →再生できる
A$=_MMLD$+""
BGMPLAY A$ →再生できる(前回はできなかったが)
BGMPLAY _MMLD$ →まだエラー
_MMLD$=_MMLD$
BGMPLAY _MMLD$ →エラー
_MMLD$=_MMLD$+""
BGMPLAY _MMLD$ →再生可能に

というわけで結論。
文字列のコピーを作ると再生できるようになるっぽいです。
アバター
ジプッチャ 2019/9/12 20:45 ◆tkYhkmSxSAam
ありがとうございます!
コピーを作ればいいんですね。
じゃあ、オクターブがどうのは関係なかったのかな…?
こちらでもいろいろ調べてみましたが、まだエラー箇所の謎は残っているようですね。
もっと研究します。
アバター
Na 2019/9/14 17:29 ◆QoELVrBXBQCI
弾幕音遊戯のはっぴぃ(無限ループなので最後が ] で終わる)では一度も発生したことがないのに、NewSPのはっぴぃ(無限ループを消し、最後が [R1]10 で終わる)では何度も発生します。
もしかしてループがMMLの末尾にあるときだけ起こる感じですかね...?

今のところ、MMLの末尾にスペースを追加して、一度も発生していません。
アバター
CyberRex 2019/10/28 12:24 ◆qhyT2aHAyMJC
DIRECTモードで、CLEAR命令を実行してコードメモリーを初期化してください。
結果が変わりますよ!
アバター
Na 2019/10/28 21:31 ◆QoELVrBXBQCI
>CyberRexさん
そりゃあCLEARしたら直りますが...
そんなことしなくてももう一回BGMPLAYすれば直るんですよ...

あとRUNすると自動でCLEARされるので関係ないと思います。

コメントを書く

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

- WEB PATIO -