テスト版を作りました。 tp://yyagi.com/DTXC_32551_20140113.zip
この機能を使うと、簡単にBPMの設定と譜面同期ができます。まあ自分で曲データから作る人には関係のない機能ですが、たまたま自分が作りたい曲データが既存曲だったもので、こんな機能を作ってみました。(いきなりtrunkに突っ込んでごめんなさい)
ちょっとややこしい機能なので、簡単に使い方を説明します。味見してもらえるとありがたいです。
1. 空の譜面を開く
2. 0小節目のBGMレーンに、BPM検出/同期処理をしたいBGMチップを置く
3. 選択モードに切り替えて、譜面上で右クリックメニューを出し、下から2番目にある「BEATチップの生成」を実行する
4. しばらく待つと、BPMレーンの右にあるBEATレーンに、●×のチップが現れる。これがBEATチップ。●と×どちらも、beatとして検出しているもの。そのうち●は、DTXCが拍として扱うもので、×が扱わないもの。(初期値はDTXCがそれなりに設定する)
5. ●×と連動して、HHの表裏が配置される(DTXVで●×の位置を確認するために、とりあえず配置している。後日削除予定)
6. ●の位置にだけ、BPMチップが現れる(最初の●だけ例外あり)。
7. 一旦これでDTXVで最初から再生してみる。最初の拍(要するにアタマ)がずれていることがあるので、全体選択してチップを上下し、アタマを合わせる。
8. アタマが合ったら、更にDTXVで再生してみる。拍がちゃんとあっているかを確認する。ずれていたら●×のチップを上下に動かした上で、右クリックメニューの一番下(BEATチップからBPMチップを生成)を実行すると、BEATチップで示された拍の位置がBPM情報に反映される。
9. 8.の操作に関して、選択モードでBEATチップを左クリックするか、編集モードでBEATチップを右クリックするかすることで、●×を入れ替えることができる。×にすると、DTXCはそこに拍があるとは認識しなくなり、その箇所でBPMチップを生成しなくなる。
10. 8の操作に関して、●×のチップは上下移動のみ可能。削除不可。
11. 8の操作に関して、●×のチップの時間の前後関係を前後させてはいけない。例えば、1拍目と2拍目に●のチップA,Bがあったとして、AをBの後になるように動かしてはいけない。(今はまだそのように動かすことができてしまうが、それをやるとたぶん誤動作する)
12. 8の操作に関して、右クリックメニューに「指定レーンで、その小節以降のチップをすべて選択」するコマンドを追加しているので、うまく活用のこと。この機能は割と使うことになる。
13. とにかく、BEATレーンを操作したら、右クリックメニューの一番下「BEATチップからBPMチップを生成」を実行して、DTXVでテスト再生、というのを繰り返す。曲の最後までBPMと譜面同期が確認できたら、作業完了。
今分かっている制限は、以下の通りです。
⇒DTXC_32551_20140113.zip
仕事の合間の現実逃避で少しだけやってみました。結論:まだ試せてません。後日やります。
解凍して実行したところエラー。
************** 例外テキスト ************** System.IO.FileNotFoundException: ファイルまたはアセンブリ 'FDK, Version=21.0.0.0, Culture=neutral, PublicKeyToken=8ff6cb135535d56f'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。 ファイル名 'FDK, Version=21.0.0.0, Culture=neutral, PublicKeyToken=8ff6cb135535d56f' です。
なので、リボジトリブラウザーから実行時フォルダ(DTXCreator)をチェックアウト
DTXCを起動して、
3. 選択モードに切り替えて、譜面上で右クリックメニューを出し、下から2番目にある「BEATチップの生成」を実行する
を実行したところでエラー。
************** 例外テキスト ************** System.DllNotFoundException: DLL 'bass_fx.dll' を読み込めません: 指定されたモジュールが見つかりません。 (HRESULT からの例外: 0x8007007E) 場所 Un4seen.Bass.AddOn.Fx.BassFx.BASS_FX_GetVersion()
・・・チェックアウトしたほうにbase_fx.dllがないなー
ということで、DTXC_32551_20140113.zipからbass_fx.dllをコピー
→無事○×が出たので
7. 一旦これでDTXVで最初から再生してみる。最初の拍(要するにアタマ)がずれていることがあるので、全体選択してチップを上下し、アタマを合わせる。
・・・音が出ないw
時間の都合でここまでしか試せませんでした。
後日続きテストします。
なお上記はXP.Vista以降じゃないと動作しないよ?なら7でテストします。
お手数をおかけして、すみません。
FDKのエラーはconfigファイルのzip添付漏れで、base_fx.dllのエラーはおっしゃる通りコミット漏れです。それぞれ、zipの差し替え、dllのコミットにて対応いたしました。
音が出ない件については、ちょっと原因を思いつきませんでした、例えば、同時にDTXMania本体を立ち上げていたりして、WASAPI/ASIOなんかを使っていますと、(サウンドが排他動作になりますので) DTXV側の音が鳴らなくなることがあるのですが、ウチで確認した限りでは、ASIOとの組み合わせでDTXVの音を再生できてしまいました。
なお、XP/Vista/7に関係なく動作するはずです。私はWin8.1で動作確認しました。
⇒rev 666
音はoggファイルにすることでちゃんと再生されました。
mp3など、●×は出るしプレビューでは再生されるのですが、DTXVで音が出ません。
→XPだからか私の端末の問題かも。以前に似たような症状で「同じデータなのに7では再生される…」というのがありましたので。
ライブや変速の多い曲では便利な機能かなと思いましたが、…使いこなすにはかなりコツ(?)が必要そうですね^^;
正直なところうまく使い方が飲み込めないのでもう少々触ってみます。
メモリ割り当て失敗が原因でしたか・・・>wavだとDTXVで再生できない。これは追々DTXMania本体でDTXVを置き換えるようにしますので、今は放置させてください。
で、やっぱり使い方がよくわからないですよね・・・。基本的にはベースドラム的な音を拍として認識しているみたいなんですが、そうでないところもあるし。拍の可視化って難しい。いっそ、サウンドの波形をレーンのところに表示した方がいいのかも。
DTXM本体での対応待ち、承知です。
使うソースにもよるのでしょうが、「拍」が意外な場所で認識されていることが多く・・・かえって大変orz
この手ので有効に利用するには絶対音感を再現するレベルのアルゴリズムが必要なのでは、なんてのは思いすぎですか・・・。
Sound Engine等で波形を表示することはあるのですが、いろんな音が混ざった状態での波形だと、どこが拍なのかは見た目では分かりにくいです。
例えば、バスだけがなっている、のであれば波形から拍を推測するのは比較的楽だと思います。
つまりBPMを取得するにはこの特定の音だけを抽出・分析する必要があると思います。
波形を表示するにもやはり特定のだけを表示するようにしないとわからないのでは・・・と。
特定の音だけを抽出・分析できるのであれば、そもそも拍の検出以前にDTXデータの全自動作成ができるわけで・・・
今の私の知識ではとてもそこまではできませんので、それではこの機能はキリのいいところまで作りこんでから隠し機能にします。(一段深いメニューの中に入れます)
音の分析は、それだけで一つの研究所が出来そうなくらい難しい分野だと思っていますので、上手く利用することは難しい…ですよね。
機能を絞って補助として使う方向で強化する案を提案できないかなぁと思っていたのですが、使うソースが悪いのか認識がバラバラすぎて、うまく考えもまとまりませんでしたorz
最近更新されていないですね、作者さん年度末で忙しいかな?
既出だったらすみません。
BPM自動取得について、ちょっと思いついたことがあったのですが、半手動にするのはいかがでしょうか?
DTXViwerで再生時に、電子ドラムだったりキーボードで、各小節の頭で打ってやって、BPMを自動計算させるという仕組みです。
これならば割と実装しやすいんじゃないかなーと思うのと、再生速度をx0.5とかでやればけっこう良い精度でできるんじゃないかなと思います。
すみません。おっしゃる通り、年度末で私は毎日終電帰りしてます。(今日はたまたま2時間ほど早く帰れました)
3月中はこんな感じが続くかと思います。
小節の頭でキーボードを押す
「小節の頭」でちゃんとキーボードが押せる人向けにはいい機能だと思います。ちょっと心配なのが、
お疲れ様でございます。
どちらかというと Just an idea ですので、スルーしていただいても構いませんです(^-^;)
DTXデータ作成の際、BPMの取得並びに同期取りが非常に面倒なので、これをDTXCで自動取得するような機能を追加する。
譜面とBGMの同期を完全に自動化することは難しい(変拍子があるので)。しかし、多少の手動操作で簡単に同期できるようにはする。
内部では、BASS FX の beat detection 機能を使う。