任务单 #30333

DTXC SMFファイルのimport

开放日期: 2012-12-18 23:52 最后更新: 2016-08-02 17:47

报告人:
属主:
状态:
关闭
组件:
里程碑:
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
Accepted
文件:
Vote
Score: 0
No votes
0.0% (0/0)
0.0% (0/0)

Details

SMFファイルのimport機能を追加する。

任务单历史 (3/33 Histories)

2012-12-18 23:52 Updated by: yyagi
  • New Ticket "DTXC SMFファイルのimport/export" created
2016-03-21 00:54 Updated by: yyagi
评论

既にikanickさんが対応なさった模様。お疲れ様でした。

http://senamih.com/crs/tool.htm

2016-03-21 01:51 Updated by: ikanick
评论

この機能はほとんどデバッグできておらず拍子変更については実装しておりませんが、
それでもよろしければbranchの方に投じてみたいのですがいかがでしょうか。(できるのかな?)

自信がない発言ですが、
1.SMFの解析は完全に独自のやり方なので、SMF解説ページを作られていたyyagiさんからするとかなり稚拙な出来になるかと…。
2.コーディング自体がお粗末で、エラー処理等のやり方がわかっておりません。

svn上でやりたいこと
・エラー処理
・拍子変更対応
・DTXC側にLP LBDのチャンネルを内部的に実装し、対象レーン一覧に表示させたい(ver.k向け譜面対応)

2016-03-21 02:18 Updated by: yyagi
评论

はい、branchに投入いただけると、すごくうれしいです (大歓迎です)。

取り急ぎ、拍子変更への対応程度でしたら、たぶん私の方で比較的容易に修正できると思います。(すぐにはできませんけど。。)

2016-03-21 08:07 Updated by: ikanick
评论

branchを追加し、rev947にて対応しました。

上記URLで公開されている実装そのまま、とりあえず投入しました。

コーディングに素人感が滲み出てるので読みにくいと思いますが_(:3」∠)_

2016-03-21 16:01 Updated by: yyagi
评论

branchへの投入、ありがとうございました。

会社にいますが現実逃避でざっとソースを拝見しました。とりあえず途中でBPMが変わる曲データはアウトのように見えます・・・が、大丈夫なのでしょうか。時間があれば自分で動作確認してみます。

なお、LPやLBDは、こっちのDTXCにも初期設定=非表示で入れちゃってもいいかなと最近は思っています。別チケットのLP/LBD譜面の吸収の話もありますし。

2016-03-21 21:55 Updated by: None
评论

備忘録: TODO (適宜追記修正願います)

  • エラー処理
  • 拍子変更対応
  • DTXC側にLP LBDのチャンネルを内部的に実装し、対象レーン一覧に表示させたい(ver.k向け譜面対応)
  • (済) D&D対応
  • 設定の保存機能
  • 最後にMIDIファイルを読みだしたフォルダを覚えている機能
  • 多言語対応
  • 複数トラックに分散したドラムトラックを認識する機能 (すでに実装済みでしたらすみません)
  • ドラムを使用しているトラックをある程度自動で検出する機能
2016-03-22 22:27 Updated by: yyagi
评论

すみません、一つ前のコメントは私のものです。

更にもう1点TODO追加: 途中でBPMが変わる曲データへの対応

2016-03-29 03:55 Updated by: yyagi
评论

rev953で、拍子変更に対応しました。時間がおありでしたら、動作確認いただけますと幸いです。

BPMが途中で変わるデータにも対応済みです。

2016-03-29 21:45 Updated by: ikanick
评论

TODOコード修正BPM拍子変化 他諸々ありがとうございます。

BPM拍子変化の件、確認してほんとに細かい箇所をrev954にて修正しました。
test用midiも適当に変化させるものに入れ替えました。

イベントクラスができてすごく綺麗なコードでびっくりしました。。参考にさせていただきます!

2016-03-31 00:58 Updated by: yyagi
评论

rev955で、日英両言語に対応しました。

