Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CC111を使った場合のループの終了タイミングを最後のEventに変更 #35

Merged
merged 3 commits into from
Jul 22, 2022

Conversation

At-sushi
Copy link
Contributor

変更点

  • CC111を使用している場合、再生終了コールバックの発生するタイミングを最後のイベントを再生した直後に変更。

RPGツクールの仕様ではend of truckメッセージまで再生する仕様になっているらしく、最後のEventまで再生しないとループのタイミングがおかしくなることがある。

@makkii-bcr
Copy link
Collaborator

makkii-bcr commented Jul 19, 2022

@At-sushi
プルリクエストありがとうございます。

変更点について問題ないと思うのでマージするつもりです。
しかし、ループタイミングがおかしくなるMidiファイルで動作確認をしておきたいのですが、まだそのようなMidiファイルを探し出せていません。

もしそのようなMidiファイルをご存じであれば、Midiファイル(例えばMidi素材やゲームに含まれているMidiファイル等)のURLを教えていただけると助かります。

@At-sushi
Copy link
Contributor Author

At-sushi commented Jul 20, 2022

@makkii-bcr はじめまして。ご連絡いただきありがとうございます。

RPGツクール 2003 RTPというものに同梱されているMidiファイルにて動作確認可能です。(exe形式のインストーラなので中身を展開する必要があります)

RTP(ランタイムパッケージ)- ツクールweb

Musicフォルダ下にある「2003妖精の森.mid」というファイルが違いが分かり易いと思います。
申し訳ないですが、単体のMidiファイルで動作確認に使えるものは私も見つけられていません…

@makkii-bcr
Copy link
Collaborator

@At-sushi
ありがとうございます。おかげさまで動作確認ができました。

教えていただいたMidiファイルで動作確認をしました。
実は、playData.songLengthgetTime(Number.MAX_SAFE_INTEGER)getTiming(Number.MAX_SAFE_INTEGER)などで曲の長さを取得できるのですが、長さが少し短く取得されてしまいます。(Picotuneでは曲の終わる直前でピアノロールが一瞬止まる現象が発生しました)

変更後のparse-event.jsの
353行目 if (this.settings.isSkipEnding) songLength = lastNoteOffTiming;
354行目 tempoTrack.push({ timing:songLength, time:(60 / tempo / header.resolution) * (songLength - tempoCurTick) + tempoCurTime, value:120 });
の間に下記一行だけ追加をお願いしたいです。
if (this.settings.isCC111 && cc111Time != -1) songLength = lastEventTiming;

@At-sushi
Copy link
Contributor Author

@makkii-bcr 該当部分修正いたしました。
play.jsのfinishTimeの部分(56行目、71-73行目)も修正したほうがいいかとも思ったのですが、ひとまずそのままにしています。

@makkii-bcr
Copy link
Collaborator

@At-sushi 修正ありがとうございます。
play.jsのfinishTimeの部分、分岐でどちらになっても同じ結果になるので分岐がいらなくなりますね。(this.getTime()側の代入のみでよくなる)
気づいていませんでした。
こちらも修正していただけると嬉しいです。

@At-sushi
Copy link
Contributor Author

@makkii-bcr 修正いたしました。
この変更で set-data.js への追加分が必要なくなるので、こちらも必要であればrevertいたします。

@makkii-bcr
Copy link
Collaborator

@At-sushi ありがとうございます。
確かに set-data.js の追加分はなくてもよさそうですね。
ただその上のdata.~NoteOffTimedata.~NoteOnTimingなども追加しちゃってたりするので、
ここはこのままでもよさそうです。

Copy link
Owner

@cagpie cagpie left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@At-sushi @makkii-bcr ありがとうございます!マージします

@cagpie cagpie merged commit 899b9f7 into cagpie:master Jul 22, 2022
@cagpie
Copy link
Owner

cagpie commented Jul 22, 2022

v1.1.1として更新しました
https://www.npmjs.com/package/picoaudio/v/1.1.1
https://github.com/cagpie/PicoAudio.js/releases/tag/v1.1.1

@At-sushi At-sushi deleted the pull_smf branch April 7, 2024 09:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants