MIDファイルがリピートされない

Issue #1097 resolved
Leon created an issue

BGM変更コンテントで再生させた特定のMIDファイルが、ループ回数0設定でもリピートされません。(1回は流れ切ります。)

ファイルの長さやサイズに制約はあるでしょうか?他考えられる原因があれば教えてください。なお問題となっているファイルの長さは4分19秒、サイズは165KBです。

Comments (7)

  1. k4nagatsuki repo owner
    • changed status to open

    RPGツクール向けのMIDIファイルのなかにはCC111という信号を設定してループ位置を指定しているものがあるのですが、エンディング用などの特殊な目的でその位置を末尾に指定して再生が一度きりになるようにしているファイルを見たことがあります。そうしたケースではないでしょうか。

    製作者の意図に反する事になりますが、一応回避する方法は存在します。ループ位置を上書きするためにループ情報ファイルを作成してください。

    1. 対象のMIDIファイルの名前の末尾に.sliを追加したテキストファイルを作成し(a.midならa.mid.sli)、対象ファイルと同じフォルダに入れます。
    2. *.sliファイルの内容をLink{From=-1;To=-1;}にします。ここには本来ループ位置をサンプリング数という単位で書くのですが、-1という無効値を設定する事でループ設定を無効化します。
  2. Leon reporter

    ご回答ありがとうございます。
    .sliファイルを試してみましたがループされませんでした。別の要因のようです。

  3. 暗黒 騎士

    Pyのみで再現されるのでしょうか?

    170kb程度のファイルで、楽譜の末尾に1パートだけゴミが付いていて次のループまでに無音時間が数分かかるようになっているMIDI素材を見たことがあります。そういう場合でもsliのループ情報を適切な位置にセットすればループされるはずですが、他エンジンでもループさせたい場合はファイルをMIDIシーケンサー(編集ソフト)で直接改変する必要があります(改変が許可されている場合のみ)。

  4. k4nagatsuki repo owner

    すいません、誤情報を流しました。ループ位置を冒頭に戻すにはLink{From=-1;To=-1;}ではなくLink{From=-1;To=0;}でなければなりません。

    Fromは再生がジャンプする位置、Toはジャンプ先です。ジャンプ先が末尾に設定されていて再生が停止するタイプのファイルであれば、ジャンプ先を曲の冒頭にすればループすると思います。

  5. Leon reporter

    Link{From=-1;To=0;}
    こちらでリピートされました。ありがとうございました!

  6. BlinkOpera

    @k4nagatsuki
    本件、報告者による動作確認が行われており、クローズ可能です。

  7. Log in to comment