一つ要望です。HHとCYの裏チャンネルに割り当てができるようにして欲しいです。私は、Hihat Openは、HHの裏チャンネルに割り当てたいですし、Ride CymbalはCYの裏に割り当てたいです。

2016-03-31 02:52 Updated by: ikanick
评论

rev956で暫定的に裏チャンネルに対応しました。
全レーン裏指定できちゃいそうですがこの辺りは大丈夫なのかな?

2016-04-01 02:27 Updated by: yyagi
评论

速攻で裏チャンネルに対応いただき、ありがとうございます。簡単にしか動作確認していませんが、問題なく動作しているようです。全レーン裏指定できちゃうのは、まあ、とりあえず、いいんじゃないでしょうか。(ツッコミが来たら考えましょうww)

rev958で、主にMIDIインポート機能用に、LP/LBDレーンを追加しました。ただし初期設定ではこのレーンが非表示となっています。表示させるためには、ツール - オプション - 使用レーン、で、LPにチェックを入れてください。HHとSDの間に、LPレーンが現れます。表がLP(0x1B)で、裏がLBD(0x1C)です。(チップの色はどなたか適当に修正ください)

LP周りのMIDIインポート機能の動作も簡単に確認済みです。LPレーンが非表示の状態でも、MIDIインポート機能で割り振り先にLPレーンを指定することができ、実行でき、実行後にLPレーンを非表示から表示に切り替えてもちゃんとLPレーン上にチップが乗っているようです。


TODO状況更新:

  • (済) 拍子変更対応
  • (済) DTXC側にLP LBDのチャンネルを内部的に実装し、対象レーン一覧に表示させたい(ver.k向け譜面対応)
  • (済) D&D対応
  • (済) 多言語対応
  • (済) 途中でBPMが変わる曲データへの対応
  • (済) 裏チャンネル対応
  • エラー処理
  • 設定の保存機能
  • 最後にMIDIファイルを読みだしたフォルダを覚えている機能
  • 複数トラックに分散したドラムトラックを認識する機能 (すでに実装済みでしたらすみません)
  • ドラムを使用しているトラックをある程度自動で検出する機能
  • 複数のMIDIチャンネルをドラム用に割り当てる機能(今は1つのチャンネルのみ指定可能)
2016-04-01 06:05 Updated by: ikanick
评论

LPLBDレーン追加お疲れ様です!こちらでも軽くですが確認できました。
裏Chは…元々どのレーン上に配置できるし仕様ですねヾ(:3ノシヾ)ノシ


rev959にて以下変更を行いました。

  • レーン色の調整(LP(BDよりピンク寄り)とCY(若干青くした))
  • MIDI Importへチャンネル一覧を追加し、それに伴い複数チャンネルに対応しました。トラックを考慮せず指定Chのノートオンだけひたすら集めます。
  • フォームに名前つけたり簡単な整理を行いました。リソースもいじってたら取り返しつかなくなったのでもしかしたらうまく戻せてないかもしれないです…
  • 最後にMIDIファイルを読みだしたフォルダを覚えている機能を追加しました(暫定)

最後にMIDIファイルを読みだしたフォルダを覚えている機能

機能追加したはしたのですが、現状作業フォルダと意味合いが殆ど同じです。
DTXの保存先と切り分けたいという意図でよろしいでしょうか?
そうなると、作業フォルダをMIDI読込先に変更しない実装でいいの…か…?

2016-04-04 04:28 Updated by: yyagi
评论

rev961-964で、色々と細かい修正を入れました。

「最後にMIDIファイルを読みだしたフォルダを覚えている機能」ですが、私はDAWとかでMIDIデータを作るような方であれば、DTXのデータフォルダとは別に保存フォルダを作られているのではないかなと思いました。それでこの機能を提案したのですが、実際のところ、作業フォルダとイコールの運用をされている方が多いのであれば、元の仕様に戻してしまってよいと思います。

