• R/O
  • SSH
  • HTTPS

dtxmaniaxg-verk: Commit


Commit MetaInfo

Revision570 (tree)
Time2017-11-19 22:17:05
Authorkairera0467

Log Message

#xxxxx 譜面6レーン化メソッドのLP/LBD変換で移動させる先が間違えていたので修正(ひかりさんありがとうございます!)
#xxxxx フレームワークを.NET 4.0に変更(XPでは起動できなくなります)
#xxxxx 開発環境をVS2013に更新
#xxxxx FDKのサウンド周辺のコードを最新のものに更新
#xxxxx キー音を62進数に対応しようとしたものの不具合発生のため封印

Change Summary

Incremental Difference

--- trunk/DTXCreatorプロジェクト/Properties/Resources.Designer.cs (revision 569)
+++ trunk/DTXCreatorプロジェクト/Properties/Resources.Designer.cs (revision 570)
@@ -1,7 +1,7 @@
11 //------------------------------------------------------------------------------
22 // <auto-generated>
33 // このコードはツールによって生成されました。
4-// ランタイム バージョン:2.0.50727.5472
4+// ランタイム バージョン:4.0.30319.42000
55 //
66 // このファイルへの変更は、以下の状況下で不正な動作の原因になったり、
77 // コードが再生成されるときに損失したりします。
@@ -17,9 +17,9 @@
1717 /// </summary>
1818 // このクラスは StronglyTypedResourceBuilder クラスが ResGen
1919 // または Visual Studio のようなツールを使用して自動生成されました。
20- // メンバを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に
20+ // メンバーを追加または削除するには、.ResX ファイルを編集して、/str オプションと共に
2121 // ResGen を実行し直すか、または VS プロジェクトをビルドし直します。
22- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
22+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
2323 [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
2424 [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
2525 internal class Resources {
@@ -60,6 +60,9 @@
6060 }
6161 }
6262
63+ /// <summary>
64+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
65+ /// </summary>
6366 internal static System.Drawing.Bitmap BGMのみ再生 {
6467 get {
6568 object obj = ResourceManager.GetObject("BGMのみ再生", resourceCulture);
@@ -76,6 +79,9 @@
7679 }
7780 }
7881
82+ /// <summary>
83+ /// (アイコン) に類似した型 System.Drawing.Icon のローカライズされたリソースを検索します。
84+ /// </summary>
7985 internal static System.Drawing.Icon dtxcreator {
8086 get {
8187 object obj = ResourceManager.GetObject("dtxcreator", resourceCulture);
@@ -83,6 +89,9 @@
8389 }
8490 }
8591
92+ /// <summary>
93+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
94+ /// </summary>
8695 internal static System.Drawing.Bitmap Redo {
8796 get {
8897 object obj = ResourceManager.GetObject("Redo", resourceCulture);
@@ -406,6 +415,9 @@
406415 }
407416 }
408417
418+ /// <summary>
419+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
420+ /// </summary>
409421 internal static System.Drawing.Bitmap Undo {
410422 get {
411423 object obj = ResourceManager.GetObject("Undo", resourceCulture);
@@ -413,6 +425,9 @@
413425 }
414426 }
415427
428+ /// <summary>
429+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
430+ /// </summary>
416431 internal static System.Drawing.Bitmap コピー {
417432 get {
418433 object obj = ResourceManager.GetObject("コピー", resourceCulture);
@@ -420,6 +435,9 @@
420435 }
421436 }
422437
438+ /// <summary>
439+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
440+ /// </summary>
423441 internal static System.Drawing.Bitmap スピーカー {
424442 get {
425443 object obj = ResourceManager.GetObject("スピーカー", resourceCulture);
@@ -427,6 +445,9 @@
427445 }
428446 }
429447
448+ /// <summary>
449+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
450+ /// </summary>
430451 internal static System.Drawing.Bitmap チップパレット {
431452 get {
432453 object obj = ResourceManager.GetObject("チップパレット", resourceCulture);
@@ -434,6 +455,9 @@
434455 }
435456 }
436457
458+ /// <summary>
459+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
460+ /// </summary>
437461 internal static System.Drawing.Bitmap バージョン情報 {
438462 get {
439463 object obj = ResourceManager.GetObject("バージョン情報", resourceCulture);
@@ -441,6 +465,9 @@
441465 }
442466 }
443467
468+ /// <summary>
469+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
470+ /// </summary>
444471 internal static System.Drawing.Bitmap ヘルプ {
445472 get {
446473 object obj = ResourceManager.GetObject("ヘルプ", resourceCulture);
@@ -448,6 +475,9 @@
448475 }
449476 }
450477
478+ /// <summary>
479+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
480+ /// </summary>
451481 internal static System.Drawing.Bitmap りらちょー {
452482 get {
453483 object obj = ResourceManager.GetObject("りらちょー", resourceCulture);
@@ -455,6 +485,9 @@
455485 }
456486 }
457487
488+ /// <summary>
489+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
490+ /// </summary>
458491 internal static System.Drawing.Bitmap 上移動 {
459492 get {
460493 object obj = ResourceManager.GetObject("上移動", resourceCulture);
@@ -462,6 +495,9 @@
462495 }
463496 }
464497
498+ /// <summary>
499+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
500+ /// </summary>
465501 internal static System.Drawing.Bitmap 下移動 {
466502 get {
467503 object obj = ResourceManager.GetObject("下移動", resourceCulture);
@@ -469,6 +505,9 @@
469505 }
470506 }
471507
508+ /// <summary>
509+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
510+ /// </summary>
472511 internal static System.Drawing.Bitmap 保存 {
473512 get {
474513 object obj = ResourceManager.GetObject("保存", resourceCulture);
@@ -476,6 +515,9 @@
476515 }
477516 }
478517
518+ /// <summary>
519+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
520+ /// </summary>
479521 internal static System.Drawing.Bitmap 再生 {
480522 get {
481523 object obj = ResourceManager.GetObject("再生", resourceCulture);
@@ -483,6 +525,9 @@
483525 }
484526 }
485527
528+ /// <summary>
529+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
530+ /// </summary>
486531 internal static System.Drawing.Bitmap 再生一時停止 {
487532 get {
488533 object obj = ResourceManager.GetObject("再生一時停止", resourceCulture);
@@ -490,6 +535,9 @@
490535 }
491536 }
492537
538+ /// <summary>
539+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
540+ /// </summary>
493541 internal static System.Drawing.Bitmap 再生停止 {
494542 get {
495543 object obj = ResourceManager.GetObject("再生停止", resourceCulture);
@@ -497,6 +545,9 @@
497545 }
498546 }
499547
548+ /// <summary>
549+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
550+ /// </summary>
500551 internal static System.Drawing.Bitmap 切り取り {
501552 get {
502553 object obj = ResourceManager.GetObject("切り取り", resourceCulture);
@@ -504,6 +555,9 @@
504555 }
505556 }
506557
558+ /// <summary>
559+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
560+ /// </summary>
507561 internal static System.Drawing.Bitmap 削除 {
508562 get {
509563 object obj = ResourceManager.GetObject("削除", resourceCulture);
@@ -511,6 +565,9 @@
511565 }
512566 }
513567
568+ /// <summary>
569+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
570+ /// </summary>
514571 internal static System.Drawing.Bitmap 動画ドキュメント {
515572 get {
516573 object obj = ResourceManager.GetObject("動画ドキュメント", resourceCulture);
@@ -518,6 +575,9 @@
518575 }
519576 }
520577
578+ /// <summary>
579+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
580+ /// </summary>
521581 internal static System.Drawing.Bitmap 新規作成 {
522582 get {
523583 object obj = ResourceManager.GetObject("新規作成", resourceCulture);
@@ -525,6 +585,9 @@
525585 }
526586 }
527587
588+ /// <summary>
589+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
590+ /// </summary>
528591 internal static System.Drawing.Bitmap 最初から再生 {
529592 get {
530593 object obj = ResourceManager.GetObject("最初から再生", resourceCulture);
@@ -532,6 +595,9 @@
532595 }
533596 }
534597
598+ /// <summary>
599+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
600+ /// </summary>
535601 internal static System.Drawing.Bitmap 画像ドキュメント {
536602 get {
537603 object obj = ResourceManager.GetObject("画像ドキュメント", resourceCulture);
@@ -539,6 +605,9 @@
539605 }
540606 }
541607
608+ /// <summary>
609+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
610+ /// </summary>
542611 internal static System.Drawing.Bitmap 矢印ポインタ {
543612 get {
544613 object obj = ResourceManager.GetObject("矢印ポインタ", resourceCulture);
@@ -546,6 +615,9 @@
546615 }
547616 }
548617
618+ /// <summary>
619+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
620+ /// </summary>
549621 internal static System.Drawing.Bitmap 表示形式選択 {
550622 get {
551623 object obj = ResourceManager.GetObject("表示形式選択", resourceCulture);
@@ -553,6 +625,9 @@
553625 }
554626 }
555627
628+ /// <summary>
629+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
630+ /// </summary>
556631 internal static System.Drawing.Bitmap 貼り付け {
557632 get {
558633 object obj = ResourceManager.GetObject("貼り付け", resourceCulture);
@@ -560,6 +635,9 @@
560635 }
561636 }
562637
638+ /// <summary>
639+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
640+ /// </summary>
563641 internal static System.Drawing.Bitmap 鉛筆 {
564642 get {
565643 object obj = ResourceManager.GetObject("鉛筆", resourceCulture);
@@ -567,6 +645,9 @@
567645 }
568646 }
569647
648+ /// <summary>
649+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
650+ /// </summary>
570651 internal static System.Drawing.Bitmap 開く {
571652 get {
572653 object obj = ResourceManager.GetObject("開く", resourceCulture);
@@ -574,6 +655,9 @@
574655 }
575656 }
576657
658+ /// <summary>
659+ /// 型 System.Drawing.Bitmap のローカライズされたリソースを検索します。
660+ /// </summary>
577661 internal static System.Drawing.Bitmap 音楽ドキュメント {
578662 get {
579663 object obj = ResourceManager.GetObject("音楽ドキュメント", resourceCulture);
--- trunk/DTXCreatorプロジェクト/Properties/Settings.Designer.cs (revision 569)
+++ trunk/DTXCreatorプロジェクト/Properties/Settings.Designer.cs (revision 570)
@@ -1,7 +1,7 @@
11 //------------------------------------------------------------------------------
22 // <auto-generated>
33 // このコードはツールによって生成されました。
4-// ランタイム バージョン:2.0.50727.4952
4+// ランタイム バージョン:4.0.30319.42000
55 //
66 // このファイルへの変更は、以下の状況下で不正な動作の原因になったり、
77 // コードが再生成されるときに損失したりします。
@@ -12,7 +12,7 @@
1212
1313
1414 [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "9.0.0.0")]
15+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")]
1616 internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
1717
1818 private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
--- trunk/DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs (revision 569)
+++ trunk/DTXManiaプロジェクト/コード/スコア、曲/CDTX.cs (revision 570)
@@ -880,7 +880,7 @@
880880 this.dbチップサイズ倍率,
881881 this.bWAVを使うチャンネルである,
882882 this.b自動再生音チャンネルである,
883- CDTX.tZZ( this.n整数値 ) );
883+ CDTX.tZZ_62mode( this.n整数値 ) );
884884 }
885885 /// <summary>
886886 /// チップの再生長を取得する。現状、WAVチップとBGAチップでのみ使用可能。
@@ -1013,11 +1013,11 @@
10131013
10141014 if( this.n表記上の番号 == this.n内部番号 )
10151015 {
1016- sb.Append( string.Format( "CWAV{0}: ", CDTX.tZZ( this.n表記上の番号 ) ) );
1016+ sb.Append( string.Format( "CWAV{0}: ", CDTX.tZZ_62mode( this.n表記上の番号 ) ) );
10171017 }
10181018 else
10191019 {
1020- sb.Append( string.Format( "CWAV{0}(内部{1}): ", CDTX.tZZ( this.n表記上の番号 ), this.n内部番号 ) );
1020+ sb.Append( string.Format( "CWAV{0}(内部{1}): ", CDTX.tZZ_62mode( this.n表記上の番号 ), this.n内部番号 ) );
10211021 }
10221022 sb.Append( string.Format( "音量:{0}, 位置:{1}, サイズ:{2}, BGM:{3}, File:{4}, Comment:{5}", this.n音量, this.n位置, this.nチップサイズ, this.bBGMとして使う ? 'Y' : 'N', this.strファイル名, this.strコメント文 ) );
10231023
@@ -1485,6 +1485,7 @@
14851485 public bool b強制的にXG譜面にする;
14861486 public bool bVol137to100;
14871487 public double dbDTXVPlaySpeed;
1488+ public bool bExpandKeySoundMode;
14881489 #if TEST_NOTEOFFMODE
14891490 public STLANEVALUE<bool> b演奏で直前の音を消音する;
14901491 // public bool bHH演奏で直前のHHを消音する;
@@ -1556,8 +1557,8 @@
15561557 this.nRESULTSOUND用優先順位 = new int[ 7 ];
15571558 this.b強制的にXG譜面にする = false;
15581559 this.bVol137to100 = false;
1560+ this.bExpandKeySoundMode = true;
15591561
1560-
15611562 #region [ 2011.1.1 yyagi GDA->DTX変換テーブル リファクタ後 ]
15621563 STGDAPARAM[] stgdaparamArray = new STGDAPARAM[] { // GDA->DTX conversion table
15631564 new STGDAPARAM("TC", 0x03), new STGDAPARAM("BL", 0x02), new STGDAPARAM("GS", 0x29),
@@ -2238,7 +2239,7 @@
22382239
22392240 case 0x1B: //LP
22402241 case 0x1C: //LBD
2241- chip.nチャンネル番号 = 0x16;
2242+ chip.nチャンネル番号 = 0x76;
22422243 continue;
22432244 }
22442245 }
@@ -3150,6 +3151,21 @@
31503151 string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
31513152 return new string( new char[] { str[ n / 36 ], str[ n % 36 ] } );
31523153 }
3154+ /// <summary>
3155+ /// 2017.1.16 kairera0467 キー音が1296以上のDTXに対応させるために62進数を使ってみるテスト。
3156+ /// </summary>
3157+ /// <param name="n"></param>
3158+ /// <returns></returns>
3159+ public static string tZZ_62mode( int n )
3160+ {
3161+ if( n < 0 || n >= 62 * 62 )
3162+ return "!!"; // オーバー/アンダーフロー。
3163+
3164+ // n を62進数2桁の文字列にして返す。
3165+
3166+ string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
3167+ return new string( new char[] { str[ n / 62 ], str[ n % 62 ] } );
3168+ }
31533169 public void tギターとベースのランダム化(E楽器パート part, Eランダムモード eRandom)
31543170 {
31553171 if( ( ( part == E楽器パート.GUITAR ) || ( part == E楽器パート.BASS ) ) && ( eRandom != Eランダムモード.OFF ) )
@@ -5324,6 +5340,27 @@
53245340 this.t入力・パラメータ食い込みチェック( "VOL7FTO64", ref strコマンド, ref strパラメータ );
53255341 this.bVol137to100 = strパラメータ.ToLower().Equals( "on" );
53265342 }
5343+ else if( strコマンド.StartsWith( "EXPKEYSOUND" ) )
5344+ {
5345+ this.t入力・パラメータ食い込みチェック( "EXPKEYSOUND", ref strコマンド, ref strパラメータ );
5346+ this.bExpandKeySoundMode = strパラメータ.ToLower().Equals( "on" );
5347+
5348+ // 62進数モード時はlistの容量自体を増やす。
5349+ this.n無限管理WAV = new int[ 62 * 62 ];
5350+ this.n無限管理BPM = new int[ 62 * 62 ];
5351+ this.n無限管理VOL = new int[ 62 * 62 ];
5352+ this.n無限管理PAN = new int[ 62 * 62 ];
5353+ this.n無限管理SIZE = new int[ 62 * 62 ];
5354+
5355+ for ( int j = 0; j < 62 * 62; j++ )
5356+ {
5357+ this.n無限管理WAV[ j ] = -j;
5358+ this.n無限管理BPM[ j ] = -j;
5359+ this.n無限管理VOL[ j ] = -j;
5360+ this.n無限管理PAN[ j ] = -10000 - j;
5361+ this.n無限管理SIZE[ j ] = -j;
5362+ }
5363+ }
53275364 #region [ DTXVPLAYSPEED ]
53285365 //-----------------
53295366 else if ( strコマンド.StartsWith( "DTXVPLAYSPEED", StringComparison.OrdinalIgnoreCase ) )
@@ -5432,12 +5469,12 @@
54325469 else if( !this.t入力・行解析・WAVVOL_VOLUME( strコマンド, strパラメータ, strコメント ) &&
54335470 !this.t入力・行解析・WAVPAN_PAN( strコマンド, strパラメータ, strコメント ) &&
54345471 !this.t入力・行解析・WAV( strコマンド, strパラメータ, strコメント ) &&
5435- !this.t入力・行解析・BMPTEX( strコマンド, strパラメータ, strコメント ) &&
5436- !this.t入力・行解析・BMP( strコマンド, strパラメータ, strコメント ) &&
5437- !this.t入力・行解析・BGAPAN( strコマンド, strパラメータ, strコメント ) &&
5438- !this.t入力・行解析・BGA( strコマンド, strパラメータ, strコメント ) &&
5439- !this.t入力・行解析・AVIPAN( strコマンド, strパラメータ, strコメント ) &&
5440- !this.t入力・行解析・AVI_VIDEO( strコマンド, strパラメータ, strコメント ) &&
5472+ !this.t入力・行解析・BMPTEX( strコマンド, strパラメータ, strコメント ) &&
5473+ !this.t入力・行解析・BMP( strコマンド, strパラメータ, strコメント ) &&
5474+ !this.t入力・行解析・BGAPAN( strコマンド, strパラメータ, strコメント ) &&
5475+ !this.t入力・行解析・BGA( strコマンド, strパラメータ, strコメント ) &&
5476+ !this.t入力・行解析・AVIPAN( strコマンド, strパラメータ, strコメント ) &&
5477+ !this.t入力・行解析・AVI_VIDEO( strコマンド, strパラメータ, strコメント ) &&
54415478 // !this.t入力・行解析・BPM_BPMzz( strコマンド, strパラメータ, strコメント ) && // bヘッダのみ==trueの場合でもチェックするよう変更
54425479 !this.t入力・行解析・RESULTIMAGE( strコマンド, strパラメータ, strコメント ) &&
54435480 !this.t入力・行解析・RESULTMOVIE( strコマンド, strパラメータ, strコメント ) &&
@@ -5480,12 +5517,25 @@
54805517
54815518 #region [ AVI番号 zz を取得する。]
54825519 //-----------------
5483- int zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
5484- if( zz < 0 || zz >= 36 * 36 )
5485- {
5486- Trace.TraceError( "AVI(VIDEO)番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
5487- return false;
5488- }
5520+ int zz = 0;
5521+ if( this.bExpandKeySoundMode )
5522+ {
5523+ zz = C変換.n62進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
5524+ if( zz < 0 || zz >= 62 * 62 )
5525+ {
5526+ Trace.TraceError( "AVI(VIDEO)番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
5527+ return false;
5528+ }
5529+ }
5530+ else
5531+ {
5532+ zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
5533+ if( zz < 0 || zz >= 36 * 36 )
5534+ {
5535+ Trace.TraceError( "AVI(VIDEO)番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
5536+ return false;
5537+ }
5538+ }
54895539 //-----------------
54905540 #endregion
54915541
@@ -5547,12 +5597,25 @@
55475597
55485598 #region [ AVIPAN番号 zz を取得する。]
55495599 //-----------------
5550- int zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
5551- if( zz < 0 || zz >= 36 * 36 )
5552- {
5553- Trace.TraceError( "AVIPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
5554- return false;
5555- }
5600+ int zz = 0;
5601+ if( this.bExpandKeySoundMode )
5602+ {
5603+ zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
5604+ if( zz < 0 || zz >= 62 * 62 )
5605+ {
5606+ Trace.TraceError( "AVIPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
5607+ return false;
5608+ }
5609+ }
5610+ else
5611+ {
5612+ zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
5613+ if( zz < 0 || zz >= 36 * 36 )
5614+ {
5615+ Trace.TraceError( "AVIPAN番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
5616+ return false;
5617+ }
5618+ }
55565619 //-----------------
55575620 #endregion
55585621
@@ -6200,12 +6263,26 @@
62006263 {
62016264 #region [ (B) "#BMPzz:" の場合 → zz = 00 ~ ZZ ]
62026265 //-----------------
6203- zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6204- if( zz < 0 || zz >= 36 * 36 )
6205- {
6206- Trace.TraceError( "BMP番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6207- return false;
6208- }
6266+ zz = 0;
6267+ if( this.bExpandKeySoundMode )
6268+ {
6269+ zz = C変換.n62進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6270+ if( zz < 0 || zz >= 62 * 62 )
6271+ {
6272+ Trace.TraceError( "BMP番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6273+ return false;
6274+ }
6275+ }
6276+ else
6277+ {
6278+ zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6279+ if( zz < 0 || zz >= 36 * 36 )
6280+ {
6281+ Trace.TraceError( "BMP番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6282+ return false;
6283+ }
6284+ }
6285+
62096286 //-----------------
62106287 #endregion
62116288 }
@@ -6250,12 +6327,27 @@
62506327
62516328 #region [ BMPTEX番号 zz を取得する。]
62526329 //-----------------
6253- int zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6254- if( zz < 0 || zz >= 36 * 36 )
6255- {
6256- Trace.TraceError( "BMPTEX番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}]", this.strファイル名の絶対パス, this.n現在の行数 );
6257- return false;
6258- }
6330+ int zz = 0;
6331+ if( this.bExpandKeySoundMode )
6332+ {
6333+ zz = C変換.n62進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6334+ if( zz < 0 || zz >= 62 * 62 )
6335+ {
6336+ Trace.TraceError( "BMPTEX番号に 00~zz 以外の値または不正な文字列が指定されました。[{0}: {1}]", this.strファイル名の絶対パス, this.n現在の行数 );
6337+ return false;
6338+ }
6339+ }
6340+ else
6341+ {
6342+ zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6343+ if( zz < 0 || zz >= 36 * 36 )
6344+ {
6345+ Trace.TraceError( "BMPTEX番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}]", this.strファイル名の絶対パス, this.n現在の行数 );
6346+ return false;
6347+ }
6348+ }
6349+
6350+
62596351 //-----------------
62606352 #endregion
62616353
@@ -6307,12 +6399,24 @@
63076399 {
63086400 #region [ (B) "#BPMzz:" の場合 → zz = 00 ~ ZZ ]
63096401 //-----------------
6310- zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6311- if( zz < 0 || zz >= 36 * 36 )
6312- {
6313- Trace.TraceError( "BPM番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6314- return false;
6315- }
6402+ if( this.bExpandKeySoundMode )
6403+ {
6404+ zz = C変換.n62進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6405+ if( zz < 0 || zz >= 62 * 62 )
6406+ {
6407+ Trace.TraceError( "BPM番号に 00~zz 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6408+ return false;
6409+ }
6410+ }
6411+ else
6412+ {
6413+ zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6414+ if( zz < 0 || zz >= 36 * 36 )
6415+ {
6416+ Trace.TraceError( "BPM番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6417+ return false;
6418+ }
6419+ }
63166420 //-----------------
63176421 #endregion
63186422 }
@@ -6651,13 +6755,25 @@
66516755
66526756 #region [ nWAV番号(36進数2桁)を取得。]
66536757 //-----------------
6654- int nWAV番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6655-
6656- if( nWAV番号 < 0 || nWAV番号 >= 36 * 36 )
6657- {
6658- Trace.TraceError( "SIZEのWAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6659- return false;
6660- }
6758+ int nWAV番号 = 0;
6759+ if( this.bExpandKeySoundMode )
6760+ {
6761+ nWAV番号 = C変換.n62進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6762+ if( nWAV番号 < 0 || nWAV番号 >= 62 * 62 )
6763+ {
6764+ Trace.TraceError( "SIZEのWAV番号に 00~zz 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6765+ return false;
6766+ }
6767+ }
6768+ else
6769+ {
6770+ nWAV番号 = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6771+ if( nWAV番号 < 0 || nWAV番号 >= 36 * 36 )
6772+ {
6773+ Trace.TraceError( "SIZEのWAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6774+ return false;
6775+ }
6776+ }
66616777 //-----------------
66626778 #endregion
66636779
@@ -6711,12 +6827,24 @@
67116827
67126828 #region [ WAV番号 zz を取得する。]
67136829 //-----------------
6714- int zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6715- if( zz < 0 || zz >= 36 * 36 )
6716- {
6717- Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6718- return false;
6719- }
6830+ int zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6831+ if( this.bExpandKeySoundMode )
6832+ {
6833+ zz = C変換.n62進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6834+ if( zz < 0 || zz >= 62 * 62 )
6835+ {
6836+ Trace.TraceError( "WAV番号に 00~zz 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6837+ return false;
6838+ }
6839+ }
6840+ else
6841+ {
6842+ if( zz < 0 || zz >= 36 * 36 )
6843+ {
6844+ Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6845+ return false;
6846+ }
6847+ }
67206848 //-----------------
67216849 #endregion
67226850
@@ -6779,12 +6907,26 @@
67796907
67806908 #region [ WAV番号 zz を取得する。]
67816909 //-----------------
6782- int zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6783- if( zz < 0 || zz >= 36 * 36 )
6784- {
6785- Trace.TraceError( "WAVPAN(PAN)のWAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6786- return false;
6787- }
6910+ int zz = 0;
6911+ if( this.bExpandKeySoundMode )
6912+ {
6913+ zz = C変換.n62進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6914+ if( zz < 0 || zz >= 62 * 62 )
6915+ {
6916+ Trace.TraceError( "WAVPAN(PAN)のWAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6917+ return false;
6918+ }
6919+ }
6920+ else
6921+ {
6922+ zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6923+ if( zz < 0 || zz >= 36 * 36 )
6924+ {
6925+ Trace.TraceError( "WAVPAN(PAN)のWAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6926+ return false;
6927+ }
6928+ }
6929+
67886930 //-----------------
67896931 #endregion
67906932
@@ -6834,12 +6976,25 @@
68346976
68356977 #region [ WAV番号 zz を取得する。]
68366978 //-----------------
6837- int zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6838- if( zz < 0 || zz >= 36 * 36 )
6839- {
6840- Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6841- return false;
6842- }
6979+ int zz = C変換.n36進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6980+ if( this.bExpandKeySoundMode )
6981+ {
6982+ zz = C変換.n62進数2桁の文字列を数値に変換して返す( strコマンド.Substring( 0, 2 ) );
6983+ if( zz < 0 || zz >= 62 * 62 )
6984+ {
6985+ Trace.TraceError( "WAV番号に 00~zz 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6986+ return false;
6987+ }
6988+ }
6989+ else
6990+ {
6991+ if( zz < 0 || zz >= 36 * 36 )
6992+ {
6993+ Trace.TraceError( "WAV番号に 00~ZZ 以外の値または不正な文字列が指定されました。[{0}: {1}行]", this.strファイル名の絶対パス, this.n現在の行数 );
6994+ return false;
6995+ }
6996+ }
6997+
68436998 //-----------------
68446999 #endregion
68457000
@@ -7127,7 +7282,14 @@
71277282 else
71287283 {
71297284 // その他のチャンネルは36進数2桁。
7130- nオブジェクト数値 = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );
7285+ if( this.bExpandKeySoundMode )
7286+ {
7287+ nオブジェクト数値 = C変換.n62進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );
7288+ }
7289+ else
7290+ {
7291+ nオブジェクト数値 = C変換.n36進数2桁の文字列を数値に変換して返す( strパラメータ.Substring( i * 2, 2 ) );
7292+ }
71317293 }
71327294
71337295 if( nオブジェクト数値 == 0x00 )
--- trunk/DTXManiaプロジェクト/コード/ステージ/02.タイトル/CStageタイトル.cs (revision 569)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/02.タイトル/CStageタイトル.cs (revision 570)
@@ -184,7 +184,7 @@
184184 if( this.tx背景 != null )
185185 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );
186186
187- CDTXMania.act文字コンソール.tPrint( 2, 2, C文字コンソール.Eフォント種別.白, "DTX:J:A:A:2016082000" );
187+ CDTXMania.act文字コンソール.tPrint( 2, 2, C文字コンソール.Eフォント種別.白, "DTX:J:A:A:2017043000" );
188188
189189 if( this.txメニュー != null )
190190 {
--- trunk/DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CActConfigList.cs (revision 569)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/04.コンフィグ/CActConfigList.cs (revision 570)
@@ -305,94 +305,141 @@
305305 "Turn ON to put debug log to\n DTXManiaLog.txt\nTo take it effective, you need to\n re-open DTXMania." );
306306 this.list項目リスト.Add( this.iLogOutputLog );
307307
308- // #24820 2013.1.3 yyagi
309- this.iSystemSoundType = new CItemList("SoundType", CItemList.Eパネル種別.通常, CDTXMania.ConfigIni.nSoundDeviceType,
310- "サウンドの出力方式:\n" +
311- "WASAPI, ASIO, DSound(DirectSound)の中か\n" +
312- "らサウンド出力方式を選択します。\n" +
313- "WASAPIはVista以降でのみ使用可能です。\n" +
314- "ASIOは対応機器でのみ使用可能です。\n" +
315- "WASAPIかASIOを指定することで、遅延の\n" +
316- "少ない演奏を楽しむことができます。\n" +
317- "※ 設定はCONFIGURATION画面の\n" +
318- " 終了時に有効になります。",
319- "Sound output type:\n" +
320- "You can choose WASAPI, ASIO or DShow\n" +
321- "(DirectShow).\n" +
322- "WASAPI can use only after Vista.\n" +
323- "ASIO can use on the\n" +
324- "\"ASIO-supported\" sound device.\n" +
325- "You should use WASAPI or ASIO\n" +
326- "to decrease the sound lag.\n" +
327- "Note: Exit CONFIGURATION to make\n" +
328- " the setting take effect.",
329- new string[] { "DSound", "ASIO", "WASAPI" });
330- this.list項目リスト.Add(this.iSystemSoundType);
308+ // #24820 2013.1.3 yyagi
309+ this.iSystemSoundType = new CItemList("SoundType", CItemList.Eパネル種別.通常, CDTXMania.ConfigIni.nSoundDeviceType,
310+ "サウンドの出力方式:\n" +
311+ "WASAPI, ASIO, DSound(DirectSound)\n" +
312+ "の中からサウンド出力方式を選択\n" +
313+ "します。\n" +
314+ "WASAPIはVista以降でのみ使用可能\n" +
315+ "です。ASIOは対応機器でのみ使用\n" +
316+ "可能です。\n" +
317+ "WASAPIかASIOを指定することで、\n" +
318+ "遅延の少ない演奏を楽しむことが\n" +
319+ "できます。\n" +
320+ "\n" +
321+ "※ 設定はCONFIGURATION画面の\n" +
322+ " 終了時に有効になります。",
323+ "Sound output type:\n" +
324+ "You can choose WASAPI, ASIO or\n" +
325+ "DShow(DirectShow).\n" +
326+ "WASAPI can use only after Vista.\n" +
327+ "ASIO can use on the\n" +
328+ "\"ASIO-supported\" sound device.\n" +
329+ "You should use WASAPI or ASIO\n" +
330+ "to decrease the sound lag.\n" +
331+ "\n" +
332+ "Note: Exit CONFIGURATION to make\n" +
333+ " the setting take effect.",
334+ new string[] { "DSound", "ASIO", "WASAPI" });
335+ this.list項目リスト.Add(this.iSystemSoundType);
331336
332- // #24820 2013.1.15 yyagi
333- this.iSystemWASAPIBufferSizeMs = new CItemInteger("WASAPIBufSize", 0, 99999, CDTXMania.ConfigIni.nWASAPIBufferSizeMs,
334- "WASAPI使用時のバッファサイズ:\n" +
335- "0~99999ms を指定可能です。\n" +
336- "0を指定すると、OSがバッファの\n" +
337- "サイズを自動設定します。\n" +
338- "値を小さくするほど発音ラグが\n" +
339- "減少しますが、音割れや異常動作を\n" +
340- "引き起こす場合があります。\n" +
341- "※ 設定はCONFIGURATION画面の\n" +
342- " 終了時に有効になります。",
343- "Sound buffer size for WASAPI:\n" +
344- "You can set from 0 to 99999ms.\n" +
345- "Set 0 to use a default sysytem\n" +
346- "buffer size.\n" +
347- "Smaller value makes smaller lag,\n" +
348- "but it may cause sound troubles.\n" +
349- "\n" +
350- "Note: Exit CONFIGURATION to make\n" +
351- " the setting take effect.");
352- this.list項目リスト.Add(this.iSystemWASAPIBufferSizeMs);
337+ // #24820 2013.1.15 yyagi
338+ this.iSystemWASAPIBufferSizeMs = new CItemInteger( "WASAPIBufSize", 0, 99999, CDTXMania.ConfigIni.nWASAPIBufferSizeMs,
339+ "WASAPI使用時のバッファサイズ:\n" +
340+ "0~99999ms を指定可能です。\n" +
341+ "0を指定すると、設定可能な最小\n" +
342+ "サイズを自動設定します。\n" +
343+ "値を小さくするほど発音ラグが\n" +
344+ "減少しますが、音割れや異常動作を\n" +
345+ "引き起こす場合があります。\n" +
346+ "※ 設定はCONFIGURATION画面の\n" +
347+ " 終了時に有効になります。",
348+ "Sound buffer size for WASAPI:\n" +
349+ "You can set from 0 to 99999ms.\n" +
350+ "Set 0 to use a minimum buffer\n" +
351+ "size.\n" +
352+ "Smaller value makes smaller lag,\n" +
353+ "but it may cause sound troubles.\n" +
354+ "\n" +
355+ "Note: Exit CONFIGURATION to make\n" +
356+ " the setting take effect." );
357+ this.list項目リスト.Add( this.iSystemWASAPIBufferSizeMs );
353358
354- // #24820 2013.1.17 yyagi
355- string[] asiodevs = CEnumerateAllAsioDevices.GetAllASIODevices();
356- this.iSystemASIODevice = new CItemList("ASIO device", CItemList.Eパネル種別.通常, CDTXMania.ConfigIni.nASIODevice,
357- "ASIOデバイス:\n" +
358- "ASIO使用時のサウンドデバイスを\n" +
359- "選択します。\n" +
360- "\n" +
361- "※ 設定はCONFIGURATION画面の\n" +
362- " 終了時に有効になります。",
363- "ASIO Sound Device:\n" +
364- "Select the sound device to use\n" +
365- "under ASIO mode.\n" +
366- "\n" +
367- "Note: Exit CONFIGURATION to make\n" +
368- " the setting take effect.",
369- asiodevs);
370- this.list項目リスト.Add(this.iSystemASIODevice);
371- // #24820 2013.1.3 yyagi
359+ // #24820 2013.1.17 yyagi
360+ string[] asiodevs = CEnumerateAllAsioDevices.GetAllASIODevices();
361+ this.iSystemASIODevice = new CItemList( "ASIO device", CItemList.Eパネル種別.通常, CDTXMania.ConfigIni.nASIODevice,
362+ "ASIOデバイス:\n" +
363+ "ASIO使用時のサウンドデバイスを\n" +
364+ "選択します。\n" +
365+ "\n" +
366+ "※ 設定はCONFIGURATION画面の\n" +
367+ " 終了時に有効になります。",
368+ "ASIO Sound Device:\n" +
369+ "Select the sound device to use\n" +
370+ "under ASIO mode.\n" +
371+ "\n" +
372+ "Note: Exit CONFIGURATION to make\n" +
373+ " the setting take effect.",
374+ asiodevs );
375+ this.list項目リスト.Add( this.iSystemASIODevice );
372376
373- /*
374- this.iSystemASIOBufferSizeMs = new CItemInteger("ASIOBuffSize", 0, 99999, CDTXMania.ConfigIni.nASIOBufferSizeMs,
375- "ASIO使用時のバッファサイズ:\n" +
376- "0~99999ms を指定可能です。\n" +
377- "0を指定すると、サウンドデバイスに\n" +
378- "指定されている設定値を使用します。\n" +
379- "値を小さくするほど発音ラグが\n" +
380- "減少しますが、音割れや異常動作を\n" +
381- "引き起こす場合があります。\n"+
382- "※ 設定はCONFIGURATION画面の\n" +
383- " 終了時に有効になります。",
384- "Sound buffer size for ASIO:\n" +
385- "You can set from 0 to 99999ms.\n" +
386- "Set 0 to use a default value already\n" +
387- "specified to the sound device.\n" +
388- "Smaller value makes smaller lag,\n" +
389- "but it may cause sound troubles.\n" +
390- "\n" +
391- "Note: Exit CONFIGURATION to make\n" +
392- " the setting take effect.");
393- this.list項目リスト.Add(this.iSystemASIOBufferSizeMs);
394- */
377+ // #24820 2013.1.3 yyagi
378+ //this.iSystemASIOBufferSizeMs = new CItemInteger("ASIOBuffSize", 0, 99999, CDTXMania.ConfigIni.nASIOBufferSizeMs,
379+ // "ASIO使用時のバッファサイズ:\n" +
380+ // "0~99999ms を指定可能です。\n" +
381+ // "推奨値は0で、サウンドデバイスでの\n" +
382+ // "設定値をそのまま使用します。\n" +
383+ // "(サウンドデバイスのASIO設定は、\n" +
384+ // " ASIO capsなどで行います)\n" +
385+ // "値を小さくするほど発音ラグが\n" +
386+ // "減少しますが、音割れや異常動作を\n" +
387+ // "引き起こす場合があります。\n" +
388+ // "\n" +
389+ // "※ 設定はCONFIGURATION画面の\n" +
390+ // " 終了時に有効になります。",
391+ // "Sound buffer size for ASIO:\n" +
392+ // "You can set from 0 to 99999ms.\n" +
393+ // "You should set it to 0, to use\n" +
394+ // "a default value specified to\n" +
395+ // "the sound device.\n" +
396+ // "Smaller value makes smaller lag,\n" +
397+ // "but it may cause sound troubles.\n" +
398+ // "\n" +
399+ // "Note: Exit CONFIGURATION to make\n" +
400+ // " the setting take effect." );
401+ //this.list項目リスト.Add( this.iSystemASIOBufferSizeMs );
395402
403+ // #33689 2014.6.17 yyagi
404+ this.iSystemSoundTimerType = new CItemToggle( "UseOSTimer", CDTXMania.ConfigIni.bUseOSTimer,
405+ "OSタイマーを使用するかどうか:\n" +
406+ "演奏タイマーとして、DTXMania独自の\n" +
407+ "タイマーを使うか、OS標準のタイマー\n" +
408+ "を使うかを選択します。\n" +
409+ "OS標準タイマーを使うとスクロールが\n" +
410+ "滑らかになりますが、演奏で音ズレが\n" +
411+ "発生することがあります。(そのため\n" +
412+ "AdjustWavesの効果が適用されます。)\n" +
413+ "\n" +
414+ "この指定はWASAPI/ASIO使用時のみ有効\n" +
415+ "です。\n",
416+ "Use OS Timer or not:\n" +
417+ "If this settings is ON, DTXMania uses\n" +
418+ "OS Standard timer. It brings smooth\n" +
419+ "scroll, but may cause some sound lag.\n" +
420+ "(so AdjustWaves is also avilable)\n" +
421+ "\n" +
422+ "If OFF, DTXMania uses its original\n" +
423+ "timer and the effect is vice versa.\n" +
424+ "\n" +
425+ "This settings is avilable only when\n" +
426+ "you uses WASAPI/ASIO.\n"
427+ );
428+ this.list項目リスト.Add( this.iSystemSoundTimerType );
429+
430+ // #33700 2013.1.3 yyagi
431+ this.iSystemMasterVolume = new CItemInteger( "MasterVolume", 0, 100, CDTXMania.ConfigIni.nMasterVolume,
432+ "マスターボリュームの設定:\n" +
433+ "全体の音量を設定します。\n" +
434+ "0が無音で、100が最大値です。\n" +
435+ "(WASAPI/ASIO時のみ有効です)",
436+ "Master Volume:\n" +
437+ "You can set 0 - 100.\n" +
438+ "\n" +
439+ "Note:\n" +
440+ "Only for WASAPI/ASIO mode." );
441+ this.list項目リスト.Add( this.iSystemMasterVolume );
442+
396443 #region [ GDオプション ]
397444 /*
398445 this.iSystemDifficlty = new CItemToggle("Difficlty", CDTXMania.ConfigIni.b難易度表示をXG表示にする,
@@ -475,8 +522,8 @@
475522 this.list項目リスト.Add( this.iSystemUseBoxDefSkin );
476523
477524 this.iInfoType = new CItemList("InfoType", CItemBase.Eパネル種別.通常, CDTXMania.ConfigIni.nInfoType,
478- "Helpボタンを押したときにでる\n" +
479- "各種情報表示を変更できます。\n" +
525+ "Helpボタンを押したときに表示される\n" +
526+ "情報の内容を変更できます。\n" +
480527 "Type-A FPS、BGMアジャストなどの\n" +
481528 "情報が出ます。\n" +
482529 "Type-B 判定数などが出ます。\n",
@@ -2113,10 +2160,11 @@
21132160 this.nスクロール用タイマ値 = -1;
21142161 this.ct三角矢印アニメ = new CCounter();
21152162
2116- this.iSystemSoundType_initial = this.iSystemSoundType.n現在選択されている項目番号; // CONFIGに入ったときの値を保持しておく
2117- this.iSystemWASAPIBufferSizeMs_initial = this.iSystemWASAPIBufferSizeMs.n現在の値; // CONFIG脱出時にこの値から変更されているようなら
2118- //this.iSystemASIOBufferSizeMs_initial = this.iSystemASIOBufferSizeMs.n現在の値; // サウンドデバイスを再構築する
2119- this.iSystemASIODevice_initial = this.iSystemASIODevice.n現在選択されている項目番号; //
2163+ this.iSystemSoundType_initial = this.iSystemSoundType.n現在選択されている項目番号; // CONFIGに入ったときの値を保持しておく
2164+ this.iSystemWASAPIBufferSizeMs_initial = this.iSystemWASAPIBufferSizeMs.n現在の値; // CONFIG脱出時にこの値から変更されているようなら
2165+ // this.iSystemASIOBufferSizeMs_initial = this.iSystemASIOBufferSizeMs.n現在の値; // サウンドデバイスを再構築する
2166+ this.iSystemASIODevice_initial = this.iSystemASIODevice.n現在選択されている項目番号; //
2167+ this.iSystemSoundTimerType_initial = this.iSystemSoundTimerType.GetIndex(); //
21202168 base.On活性化();
21212169 }
21222170 public override void On非活性化()
@@ -2137,41 +2185,45 @@
21372185 }
21382186 #endregion
21392187
2140- // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
2141- #region [ サウンドデバイス変更 ]
2142- if (this.iSystemSoundType_initial != this.iSystemSoundType.n現在選択されている項目番号 ||
2143- this.iSystemWASAPIBufferSizeMs_initial != this.iSystemWASAPIBufferSizeMs.n現在の値 ||
2144- //this.iSystemASIOBufferSizeMs_initial != this.iSystemASIOBufferSizeMs.n現在の値 ||
2145- this.iSystemASIODevice_initial != this.iSystemASIODevice.n現在選択されている項目番号)
2146- {
2147- ESoundDeviceType soundDeviceType;
2148- switch (this.iSystemSoundType.n現在選択されている項目番号)
2149- {
2150- case 0:
2151- soundDeviceType = ESoundDeviceType.DirectSound;
2152- break;
2153- case 1:
2154- soundDeviceType = ESoundDeviceType.ASIO;
2155- break;
2156- case 2:
2157- soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
2158- break;
2159- default:
2160- soundDeviceType = ESoundDeviceType.Unknown;
2161- break;
2162- }
2188+ // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
2189+ // #33689 2014.6.17 yyagi CONFIGでSoundTimerTypeの設定を変更した場合も、サウンドデバイスを再構築する。
2190+ #region [ サウンドデバイス変更 ]
2191+ if ( this.iSystemSoundType_initial != this.iSystemSoundType.n現在選択されている項目番号 ||
2192+ this.iSystemWASAPIBufferSizeMs_initial != this.iSystemWASAPIBufferSizeMs.n現在の値 ||
2193+ // this.iSystemASIOBufferSizeMs_initial != this.iSystemASIOBufferSizeMs.n現在の値 ||
2194+ this.iSystemASIODevice_initial != this.iSystemASIODevice.n現在選択されている項目番号 ||
2195+ this.iSystemSoundTimerType_initial != this.iSystemSoundTimerType.GetIndex() )
2196+ {
2197+ ESoundDeviceType soundDeviceType;
2198+ switch ( this.iSystemSoundType.n現在選択されている項目番号 )
2199+ {
2200+ case 0:
2201+ soundDeviceType = ESoundDeviceType.DirectSound;
2202+ break;
2203+ case 1:
2204+ soundDeviceType = ESoundDeviceType.ASIO;
2205+ break;
2206+ case 2:
2207+ soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
2208+ break;
2209+ default:
2210+ soundDeviceType = ESoundDeviceType.Unknown;
2211+ break;
2212+ }
21632213
2164- CDTXMania.Sound管理.t初期化(soundDeviceType,
2165- this.iSystemWASAPIBufferSizeMs.n現在の値,
2166- 0,
2167- this.iSystemASIODevice.n現在選択されている項目番号);
2168- CDTXMania.app.ShowWindowTitleWithSoundType(); //XGオプション
2169- //CDTXMania.app.AddSoundTypeToWindowTitle(); //GDオプション
2170- }
2171- #endregion
2172- #region [ サウンドのタイムストレッチモード変更 ]
2173- FDK.CSound管理.bIsTimeStretch = this.iSystemTimeStretch.bON;
2174- #endregion
2214+ CDTXMania.Sound管理.t初期化( soundDeviceType,
2215+ // 0,
2216+ this.iSystemWASAPIBufferSizeMs.n現在の値,
2217+ 0,
2218+ // this.iSystemASIOBufferSizeMs.n現在の値,
2219+ this.iSystemASIODevice.n現在選択されている項目番号,
2220+ this.iSystemSoundTimerType.bON );
2221+ CDTXMania.app.ShowWindowTitleWithSoundType();
2222+ }
2223+ #endregion
2224+ #region [ サウンドのタイムストレッチモード変更 ]
2225+ FDK.CSound管理.bIsTimeStretch = this.iSystemTimeStretch.bON;
2226+ #endregion
21752227 }
21762228 public override void OnManagedリソースの作成()
21772229 {
@@ -2616,10 +2668,19 @@
26162668 private CItemToggle iSystemAutoResultCapture; // #25399 2011.6.9 yyagi
26172669 private CItemToggle iSystemBufferedInput;
26182670 private CItemInteger iSystemRisky; // #23559 2011.7.27 yyagi
2619- private CItemList iSystemSoundType; // #24820 2013.1.3 yyagi
2671+ private CItemList iSystemSoundType; // #24820 2013.1.3 yyagi
26202672 private CItemInteger iSystemWASAPIBufferSizeMs; // #24820 2013.1.15 yyagi
2621- //private CItemInteger iSystemASIOBufferSizeMs; // #24820 2013.1.3 yyagi
2622- private CItemList iSystemASIODevice; // #24820 2013.1.17 yyagi
2673+ // private CItemInteger iSystemASIOBufferSizeMs; // #24820 2013.1.3 yyagi
2674+ private CItemList iSystemASIODevice; // #24820 2013.1.17 yyagi
2675+
2676+ private int iSystemSoundType_initial;
2677+ private int iSystemWASAPIBufferSizeMs_initial;
2678+ // private int iSystemASIOBufferSizeMs_initial;
2679+ private int iSystemASIODevice_initial;
2680+ private CItemToggle iSystemSoundTimerType; // #33689 2014.6.17 yyagi
2681+ private int iSystemSoundTimerType_initial; // #33689 2014.6.17 yyagi
2682+ private CItemToggle iSystemTimeStretch; // #23664 2013.2.24 yyagi
2683+
26232684 private CItemList iInfoType;
26242685 private CItemToggle iAutoAddGage;
26252686 private CItemList iSystemSkillMode;
@@ -2644,13 +2705,6 @@
26442705 private CItemList iSystemNamePlateType;
26452706 #endregion
26462707
2647- private int iSystemSoundType_initial;
2648- private int iSystemWASAPIBufferSizeMs_initial;
2649- //private int iSystemASIOBufferSizeMs_initial;
2650- private int iSystemASIODevice_initial;
2651-
2652- private CItemToggle iSystemTimeStretch; // #23664 2013.2.24 yyagi
2653-
26542708 private List<CItemBase> list項目リスト;
26552709 private long nスクロール用タイマ値;
26562710 private int n現在のスクロールカウンタ;
@@ -2783,6 +2837,7 @@
27832837 private CItemList iSystemSkinSubfolder; // #28195 2012.5.2 yyagi
27842838 private CItemToggle iSystemUseBoxDefSkin; // #28195 2012.5.6 yyagi
27852839 private CItemBase iSystemReloadDTX; // #32081 2013.10.21 yyagi
2840+ private CItemInteger iSystemMasterVolume; // #33700 2014.4.26 yyagi
27862841
27872842 private int t前の項目( int nItem )
27882843 {
--- trunk/DTXManiaプロジェクト/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs (revision 569)
+++ trunk/DTXManiaプロジェクト/コード/ステージ/06.曲読み込み/CStage曲読み込み.cs (revision 570)
@@ -780,19 +780,26 @@
780780 }
781781 foreach (CDTX.CChip chip in CDTXMania.DTX.listChip)
782782 {
783- if (chip.e楽器パート != E楽器パート.UNKNOWN)
783+ try
784784 {
785- chip.n楽器パートでの出現順 = curCount[(int)chip.e楽器パート]++;
786- if( CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ] != null )
785+ if (chip.e楽器パート != E楽器パート.UNKNOWN)
787786 {
788- var lag = new STGhostLag();
789- lag.index = chip.n楽器パートでの出現順;
790- lag.nJudgeTime = chip.n発声時刻ms + CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ][ chip.n楽器パートでの出現順 ];
791- lag.nLagTime = CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ][ chip.n楽器パートでの出現順 ];
787+ chip.n楽器パートでの出現順 = curCount[(int)chip.e楽器パート]++;
788+ if( CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ] != null )
789+ {
790+ var lag = new STGhostLag();
791+ lag.index = chip.n楽器パートでの出現順;
792+ lag.nJudgeTime = chip.n発声時刻ms + CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ][ chip.n楽器パートでの出現順 ];
793+ lag.nLagTime = CDTXMania.listTargetGhsotLag[ (int)chip.e楽器パート ][ chip.n楽器パートでの出現順 ];
792794
793- this.stGhostLag[ (int)chip.e楽器パート ].Add( lag );
795+ this.stGhostLag[ (int)chip.e楽器パート ].Add( lag );
796+ }
794797 }
795798 }
799+ catch( Exception ex )
800+ {
801+ //エラーが発生した場合は無視する。
802+ }
796803 }
797804
798805 string [] inst = {"dr", "gt", "bs"};
--- trunk/DTXManiaプロジェクト/コード/全体/CConfigIni.cs (revision 569)
+++ trunk/DTXManiaプロジェクト/コード/全体/CConfigIni.cs (revision 570)
@@ -504,11 +504,6 @@
504504 public int nウインドウheight; // #23510 2010.10.31 yyagi add
505505 public bool ボーナス演出を表示する;
506506 public bool bHAZARD;
507- public int nSoundDeviceType; // #24820 2012.12.23 yyagi 出力サウンドデバイス(0=ACM(にしたいが設計がきつそうならDirectShow), 1=ASIO, 2=WASAPI)
508- public int nWASAPIBufferSizeMs; // #24820 2013.1.15 yyagi WASAPIのバッファサイズ
509- //public int nASIOBufferSizeMs; // #24820 2012.12.28 yyagi ASIOのバッファサイズ
510- public int nASIODevice; // #24820 2013.1.17 yyagi ASIOデバイス
511- public bool bDynamicBassMixerManagement; // #24820
512507 public STDGBVALUE<Eタイプ> eAttackEffect;
513508 public STDGBVALUE<Eタイプ> eNumOfLanes;
514509 public STDGBVALUE<Eタイプ> eDkdkType;
@@ -782,17 +777,25 @@
782777 get;
783778 set;
784779 }
785- public bool bTimeStretch; // #23664 2013.2.24 yyagi ピッチ変更無しで再生速度を変更するかどうか
780+ public STAUTOPLAY bAutoPlay;
781+ public int nSoundDeviceType; // #24820 2012.12.23 yyagi 出力サウンドデバイス(0=ACM(にしたいが設計がきつそうならDirectShow), 1=ASIO, 2=WASAPI)
782+ public int nWASAPIBufferSizeMs; // #24820 2013.1.15 yyagi WASAPIのバッファサイズ
783+// public int nASIOBufferSizeMs; // #24820 2012.12.28 yyagi ASIOのバッファサイズ
784+ public int nASIODevice; // #24820 2013.1.17 yyagi ASIOデバイス
785+ public bool bUseOSTimer; // #33689 2014.6.6 yyagi 演奏タイマーの種類
786+ public bool bDynamicBassMixerManagement; // #24820
787+ public bool bTimeStretch; // #23664 2013.2.24 yyagi ピッチ変更無しで再生速度を変更するかどうか
788+ //public STDGBVALUE<EInvisible> eInvisible; // #32072 2013.9.20 yyagi チップを非表示にする
789+ public int nDisplayTimesMs, nFadeoutTimeMs;
786790
787- public STDGBVALUE<int> nViewerScrollSpeed;
788- public bool bViewerVSyncWait;
789- public bool bViewerShowDebugStatus;
790- public bool bViewerTimeStretch;
791- public bool bViewerDrums有効, bViewerGuitar有効;
792- //public bool bNoMP3Streaming;
793- public int nMasterVolume;
791+ public STDGBVALUE<int> nViewerScrollSpeed;
792+ public bool bViewerVSyncWait;
793+ public bool bViewerShowDebugStatus;
794+ public bool bViewerTimeStretch;
795+ public bool bViewerDrums有効, bViewerGuitar有効;
796+ //public bool bNoMP3Streaming; // 2014.4.14 yyagi; mp3のシーク位置がおかしくなる場合は、これをtrueにすることで、wavにデコードしてからオンメモリ再生する
797+ public int nMasterVolume;
794798
795- public STAUTOPLAY bAutoPlay;
796799 public STRANGE nヒット範囲ms;
797800 [StructLayout( LayoutKind.Sequential )]
798801 public struct STRANGE
@@ -1254,21 +1257,25 @@
12541257 this.strSystemSkinSubfolderFullName = ""; // #28195 2012.5.2 yyagi 使用中のSkinサブフォルダ名
12551258 this.bUseBoxDefSkin = true; // #28195 2012.5.6 yyagi box.defによるスキン切替機能を使用するか否か
12561259 this.bTight = false; // #29500 2012.9.11 kairera0467
1257- this.nSoundDeviceType = (int)ESoundDeviceTypeForConfig.ACM; // #24820 2012.12.23 yyagi 初期値はACM
1258- this.nWASAPIBufferSizeMs = 0; // #24820 2013.1.15 yyagi 初期値は0(自動設定)
1259- this.nASIODevice = 0; // #24820 2013.1.17 yyagi
1260-// this.nASIOBufferSizeMs = 0; // #24820 2012.12.25 yyagi 初期値は0(自動設定)
1261- this.bDynamicBassMixerManagement = true; //
1262- this.bTimeStretch = false; // #23664 2013.2.24 yyagi 初期値はfalse (再生速度変更を、ピッチ変更にて行う)
1260+ this.nSoundDeviceType = FDK.COS.bIsVistaOrLater ?
1261+ (int) ESoundDeviceTypeForConfig.WASAPI : (int) ESoundDeviceTypeForConfig.ACM; // #24820 2012.12.23 yyagi 初期値はACM | #31927 2013.8.25 yyagi OSにより初期値変更
1262+ this.nWASAPIBufferSizeMs = 50; // #24820 2013.1.15 yyagi 初期値は50(0にすると自動設定)
1263+ this.nASIODevice = 0; // #24820 2013.1.17 yyagi
1264+// this.nASIOBufferSizeMs = 0; // #24820 2012.12.25 yyagi 初期値は0(自動設定)
1265+ this.bUseOSTimer = false;; // #33689 2014.6.6 yyagi 初期値はfalse (FDKのタイマー。FROM氏考案の独自タイマー)
1266+ this.bDynamicBassMixerManagement = true; //
1267+ this.bTimeStretch = false; // #23664 2013.2.24 yyagi 初期値はfalse (再生速度変更を、ピッチ変更にて行う)
1268+ this.nDisplayTimesMs = 3000; // #32072 2013.10.24 yyagi Semi-Invisibleでの、チップ再表示期間
1269+ this.nFadeoutTimeMs = 2000; // #32072 2013.10.24 yyagi Semi-Invisibleでの、チップフェードアウト時間
12631270
1264- bViewerVSyncWait = true;
1265- bViewerShowDebugStatus = true;
1266- bViewerTimeStretch = false;
1267- bViewerDrums有効 = true;
1268- bViewerGuitar有効 = true;
1271+ bViewerVSyncWait = true;
1272+ bViewerShowDebugStatus = true;
1273+ bViewerTimeStretch = false;
1274+ bViewerDrums有効 = true;
1275+ bViewerGuitar有効 = true;
12691276
1270- //this.bNoMP3Streaming = false;
1271- this.nMasterVolume = 100; // #33700 2014.4.26 yyagi マスターボリュームの設定(WASAPI/ASIO用)
1277+ //this.bNoMP3Streaming = false;
1278+ this.nMasterVolume = 100; // #33700 2014.4.26 yyagi マスターボリュームの設定(WASAPI/ASIO用)
12721279 }
12731280 public CConfigIni( string iniファイル名 )
12741281 : this()
@@ -1441,34 +1448,34 @@
14411448 sw.WriteLine("SleepTimePerFrame={0}", this.nフレーム毎スリープms); //
14421449 sw.WriteLine(); //
14431450 #endregion
1444- #region [ WASAPI/ASIO関連 ]
1445- sw.WriteLine("; サウンド出力方式(0=ACM(って今はまだDirectShowですが), 1=ASIO, 2=WASAPI");
1446- sw.WriteLine("; WASAPIはVista以降のOSで使用可能。推奨方式はWASAPI。");
1447- sw.WriteLine("; なお、WASAPIが使用不可ならASIOを、ASIOが使用不可ならACMを使用します。");
1448- sw.WriteLine("; Sound device type(0=ACM, 1=ASIO, 2=WASAPI)");
1449- sw.WriteLine("; WASAPI can use on Vista or later OSs.");
1450- sw.WriteLine("; If WASAPI is not available, DTXMania try to use ASIO. If ASIO can't be used, ACM is used.");
1451- sw.WriteLine("SoundDeviceType={0}", (int)this.nSoundDeviceType);
1452- sw.WriteLine();
1451+ #region [ WASAPI/ASIO関連 ]
1452+ sw.WriteLine( "; サウンド出力方式(0=ACM(って今はまだDirectSoundですが), 1=ASIO, 2=WASAPI)" );
1453+ sw.WriteLine( "; WASAPIはVista以降のOSで使用可能。推奨方式はWASAPI。" );
1454+ sw.WriteLine( "; なお、WASAPIが使用不可ならASIOを、ASIOが使用不可ならACMを使用します。" );
1455+ sw.WriteLine( "; Sound device type(0=ACM, 1=ASIO, 2=WASAPI)" );
1456+ sw.WriteLine( "; WASAPI can use on Vista or later OSs." );
1457+ sw.WriteLine( "; If WASAPI is not available, DTXMania try to use ASIO. If ASIO can't be used, ACM is used." );
1458+ sw.WriteLine( "SoundDeviceType={0}", (int) this.nSoundDeviceType );
1459+ sw.WriteLine();
14531460
1454- sw.WriteLine("; WASAPI使用時のサウンドバッファサイズ");
1455- sw.WriteLine("; (0=デバイスに設定されている値を使用, 1~9999=バッファサイズ(単位:ms)の手動指定");
1456- sw.WriteLine("; WASAPI Sound Buffer Size.");
1457- sw.WriteLine("; (0=Use system default buffer size, 1-9999=specify the buffer size(ms) by yourself)");
1458- sw.WriteLine("WASAPIBufferSizeMs={0}", (int)this.nWASAPIBufferSizeMs);
1459- sw.WriteLine();
1461+ sw.WriteLine( "; WASAPI使用時のサウンドバッファサイズ" );
1462+ sw.WriteLine( "; (0=デバイスに設定されている値を使用, 1~9999=バッファサイズ(単位:ms)の手動指定" );
1463+ sw.WriteLine( "; WASAPI Sound Buffer Size." );
1464+ sw.WriteLine( "; (0=Use system default buffer size, 1-9999=specify the buffer size(ms) by yourself)" );
1465+ sw.WriteLine( "WASAPIBufferSizeMs={0}", (int) this.nWASAPIBufferSizeMs );
1466+ sw.WriteLine();
14601467
1461- sw.WriteLine("; ASIO使用時のサウンドデバイス");
1462- sw.WriteLine("; 存在しないデバイスを指定すると、DTXManiaが起動しないことがあります。");
1463- sw.WriteLine("; Sound device used by ASIO.");
1464- sw.WriteLine("; Don't specify unconnected device, as the DTXMania may not bootup.");
1465- string[] asiodev = CEnumerateAllAsioDevices.GetAllASIODevices();
1466- for (int i = 0; i < asiodev.Length; i++)
1467- {
1468- sw.WriteLine("; {0}: {1}", i, asiodev[i]);
1469- }
1470- sw.WriteLine("ASIODevice={0}", (int)this.nASIODevice);
1471- sw.WriteLine();
1468+ sw.WriteLine( "; ASIO使用時のサウンドデバイス" );
1469+ sw.WriteLine( "; 存在しないデバイスを指定すると、DTXManiaが起動しないことがあります。" );
1470+ sw.WriteLine( "; Sound device used by ASIO." );
1471+ sw.WriteLine( "; Don't specify unconnected device, as the DTXMania may not bootup." );
1472+ string[] asiodev = CEnumerateAllAsioDevices.GetAllASIODevices();
1473+ for ( int i = 0; i < asiodev.Length; i++ )
1474+ {
1475+ sw.WriteLine( "; {0}: {1}", i, asiodev[ i ] );
1476+ }
1477+ sw.WriteLine( "ASIODevice={0}", (int) this.nASIODevice );
1478+ sw.WriteLine();
14721479
14731480 //sw.WriteLine( "; ASIO使用時のサウンドバッファサイズ" );
14741481 //sw.WriteLine( "; (0=デバイスに設定されている値を使用, 1~9999=バッファサイズ(単位:ms)の手動指定" );
@@ -1477,19 +1484,26 @@
14771484 //sw.WriteLine( "ASIOBufferSizeMs={0}", (int) this.nASIOBufferSizeMs );
14781485 //sw.WriteLine();
14791486
1480- //sw.WriteLine("; Bass.Mixの制御を動的に行うか否か。");
1481- //sw.WriteLine("; ONにすると、ギター曲などチップ音の多い曲も再生できますが、画面が少しがたつきます。");
1482- //sw.WriteLine("; (0=行わない, 1=行う)");
1483- //sw.WriteLine("DynamicBassMixerManagement={0}", this.bDynamicBassMixerManagement ? 1 : 0);
1484- //sw.WriteLine();
1487+ //sw.WriteLine( "; Bass.Mixの制御を動的に行うか否か。" );
1488+ //sw.WriteLine( "; ONにすると、ギター曲などチップ音の多い曲も再生できますが、画面が少しがたつきます。" );
1489+ //sw.WriteLine( "; (0=行わない, 1=行う)" );
1490+ //sw.WriteLine( "DynamicBassMixerManagement={0}", this.bDynamicBassMixerManagement ? 1 : 0 );
1491+ //sw.WriteLine();
14851492
1486- sw.WriteLine( "; 全体ボリュームの設定" );
1487- sw.WriteLine( "; (0=無音 ~ 100=最大。WASAPI/ASIO時のみ有効)" );
1488- sw.WriteLine( "; Master volume settings" );
1489- sw.WriteLine( "; (0=Silent - 100=Max)" );
1490- sw.WriteLine( "MasterVolume={0}", this.nMasterVolume );
1491- sw.WriteLine();
1492- #endregion
1493+ sw.WriteLine( "; WASAPI/ASIO時に使用する演奏タイマーの種類" );
1494+ sw.WriteLine( "; Playback timer used for WASAPI/ASIO" );
1495+ sw.WriteLine( "; (0=FDK Timer, 1=System Timer)" );
1496+ sw.WriteLine( "SoundTimerType={0}", this.bUseOSTimer ? 1 : 0 );
1497+ sw.WriteLine();
1498+
1499+ sw.WriteLine( "; 全体ボリュームの設定" );
1500+ sw.WriteLine( "; (0=無音 ~ 100=最大。WASAPI/ASIO時のみ有効)" );
1501+ sw.WriteLine( "; Master volume settings" );
1502+ sw.WriteLine( "; (0=Silent - 100=Max)" );
1503+ sw.WriteLine( "MasterVolume={0}", this.nMasterVolume );
1504+ sw.WriteLine();
1505+
1506+ #endregion
14931507 #region [ ギター/ベース/ドラム 有効/無効 ]
14941508 sw.WriteLine( "; ギター/ベース有効(0:OFF,1:ON)" );
14951509 sw.WriteLine( "; Enable Guitar/Bass or not.(0:OFF,1:ON)" );
@@ -2508,39 +2522,45 @@
25082522 {
25092523 this.bIsEnabledSystemMenu = C変換.bONorOFF(str4[0]);
25102524 }
2511- else if (str3.Equals("SoundDeviceType"))
2525+ else if (str3.Equals("BackSleep")) // #23568 2010.11.04 ikanick add
25122526 {
2513- this.nSoundDeviceType = C変換.n値を文字列から取得して範囲内に丸めて返す(str4, 0, 2, this.nSoundDeviceType);
2527+ this.n非フォーカス時スリープms = C変換.n値を文字列から取得して範囲内にちゃんと丸めて返す(str4, 0, 50, this.n非フォーカス時スリープms);
25142528 }
2515- else if (str3.Equals("WASAPIBufferSizeMs"))
2516- {
2517- this.nWASAPIBufferSizeMs = C変換.n値を文字列から取得して範囲内に丸めて返す(str4, 0, 9999, this.nWASAPIBufferSizeMs);
2518- }
2519- else if (str3.Equals("ASIODevice"))
2520- {
2521- string[] asiodev = CEnumerateAllAsioDevices.GetAllASIODevices();
2522- this.nASIODevice = C変換.n値を文字列から取得して範囲内に丸めて返す(str4, 0, asiodev.Length - 1, this.nASIODevice);
2523- }
2524- //else if (str3.Equals("ASIOBufferSizeMs"))
2525- //{
2526- // this.nASIOBufferSizeMs = C変換.n値を文字列から取得して範囲内に丸めて返す(str4, 0, 9999, this.nASIOBufferSizeMs);
2527- //}
2528- else if (str3.Equals("DynamicBassMixerManagement"))
2529- {
2530- this.bDynamicBassMixerManagement = C変換.bONorOFF(str4[0]);
2531- }
2529+ #region [ WASAPI/ASIO関係 ]
2530+ else if ( str3.Equals( "SoundDeviceType" ) )
2531+ {
2532+ this.nSoundDeviceType = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 2, this.nSoundDeviceType );
2533+ }
2534+ else if ( str3.Equals( "WASAPIBufferSizeMs" ) )
2535+ {
2536+ this.nWASAPIBufferSizeMs = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 9999, this.nWASAPIBufferSizeMs );
2537+ }
2538+ else if ( str3.Equals( "ASIODevice" ) )
2539+ {
2540+ string[] asiodev = CEnumerateAllAsioDevices.GetAllASIODevices();
2541+ this.nASIODevice = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, asiodev.Length - 1, this.nASIODevice );
2542+ }
2543+ //else if ( str3.Equals( "ASIOBufferSizeMs" ) )
2544+ //{
2545+ // this.nASIOBufferSizeMs = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 9999, this.nASIOBufferSizeMs );
2546+ //}
2547+ //else if ( str3.Equals( "DynamicBassMixerManagement" ) )
2548+ //{
2549+ // this.bDynamicBassMixerManagement = C変換.bONorOFF( str4[ 0 ] );
2550+ //}
2551+ else if ( str3.Equals( "SoundTimerType" ) ) // #33689 2014.6.6 yyagi
2552+ {
2553+ this.bUseOSTimer = C変換.bONorOFF( str4[ 0 ] );
2554+ }
2555+ else if ( str3.Equals( "MasterVolume" ) )
2556+ {
2557+ this.nMasterVolume = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 100, this.nMasterVolume );
2558+ }
2559+ #endregion
25322560 else if (str3.Equals("VSyncWait"))
25332561 {
25342562 this.b垂直帰線待ちを行う = C変換.bONorOFF(str4[0]);
25352563 }
2536- else if ( str3.Equals( "MasterVolume" ) )
2537- {
2538- this.nMasterVolume = C変換.n値を文字列から取得して範囲内に丸めて返す( str4, 0, 100, this.nMasterVolume );
2539- }
2540- else if (str3.Equals("BackSleep")) // #23568 2010.11.04 ikanick add
2541- {
2542- this.n非フォーカス時スリープms = C変換.n値を文字列から取得して範囲内にちゃんと丸めて返す(str4, 0, 50, this.n非フォーカス時スリープms);
2543- }
25442564 else if (str3.Equals("SleepTimePerFrame")) // #23568 2011.11.27 yyagi
25452565 {
25462566 this.nフレーム毎スリープms = C変換.n値を文字列から取得して範囲内にちゃんと丸めて返す(str4, -1, 50, this.nフレーム毎スリープms);
--- trunk/DTXManiaプロジェクト/コード/全体/CDTXMania.cs (revision 569)
+++ trunk/DTXManiaプロジェクト/コード/全体/CDTXMania.cs (revision 570)
@@ -23,7 +23,7 @@
2323 {
2424 // プロパティ
2525
26- public static readonly string VERSION = "Ver3.61(160820)";
26+ public static readonly string VERSION = "Ver3.61a(170430)";
2727 public static readonly string SLIMDXDLL = "c_net20x86_Jun2010";
2828 public static readonly string D3DXDLL = "d3dx9_43.dll"; // June 2010
2929 //public static readonly string D3DXDLL = "d3dx9_42.dll"; // February 2010
@@ -2178,7 +2178,8 @@
21782178 CDTXMania.ConfigIni.nWASAPIBufferSizeMs,
21792179 //CDTXMania.ConfigIni.nASIOBufferSizeMs,
21802180 0,
2181- CDTXMania.ConfigIni.nASIODevice
2181+ CDTXMania.ConfigIni.nASIODevice,
2182+ CDTXMania.ConfigIni.bUseOSTimer
21822183 );
21832184 ShowWindowTitleWithSoundType();
21842185 FDK.CSound管理.bIsTimeStretch = CDTXMania.ConfigIni.bTimeStretch;
--- trunk/FDK17プロジェクト/コード/00.共通/C変換.cs (revision 569)
+++ trunk/FDK17プロジェクト/コード/00.共通/C変換.cs (revision 570)
@@ -122,6 +122,33 @@
122122
123123 return digit2 * 36 + digit1;
124124 }
125+ public static int n62進数2桁の文字列を数値に変換して返す( string strNum )
126+ {
127+ if( strNum.Length < 2 )
128+ return -1;
129+
130+ int digit2 = str36進数文字.IndexOf( strNum[ 0 ] );
131+ if( digit2 < 0 )
132+ return -1;
133+
134+ if( digit2 >= 62 )
135+ digit2 -= (62 - 10); // A,B,C... -> 1,2,3...
136+
137+ int digit1 = str36進数文字.IndexOf( strNum[ 1 ] );
138+ if( digit1 < 0 )
139+ return -1;
140+
141+ if( digit1 >= 62 )
142+ digit1 -= (62 - 10);
143+
144+ int ret = digit2 * 62 + digit1;
145+
146+
147+ int ret36 = n36進数2桁の文字列を数値に変換して返す( strNum );
148+
149+
150+ return digit2 * 62 + digit1;
151+ }
125152 public static int n小節番号の文字列3桁を数値に変換して返す( string strNum )
126153 {
127154 if( strNum.Length >= 3 )
@@ -175,7 +202,16 @@
175202 char ch1 = str36進数文字[ num % 36 ];
176203 return ( ch2.ToString() + ch1.ToString() );
177204 }
205+ public static string str数値を62進数2桁に変換して返す( int num )
206+ {
207+ if( ( num < 0 ) || ( num >= 62 * 62 ) )
208+ return "00";
178209
210+ char ch2 = str36進数文字[ num / 62 ];
211+ char ch1 = str36進数文字[ num % 62 ];
212+ return ( ch2.ToString() + ch1.ToString() );
213+ }
214+
179215 #region [ private ]
180216 //-----------------
181217
--- trunk/FDK17プロジェクト/コード/03.サウンド/CSound.cs (revision 569)
+++ trunk/FDK17プロジェクト/コード/03.サウンド/CSound.cs (revision 570)
@@ -34,6 +34,9 @@
3434 // DTXC(DirectSound)でCSoundTimerを使うと、内部で無音のループサウンドを再生するため
3535 // サウンドデバイスを占有してしまい、Viewerとして呼び出されるDTXManiaで、ASIOが使えなくなる。
3636
37+ // DTXMania単体でこれをtrueにすると、WASAPI/ASIO時に演奏タイマーとしてFDKタイマーではなく
38+ // システムのタイマーを使うようになる。こうするとスクロールは滑らかになるが、音ズレが出るかもしれない。
39+
3740 public static IntPtr WindowHandle;
3841
3942 public static bool bIsTimeStretch = false;
@@ -45,49 +48,6 @@
4548 {
4649 return _nMasterVolume;
4750 }
48- //get
49- //{
50- // if ( SoundDeviceType == ESoundDeviceType.ExclusiveWASAPI || SoundDeviceType == ESoundDeviceType.ASIO )
51- // {
52- // return Bass.BASS_GetConfig(BASSConfig.BASS_CONFIG_GVOL_STREAM ) / 100;
53- // }
54- // else
55- // {
56- // return 100;
57- // }
58- //}
59- //set
60- //{
61- // if ( SoundDeviceType == ESoundDeviceType.ExclusiveWASAPI )
62- // {
63- // bool b = BassWasapi.BASS_WASAPI_SetVolume( BASSWASAPIVolume.BASS_WASAPI_CURVE_LINEAR, value / 100.0f );
64- // if ( !b )
65- // {
66- // BASSError be = Bass.BASS_ErrorGetCode();
67- // Trace.TraceInformation( "WASAPI Master Volume Set Error: " + be.ToString() );
68- // }
69- // }
70- //}
71- //set
72- //{
73- // if ( SoundDeviceType == ESoundDeviceType.ExclusiveWASAPI || SoundDeviceType == ESoundDeviceType.ASIO )
74- // {
75- // bool b = Bass.BASS_SetConfig(BASSConfig.BASS_CONFIG_GVOL_STREAM, value * 100 );
76- // if ( !b )
77- // {
78- // BASSError be = Bass.BASS_ErrorGetCode();
79- // Trace.TraceInformation( "Master Volume Set Error: " + be.ToString() );
80- // }
81- // }
82- //}
83- //set
84- //{
85- // if ( SoundDeviceType == ESoundDeviceType.ExclusiveWASAPI || SoundDeviceType == ESoundDeviceType.ASIO )
86- // {
87- // var nodes = new BASS_MIXER_NODE[ 1 ] { new BASS_MIXER_NODE( 0, (float) value ) };
88- // BassMix.BASS_Mixer_ChannelSetEnvelope( SoundDevice.hMixer, BASSMIXEnvelope.BASS_MIXER_ENV_VOL, nodes );
89- // }
90- //}
9151 set
9252 {
9353 SoundDevice.nMasterVolume = value;
@@ -115,7 +75,7 @@
11575 #region [ WASAPI/ASIO/DirectSound設定値 ]
11676 /// <summary>
11777 /// <para>WASAPI 排他モード出力における再生遅延[ms](の希望値)。最終的にはこの数値を基にドライバが決定する)。</para>
118- /// <para>→ WASAPI初期化時に自動設定するようにしたため、ここで設定した値は使用しないようになった。</para>
78+ /// <para>0以下の値を指定すると、この数値はWASAPI初期化時に自動設定する。正数を指定すると、その値を設定しようと試みる。</para>
11979 /// </summary>
12080 public static int SoundDelayExclusiveWASAPI = 0; // SSTでは、50ms
12181 public int GetSoundExclusiveWASAPI()
@@ -204,12 +164,12 @@
204164 /// <param name="nSoundDelayExclusiveWASAPI"></param>
205165 /// <param name="nSoundDelayASIO"></param>
206166 /// <param name="nASIODevice"></param>
207- public CSound管理( IntPtr handle, ESoundDeviceType soundDeviceType, int nSoundDelayExclusiveWASAPI, int nSoundDelayASIO, int nASIODevice )
167+ public CSound管理( IntPtr handle, ESoundDeviceType soundDeviceType, int nSoundDelayExclusiveWASAPI, int nSoundDelayASIO, int nASIODevice, bool _bUseOSTimer )
208168 {
209169 WindowHandle = handle;
210170 SoundDevice = null;
211- bUseOSTimer = false;
212- t初期化( soundDeviceType, nSoundDelayExclusiveWASAPI, nSoundDelayASIO, nASIODevice );
171+ //bUseOSTimer = false;
172+ t初期化( soundDeviceType, nSoundDelayExclusiveWASAPI, nSoundDelayASIO, nASIODevice, _bUseOSTimer );
213173 }
214174 public void Dispose()
215175 {
@@ -230,9 +190,13 @@
230190 //bInitialized = true;
231191 }
232192 }
233-
234193 public void t初期化( ESoundDeviceType soundDeviceType, int _nSoundDelayExclusiveWASAPI, int _nSoundDelayASIO, int _nASIODevice )
235194 {
195+ t初期化( soundDeviceType, _nSoundDelayExclusiveWASAPI, _nSoundDelayASIO, _nASIODevice, false );
196+ }
197+
198+ public void t初期化( ESoundDeviceType soundDeviceType, int _nSoundDelayExclusiveWASAPI, int _nSoundDelayASIO, int _nASIODevice, bool _bUseOSTimer )
199+ {
236200 //SoundDevice = null; // 後で再初期化することがあるので、null初期化はコンストラクタに回す
237201 rc演奏用タイマ = null; // Global.Bass 依存(つまりユーザ依存)
238202 nMixing = 0;
@@ -240,6 +204,7 @@
240204 SoundDelayExclusiveWASAPI = _nSoundDelayExclusiveWASAPI;
241205 SoundDelayASIO = _nSoundDelayASIO;
242206 ASIODevice = _nASIODevice;
207+ bUseOSTimer = _bUseOSTimer;
243208
244209 ESoundDeviceType[] ESoundDeviceTypes = new ESoundDeviceType[ 4 ]
245210 {
@@ -1189,26 +1154,37 @@
11891154 }
11901155 public void t再生位置を変更する( long n位置ms )
11911156 {
1192- if( this.bBASSサウンドである )
1157+ if ( this.bBASSサウンドである )
11931158 {
1194- bool b = BassMix.BASS_Mixer_ChannelSetPosition( this.hBassStream, Bass.BASS_ChannelSeconds2Bytes( this.hBassStream, n位置ms * this.db周波数倍率 * this.db再生速度 / 1000.0 ), BASSMode.BASS_POS_BYTES );
1195- if ( !b )
1159+ bool b = true;
1160+ try
11961161 {
1197- BASSError be = Bass.BASS_ErrorGetCode();
1198- Trace.TraceInformation( Path.GetFileName( this.strファイル名 ) + ": Seek error: " + be.ToString() );
1162+ b = BassMix.BASS_Mixer_ChannelSetPosition( this.hBassStream, Bass.BASS_ChannelSeconds2Bytes( this.hBassStream, n位置ms * this.db周波数倍率 * this.db再生速度 / 1000.0 ), BASSMode.BASS_POS_BYTES );
11991163 }
1164+ catch ( Exception e )
1165+ {
1166+ Trace.TraceInformation( Path.GetFileName( this.strファイル名 ) + ": Seek error: " + e.ToString() );
1167+ }
1168+ finally
1169+ {
1170+ if ( !b )
1171+ {
1172+ BASSError be = Bass.BASS_ErrorGetCode();
1173+ Trace.TraceInformation( Path.GetFileName( this.strファイル名 ) + ": Seek error: " + be.ToString() );
1174+ }
1175+ }
12001176 }
12011177 else if( this.bDirectSoundである )
12021178 {
12031179 int n位置sample = (int) ( this.Buffer.Format.SamplesPerSecond * n位置ms * 0.001 * _db周波数倍率 * _db再生速度 ); // #30839 2013.2.24 yyagi; add _db周波数倍率 and _db再生速度
1204- try
1205- {
1206- this.Buffer.CurrentPlayPosition = n位置sample * this.Buffer.Format.BlockAlignment;
1207- }
1208- catch ( DirectSoundException e )
1209- {
1210- Trace.TraceError( "{0}: Seek error: {1}", Path.GetFileName( this.strファイル名 ), n位置ms, e.Message );
1211- }
1180+ try
1181+ {
1182+ this.Buffer.CurrentPlayPosition = n位置sample * this.Buffer.Format.BlockAlignment;
1183+ }
1184+ catch ( DirectSoundException e )
1185+ {
1186+ Trace.TraceError( "{0}: Seek error: {1}", Path.GetFileName( this.strファイル名 ), n位置ms, e.Message );
1187+ }
12121188 }
12131189 }
12141190
@@ -1431,12 +1407,26 @@
14311407
14321408 private void tBASSサウンドを作成する( string strファイル名, int hMixer, BASSFlag flags )
14331409 {
1434- if ( String.Compare( Path.GetExtension( strファイル名 ), ".xa", true ) == 0 ) // caselessで文字列比較
1410+ #region [ xaとwav(RIFF chunked vorbis)に対しては専用の処理をする ]
1411+ switch ( Path.GetExtension( strファイル名 ).ToLower() )
14351412 {
1436- tBASSサウンドを作成するXA( strファイル名, hMixer, flags );
1437- return;
1438- }
1413+ case ".xa":
1414+ tBASSサウンドを作成するXA( strファイル名, hMixer, flags );
1415+ return;
14391416
1417+ case ".wav":
1418+ if ( tRIFFchunkedVorbisならDirectShowでDecodeする( strファイル名, ref byArrWAVファイルイメージ ) )
1419+ {
1420+ tBASSサウンドを作成する( byArrWAVファイルイメージ, hMixer, flags );
1421+ return;
1422+ }
1423+ break;
1424+
1425+ default:
1426+ break;
1427+ }
1428+ #endregion
1429+
14401430 this.e作成方法 = E作成方法.ファイルから;
14411431 this.strファイル名 = strファイル名;
14421432
@@ -1468,6 +1458,53 @@
14681458
14691459 tBASSサウンドを作成する・ストリーム生成後の共通処理( hMixer );
14701460 }
1461+ /// <summary>
1462+ /// Decode "RIFF chunked Vorbis" to "raw wave"
1463+ /// because BASE.DLL has two problems for RIFF chunked Vorbis;
1464+ /// 1. time seek is not fine 2. delay occurs (about 10ms)
1465+ /// </summary>
1466+ /// <param name="strファイル名">wave filename</param>
1467+ /// <param name="byArrWAVファイルイメージ">wav file image</param>
1468+ /// <returns></returns>
1469+ private bool tRIFFchunkedVorbisならDirectShowでDecodeする( string strファイル名, ref byte[] byArrWAVファイルイメージ )
1470+ {
1471+ bool bファイルにVorbisコンテナが含まれている = false;
1472+
1473+ #region [ ファイルがWAVかつ、Vorbisコンテナが含まれているかを調べ、それに該当するなら、DirectShowでデコードする。]
1474+ //-----------------
1475+ try
1476+ {
1477+ using ( var ws = new WaveStream( strファイル名 ) )
1478+ {
1479+ if ( ws.Format.FormatTag == ( WaveFormatTag ) 0x6770 || // Ogg Vorbis Mode 2+
1480+ ws.Format.FormatTag == ( WaveFormatTag ) 0x6771 ) // Ogg Vorbis Mode 3+
1481+ {
1482+ Trace.TraceInformation( Path.GetFileName( strファイル名 ) + ": RIFF chunked Vorbis. Decode to raw Wave first, to avoid BASS.DLL troubles" );
1483+ try
1484+ {
1485+ CDStoWAVFileImage.t変換( strファイル名, out byArrWAVファイルイメージ );
1486+ bファイルにVorbisコンテナが含まれている = true;
1487+ }
1488+ catch
1489+ {
1490+ Trace.TraceWarning( "Warning: " + Path.GetFileName( strファイル名 ) + " : RIFF chunked Vorbisのデコードに失敗しました。" );
1491+ }
1492+ }
1493+ }
1494+ }
1495+ catch ( InvalidDataException )
1496+ {
1497+ // DirectShowのデコードに失敗したら、次はACMでのデコードを試すことになるため、ここではエラーログを出さない。
1498+ // Trace.TraceWarning( "Warning: " + Path.GetFileName( strファイル名 ) + " : デコードに失敗しました。" );
1499+ }
1500+ catch ( Exception e )
1501+ {
1502+ Trace.TraceWarning( "Warning: " + Path.GetFileName( strファイル名 ) + " : 読み込みに失敗しました。" );
1503+ }
1504+ #endregion
1505+
1506+ return bファイルにVorbisコンテナが含まれている;
1507+ }
14711508 private void tBASSサウンドを作成するXA( string strファイル名, int hMixer, BASSFlag flags )
14721509 {
14731510 int nPCMデータの先頭インデックス;
@@ -1654,6 +1691,10 @@
16541691 throw new NotImplementedException();
16551692 }
16561693
1694+ if ( !File.Exists( strファイル名 ) )
1695+ {
1696+ throw new Exception( string.Format( "ファイルが見つかりませんでした。({0})", strファイル名 ) );
1697+ }
16571698 int nHandle = sounddecoder.Open( strファイル名 );
16581699 if ( nHandle < 0 )
16591700 {
--- trunk/FDK17プロジェクト/コード/03.サウンド/CSoundDeviceASIO.cs (revision 569)
+++ trunk/FDK17プロジェクト/コード/03.サウンド/CSoundDeviceASIO.cs (revision 570)
@@ -85,23 +85,35 @@
8585 {
8686 get
8787 {
88- float f音量 = BassAsio.BASS_ASIO_ChannelGetVolume( false, -1 );
89- if ( f音量 == -1.0f )
88+ float f音量 = 0.0f;
89+ bool b = Bass.BASS_ChannelGetAttribute( this.hMixer, BASSAttribute.BASS_ATTRIB_VOL, ref f音量 );
90+ if ( !b )
9091 {
91- BASSError be = BassAsio.BASS_ASIO_ErrorGetCode();
92+ BASSError be = Bass.BASS_ErrorGetCode();
9293 Trace.TraceInformation( "ASIO Master Volume Get Error: " + be.ToString() );
93- f音量 = 0.0f;
9494 }
95+ else
96+ {
97+ Trace.TraceInformation( "ASIO Master Volume Get Success: " + ( f音量 * 100 ) );
98+
99+ }
95100 return (int) ( f音量 * 100 );
96101 }
97102 set
98103 {
99- bool b = BassAsio.BASS_ASIO_ChannelSetVolume( false, -1, value / 100.0f );
104+ bool b = Bass.BASS_ChannelSetAttribute( this.hMixer, BASSAttribute.BASS_ATTRIB_VOL, (float) ( value / 100.0 ) );
105+ //bool b = Bass.BASS_SetVolume( value / 100.0f );
100106 if ( !b )
101107 {
102- BASSError be = BassAsio.BASS_ASIO_ErrorGetCode();
108+ BASSError be = Bass.BASS_ErrorGetCode();
103109 Trace.TraceInformation( "ASIO Master Volume Set Error: " + be.ToString() );
104110 }
111+ else
112+ {
113+ //int n = this.nMasterVolume;
114+ //Trace.TraceInformation( "ASIO Master Volume Set Success: " + value );
115+
116+ }
105117 }
106118 }
107119
@@ -291,6 +303,33 @@
291303 long nミキサーの1サンプルあたりのバイト数 = mixerInfo.chans * nサンプルサイズbyte;
292304 this.nミキサーの1秒あたりのバイト数 = nミキサーの1サンプルあたりのバイト数 * mixerInfo.freq;
293305
306+ // 単純に、hMixerの音量をMasterVolumeとして制御しても、
307+ // ChannelGetData()の内容には反映されない。
308+ // そのため、もう一段mixerを噛ませて、一段先のmixerからChannelGetData()することで、
309+ // hMixerの音量制御を反映させる。
310+ this.hMixer_DeviceOut = BassMix.BASS_Mixer_StreamCreate(
311+ (int) this.db周波数, this.n出力チャンネル数, flag );
312+ if ( this.hMixer_DeviceOut == 0 )
313+ {
314+ BASSError errcode = Bass.BASS_ErrorGetCode();
315+ BassAsio.BASS_ASIO_Free();
316+ Bass.BASS_Free();
317+ this.bIsBASSFree = true;
318+ throw new Exception( string.Format( "BASSミキサ(最終段)の作成に失敗しました。[{0}]", errcode ) );
319+ }
320+ {
321+ bool b1 = BassMix.BASS_Mixer_StreamAddChannel( this.hMixer_DeviceOut, this.hMixer, BASSFlag.BASS_DEFAULT );
322+ if ( !b1 )
323+ {
324+ BASSError errcode = Bass.BASS_ErrorGetCode();
325+ BassAsio.BASS_ASIO_Free();
326+ Bass.BASS_Free();
327+ this.bIsBASSFree = true;
328+ throw new Exception( string.Format( "BASSミキサ(最終段とmixing)の接続に失敗しました。[{0}]", errcode ) );
329+ };
330+ }
331+
332+
294333 // 出力を開始。
295334
296335 this.nバッファサイズsample = (int) ( n希望バッファサイズms * this.db周波数 / 1000.0 );
@@ -371,6 +410,7 @@
371410
372411
373412 protected int hMixer = -1;
413+ protected int hMixer_DeviceOut = -1;
374414 protected int n出力チャンネル数 = 0;
375415 protected double db周波数 = 0.0;
376416 protected int nバッファサイズsample = 0;
@@ -386,7 +426,7 @@
386426
387427 // BASSミキサからの出力データをそのまま ASIO buffer へ丸投げ。
388428
389- int num = Bass.BASS_ChannelGetData( this.hMixer, buffer, length ); // num = 実際に転送した長さ
429+ int num = Bass.BASS_ChannelGetData( this.hMixer_DeviceOut, buffer, length ); // num = 実際に転送した長さ
390430
391431 if ( num == -1 ) num = 0;
392432
--- trunk/FDK17プロジェクト/コード/03.サウンド/CSoundDeviceWASAPI.cs (revision 569)
+++ trunk/FDK17プロジェクト/コード/03.サウンド/CSoundDeviceWASAPI.cs (revision 570)
@@ -64,7 +64,7 @@
6464 }
6565 else
6666 {
67- Trace.TraceInformation( "WASAPI Master Volume Get Success: " + (f音量 * 100) );
67+ //Trace.TraceInformation( "WASAPI Master Volume Get Success: " + (f音量 * 100) );
6868
6969 }
7070 return (int) ( f音量 * 100 );
@@ -71,7 +71,8 @@
7171 }
7272 set
7373 {
74- bool b = Bass.BASS_SetVolume( value / 100.0f );
74+ bool b = Bass.BASS_ChannelSetAttribute( this.hMixer, BASSAttribute.BASS_ATTRIB_VOL, (float) ( value / 100.0 ) );
75+ //bool b = Bass.BASS_SetVolume( value / 100.0f );
7576 // hMixerに対するBASS_ChannelSetAttribute()でBASS_ATTRIB_VOLを変更: 出力音量に反映されず
7677 // Bass_SetVolume(): BASS_ERROR_NOTAVIL ("no sound" deviceには適用不可)
7778
@@ -191,7 +192,10 @@
191192 // Trace.TraceInformation( "Selected Default WASAPI Device: {0}", deviceInfo.name );
192193 // Trace.TraceInformation( "MinPeriod={0}, DefaultPeriod={1}", deviceInfo.minperiod, deviceInfo.defperiod );
193194 n更新間隔ms = (long) ( deviceInfo.minperiod * 1000 );
194- //n希望バッファサイズms = n更新間隔ms + 1; // 2013.4.25 #31237 yyagi; バッファサイズ設定の完全自動化。更新間隔=バッファサイズにするとBASS_ERROR_UNKNOWNになるので+1する。
195+ if ( n希望バッファサイズms <= 0 || n希望バッファサイズms < n更新間隔ms + 1 )
196+ {
197+ n希望バッファサイズms = n更新間隔ms + 1; // 2013.4.25 #31237 yyagi; バッファサイズ設定の完全自動化。更新間隔=バッファサイズにするとBASS_ERROR_UNKNOWNになるので+1する。
198+ }
195199 }
196200 else
197201 {
@@ -285,13 +289,13 @@
285289 info.freq,
286290 info.chans,
287291 BASSFlag.BASS_MIXER_NONSTOP | BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE ); // デコードのみ=発声しない。WASAPIに出力されるだけ。
288- if (this.hMixer == 0)
292+ if ( this.hMixer == 0 )
289293 {
290294 BASSError errcode = Bass.BASS_ErrorGetCode();
291295 BassWasapi.BASS_WASAPI_Free();
292296 Bass.BASS_Free();
293297 this.bIsBASSFree = true;
294- throw new Exception( string.Format( "BASSミキサの作成に失敗しました。[{0}]", errcode ) );
298+ throw new Exception( string.Format( "BASSミキサ(mixing)の作成に失敗しました。[{0}]", errcode ) );
295299 }
296300
297301
@@ -301,6 +305,37 @@
301305 long nミキサーの1サンプルあたりのバイト数 = mixerInfo.chans * 4; // 4 = sizeof(FLOAT)
302306 this.nミキサーの1秒あたりのバイト数 = nミキサーの1サンプルあたりのバイト数 * mixerInfo.freq;
303307
308+
309+
310+ // 単純に、hMixerの音量をMasterVolumeとして制御しても、
311+ // ChannelGetData()の内容には反映されない。
312+ // そのため、もう一段mixerを噛ませて、一段先のmixerからChannelGetData()することで、
313+ // hMixerの音量制御を反映させる。
314+ this.hMixer_DeviceOut = BassMix.BASS_Mixer_StreamCreate(
315+ info.freq,
316+ info.chans,
317+ BASSFlag.BASS_MIXER_NONSTOP | BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_DECODE ); // デコードのみ=発声しない。WASAPIに出力されるだけ。
318+ if ( this.hMixer_DeviceOut == 0 )
319+ {
320+ BASSError errcode = Bass.BASS_ErrorGetCode();
321+ BassWasapi.BASS_WASAPI_Free();
322+ Bass.BASS_Free();
323+ this.bIsBASSFree = true;
324+ throw new Exception( string.Format( "BASSミキサ(最終段)の作成に失敗しました。[{0}]", errcode ) );
325+ }
326+
327+ {
328+ bool b1 = BassMix.BASS_Mixer_StreamAddChannel( this.hMixer_DeviceOut, this.hMixer, BASSFlag.BASS_DEFAULT );
329+ if ( !b1 )
330+ {
331+ BASSError errcode = Bass.BASS_ErrorGetCode();
332+ BassWasapi.BASS_WASAPI_Free();
333+ Bass.BASS_Free();
334+ this.bIsBASSFree = true;
335+ throw new Exception( string.Format( "BASSミキサ(最終段とmixing)の接続に失敗しました。[{0}]", errcode ) );
336+ };
337+ }
338+
304339 // 出力を開始。
305340
306341 BassWasapi.BASS_WASAPI_Start();
@@ -361,6 +396,7 @@
361396 #endregion
362397
363398 protected int hMixer = -1;
399+ protected int hMixer_DeviceOut = -1;
364400 protected WASAPIPROC tWasapiProc = null;
365401
366402 protected int tWASAPI処理( IntPtr buffer, int length, IntPtr user )
@@ -367,7 +403,7 @@
367403 {
368404 // BASSミキサからの出力データをそのまま WASAPI buffer へ丸投げ。
369405
370- int num = Bass.BASS_ChannelGetData( this.hMixer, buffer, length ); // num = 実際に転送した長さ
406+ int num = Bass.BASS_ChannelGetData( this.hMixer_DeviceOut, buffer, length ); // num = 実際に転送した長さ
371407 if ( num == -1 ) num = 0;
372408
373409
--- trunk/FDK17プロジェクト/コード/03.サウンド/CSoundTimer.cs (revision 569)
+++ trunk/FDK17プロジェクト/コード/03.サウンド/CSoundTimer.cs (revision 570)
@@ -42,9 +42,16 @@
4242 }
4343 else
4444 {
45- return this.Device.n経過時間ms
46- + ( this.Device.tmシステムタイマ.nシステム時刻ms - this.Device.n経過時間を更新したシステム時刻ms );
47- //return ctDInputTimer.nシステム時刻ms; // 仮にCSoundTimerをCTimer相当の動作にしてみた
45+ if ( FDK.CSound管理.bUseOSTimer )
46+ //if ( true )
47+ {
48+ return ctDInputTimer.nシステム時刻ms; // 仮にCSoundTimerをCTimer相当の動作にしてみた
49+ }
50+ else
51+ {
52+ return this.Device.n経過時間ms
53+ + ( this.Device.tmシステムタイマ.nシステム時刻ms - this.Device.n経過時間を更新したシステム時刻ms );
54+ }
4855 }
4956 }
5057 else if( this.Device.e出力デバイス == ESoundDeviceType.DirectSound )
--- trunk/FDK17プロジェクト/コード/03.サウンド/Cxa.cs (revision 569)
+++ trunk/FDK17プロジェクト/コード/03.サウンド/Cxa.cs (revision 570)
@@ -44,13 +44,13 @@
4444 #endregion
4545
4646 #region [ xadec.dllとのリンク ]
47- [DllImport( "xadec.dll", EntryPoint = "xaDecodeOpen", CallingConvention = CallingConvention.Cdecl )]
47+ [DllImport( "xadec.dll", EntryPoint = "xaDecodeOpen" )]
4848 public extern static IntPtr xaDecodeOpen( ref XAHEADER pxah, out FDK.CWin32.WAVEFORMATEX pwfx );
49- [DllImport( "xadec.dll", EntryPoint = "xaDecodeClose", CallingConvention = CallingConvention.Cdecl )]
49+ [DllImport( "xadec.dll", EntryPoint = "xaDecodeClose" )]
5050 public extern static bool xaDecodeClose( IntPtr hxas );
51- [DllImport( "xadec.dll", EntryPoint = "xaDecodeSize", CallingConvention = CallingConvention.Cdecl )]
51+ [DllImport( "xadec.dll", EntryPoint = "xaDecodeSize" )]
5252 public extern static bool xaDecodeSize( IntPtr hxas, uint slen, out uint pdlen );
53- [DllImport( "xadec.dll", EntryPoint = "xaDecodeConvert", CallingConvention = CallingConvention.Cdecl )]
53+ [DllImport( "xadec.dll", EntryPoint = "xaDecodeConvert" )]
5454 public extern static bool xaDecodeConvert( IntPtr hxas, ref XASTREAMHEADER psh );
5555 #endregion
5656
Show on old repository browser