ところで、後はエラー処理と設定保存を入れたら完成(trunkにマージ)でいいんじゃないかなと思いますが、いかがでしょうか。

参考: 私が使っているテストデータです。DAWなどができる前の、HW音源全盛期のデータばかりですが、当時も各種テストに使っていました。tp://27.120.112.29/TESTDATA.zip

2016-04-04 06:39 Updated by: ikanick
评论

お疲れ様です。
rev964で実行したところ、チャンネル一覧のチェックの変更ができなくなっているようです。
任意のチェックボックスの値をOFFからONにして別の行を選択すると、チェックがOFFになってしまいます。(Win7 64)

上記に関連して、現状、チャンネル一覧の値を変更する度MIDIファイルを開きに行く暫定仕様になってしまっていたので(自分で何故こうしたのか…)
変更時には、すでに解析してあるCMIDI.lMIDIイベントのチャンネル等の情報から必要な情報を読みに行くように修正しようと思います。
上記不具合について解ることありますでしょうか?

「最後にMIDIファイルを読みだしたフォルダを覚えている機能」はこちらの勘違いで、
MIDIインポート反映時にstr作業フォルダを移動しないと不安定な動作になるものだと思っておりました。
が問題なさそうなので、MIDI読込時には作業フォルダを変更しない実装に変更致します。

trunkについては開発メンバー側でmidiが読み込めるのであれば、問題ないと思います。

参考アクセスできないのでまた後で確認します!

2016-04-04 10:22 Updated by: yyagi
评论

エンバグすみません。こちらでもご指摘の現象を確認しました。関連するところも、ご指摘の個所だろうと思われます。

参考のIPアドレスは 27.120.112.19でしたすみません。

2016-04-04 12:50 Updated by: None
评论

yyagiです。エンバグの原因ですが、 解析の最後でドラムチャンネルの推測結果で上書きしちゃってるんじゃなかろうか。 ソースでは未確認ですが、自分でやってることなのでこれで間違いないはず。適当に修正下さい。。。

2016-04-05 06:25 Updated by: ikanick
评论

エンバグの件確認できました。ので、チャンネル変更時に必要な情報だけ読みに行く実装で直るはずです。 参考:今度はzipが存在しないみたいです_(:3」∠)_

2016-04-05 09:11 Updated by: ikanick
评论

rev965で以下の通り対応しました。

  • 作業フォルダを使わないように変更。MIDI選択時は、MIDIを最後に読み込んだフォルダから読めるようになった。
  • ノート毎のチャンネル情報を、CMIDIトラックではなくCMIDIイベントで管理するようにした。
  • チャンネル一覧の値変更時にはファイルを開き直すのではなく、解析されたイベントから処理を行うようにした。
  • レーン割り当て後の重複チップの検索が重かった為、高速化した。
  • (LPレーンの追加ついでに)LCレーンの色を調整。これにより隣り合うレーンも若干見やすくなった?
2016-04-05 09:15 Updated by: ikanick
评论

CMIDIはMIDI、トラックはトラック、イベントはイベントでといったクラス設計がまともにできておらずスパゲッティなので、
次は気をつけたいです…(むずかしい)

2016-04-05 20:40 Updated by: yyagi
评论

ご対応ありがとうございます。

MIDI ChannelListのチェックボックスをON/OFFしても、隣のMIDI AssignのNotesが増減しないようですが、これは想定通りの動作でしょうか。(前のrevではここも変わっていたような・・・)

# Ch10をON/OFFすると簡単に確認できます

参考: 同期タイミングの問題っぽいので、再確認いただけませんか?

2016-04-05 20:47 Updated by: yyagi
评论

すみません、先のコメントは取り消させてください。なぜかDesignerの同期が不十分だったようです。

2016-04-05 21:57 Updated by: ikanick
评论

解決してよかったです!

参考の方DLできましたのでこちらで色々確認してみます。
早速最初のファイル(8pd_sab1.MID)でWAVリストにBPMが大量に並んでるとかいうバグ見つけたので
はやめにプチプチ潰したいところです。

2016-04-05 22:31 Updated by: yyagi
评论

うちでは更に、BPM変更がほとんどチップとして生成されなくなりました。

これはたぶんCMIDIインポートダイアログ.csのL453の条件の問題だと思いますので、合わせて修正いただけますと幸いです。

2016-04-06 01:58 Updated by: ikanick
评论

rev967で以下の対応をしました。

  • WAVリストにBPMが大量に出現するのを修正
  • BPMチップが表示されなくなっていたのを修正(すみません)
  • 先頭BPMが指定される条件を、合計デルタタイムが0の時に変更

参考ファイルで色々見ていってます。

2016-04-06 02:50 Updated by: ikanick
评论

rev968で重複チップの計算が間違っていたのを修正しました。

rev969で以下に対応しました。

  • 最初のノートが3小節目以降だとチップが配置されないことがあるのを修正

TESTDATA\YUIのDQ2E.MIDでチップが配置されないのを確認したため、
tMIDIイベントリストから小節リストを構成する メソッドを少しだけ変更しました。
拍子変更イベントの絶対時間が、小節外にあれば、必要なだけ小節を追加するのではなく、
いずれかのイベントの絶対時間が、小節外にあれば、必要なだけ小節を追加する。
もし小節内で拍子変更があった場合はそれに従う
仕様にしました。

2016-04-06 21:22 Updated by: yyagi
评论

rev970で、小節追加の方法を元に近い方法に戻しました。小節長指定がない場合に問題発生しているように見えますので、小節長指定がない場合は小節長4/4を最後に追加することで、以前のロジックをそのまま使えるようにしました。(全イベントでループさせてもよいのですが、それだと処理時間が非常に長くなりましたので、この方法にしました)

それと、設定保持/復元の仕込みを入れました。普通にMIDIインポート画面を開くと、exeと同じフォルダにtest.xmlができるので、それを修正して設定変更してください。その状態でCapsLockをONにして再度MIDIインポート画面を開くと、設定が取り込まれます。

実際には設定保存/読み込みボタンを追加して、そこからファイル指定のダイアログなんかを出すんだと思いますが、その辺は適当に付けていただけますと幸いです。

2016-04-08 10:28 Updated by: ikanick
评论

小節追加の方法の修正、ありがとうございます!

rev971で以下の対応をしました。

MIDIインポート設定ファイルの読込/保存機能を追加

  • 割り当て一覧の状態と、インポート設定3項目の状態をファイルに保存できる
  • デフォルト設定ファイルがない状態でMIDIインポート画面を開くと、デフォルト設定ファイルを作成する

コード整理・日本語対応

まだまだ穴がありそう…

2016-04-11 01:27 Updated by: yyagi
  • 属主 Update from (无) to ikanick
  • Summary Updated
  • Details Updated
评论

そろそろ機能的に問題ない内容になってきたと思いましたので、若干のエラー処理を追加して、trunkにマージしました。

以後修正があれば、trunkでどうぞ。

なお、このチケットはexport機能にも言及していましたが、import機能の対応がキリの良いところまで来たと思いますので、このチケットではimportのみを扱うことにして、exportは別チケットにします。(後日チケット発行します)

2016-04-11 06:58 Updated by: ikanick
评论

マージありがとうございます!exportはそれこそちゃんとした知識が必要そうなので見守っております_(:3」∠)_

難易度査定マンが本格的に実装されたら、MIDIをインポートして難易度もつけてくれる!とか、夢のようです。

2016-08-02 17:26 Updated by: yyagi
  • 处理结果 Update from to Accepted
评论

DTXC Rel032に搭載済み。本チケットはクローズします。お疲れ様でした!

2016-08-02 17:47 Updated by: yyagi
  • Ticket Close date is changed to 2016-08-02 17:47
  • 状态 Update from 开启 to 关闭

Attachment File List

No attachments

编辑

You are not logged in. I you are not logged in, your comment will be treated as an anonymous post. » 登录名