OSDN Git Service

シンバルミュートチップを実装。
authorくまかみ工房 <kumakamikoubou@gmail.com>
Sat, 26 Nov 2016 09:04:10 +0000 (18:04 +0900)
committerくまかみ工房 <kumakamikoubou@gmail.com>
Sat, 26 Nov 2016 09:04:10 +0000 (18:04 +0900)
FDK24/メディア/サウンド/WASAPI/Sound.cs
SSTFEditor/メインフォーム.cs
SSTFEditor/譜面/C譜面.cs
SSTFormat/スコア.cs
StrokeStyleT/StrokeStyleT.csproj
StrokeStyleT/sounds/Kit.xml
StrokeStyleT/sounds/drums/LeftCymbalMute.wav [new file with mode: 0644]
StrokeStyleT/sounds/drums/RightCymbalMute.wav [new file with mode: 0644]
StrokeStyleT/ステージ/演奏/スクロール譜面.cs
StrokeStyleT/ステージ/演奏/チップ種別Extensions.cs

index 722c03e..30efec7 100644 (file)
@@ -38,7 +38,18 @@ namespace FDK.メディア.サウンド.WASAPI
                                this.位置sample = position;
                        }
                }
-                       
+
+               public bool 再生中である
+               {
+                       get;
+                       protected set;
+               } = false;
+               public bool 再生停止中である
+               {
+                       get { return !this.再生中である; }
+                       protected set { this.再生中である = !value; }
+               }
+
                public CSCore.ISampleSource SampleSource
                {
                        get { return this._SampleSource; }
@@ -97,7 +108,10 @@ namespace FDK.メディア.サウンド.WASAPI
 
                        Mixer mixer;
                        if( this._MixerRef.TryGetTarget( out mixer ) )
+                       {
                                mixer.AddSound( this );
+                               this.再生中である = true;
+                       }
                }
 
                public void Play( double 再生開始位置sec )
@@ -110,6 +124,8 @@ namespace FDK.メディア.サウンド.WASAPI
                        Mixer mixer;
                        if( this._MixerRef.TryGetTarget( out mixer ) )
                                mixer.RemoveSound( this );
+
+                       this.再生停止中である = true;
                }
 
                private CSCore.IWaveSource _WaveSource = null;
index ea58eac..4a33730 100644 (file)
@@ -199,6 +199,8 @@ namespace SSTFEditor
                        { SSTFormat.チップ種別.Tom2_Rim, "LowTom(RimShot)" },
                        { SSTFormat.チップ種別.Tom3, "FloorTom" },
                        { SSTFormat.チップ種別.Tom3_Rim, "FloorTom(RimShot)" },
+                       { SSTFormat.チップ種別.LeftCymbal_Mute, "Mute" },
+                       { SSTFormat.チップ種別.RightCymbal_Mute, "Mute" },
                        { SSTFormat.チップ種別.Unknown, "" },
                        { SSTFormat.チップ種別.小節線, "" },
                        { SSTFormat.チップ種別.背景動画, "" },
index cf24868..2259f61 100644 (file)
@@ -45,7 +45,9 @@ namespace SSTFEditor
                                { SSTFormat.チップ種別.Ride, 編集レーン種別.右シンバル },                      // 右側で固定とする
                                { SSTFormat.チップ種別.Ride_Cup, 編集レーン種別.右シンバル },          //
                                { SSTFormat.チップ種別.China, 編集レーン種別.右シンバル },                     //
-                               { SSTFormat.チップ種別.Splash, 編集レーン種別.右シンバル },            //
+                               { SSTFormat.チップ種別.Splash, 編集レーン種別.右シンバル },          //
+                               { SSTFormat.チップ種別.LeftCymbal_Mute, 編集レーン種別.左シンバル },
+                               { SSTFormat.チップ種別.RightCymbal_Mute, 編集レーン種別.右シンバル },
                                { SSTFormat.チップ種別.背景動画, 編集レーン種別.背景動画 },
                                { SSTFormat.チップ種別.小節線, 編集レーン種別.Unknown },
                                { SSTFormat.チップ種別.拍線, 編集レーン種別.Unknown },
@@ -496,7 +498,7 @@ namespace SSTFEditor
                }
                public void チップを指定領域へ描画する( Graphics g, SSTFormat.チップ種別 eチップ, int 音量, Rectangle チップ描画領域, string チップ内文字列 )
                {
-                       // ※Cチップの描画以外の目的でも呼ばれるため、本メソッドの引数には Cチップ を入れていない。
+                       // ※SSTFormat.チップ の描画以外の目的でも呼ばれるため、本メソッドの引数には SSTFormat.チップ を入れていない。
 
                        switch( eチップ )
                        {
@@ -538,6 +540,8 @@ namespace SSTFEditor
                                case SSTFormat.チップ種別.Tom1_Rim:
                                case SSTFormat.チップ種別.Tom2_Rim:
                                case SSTFormat.チップ種別.Tom3_Rim:
+                               case SSTFormat.チップ種別.LeftCymbal_Mute:
+                               case SSTFormat.チップ種別.RightCymbal_Mute:
                                        this.チップを描画する_幅狭白バツ( g, eチップ, 音量, チップ描画領域, チップ内文字列 );
                                        break;
                        }
@@ -887,6 +891,7 @@ namespace SSTFEditor
                        = new Dictionary<SSTFormat.チップ種別, Color>() {
                                { SSTFormat.チップ種別.BPM, Color.FromArgb( チップ背景色透明度, Color.SkyBlue ) },
                                { SSTFormat.チップ種別.LeftCrash, Color.FromArgb( チップ背景色透明度, Color.WhiteSmoke ) },
+                               { SSTFormat.チップ種別.LeftCymbal_Mute, Color.FromArgb( チップ背景色透明度, Color.Gray ) },
                                { SSTFormat.チップ種別.HiHat_Close, Color.FromArgb( チップ背景色透明度, Color.SkyBlue ) },
                                { SSTFormat.チップ種別.HiHat_Foot, Color.FromArgb( チップ背景色透明度, Color.SkyBlue ) },
                                { SSTFormat.チップ種別.HiHat_HalfOpen, Color.FromArgb( チップ背景色透明度, Color.SkyBlue ) },
@@ -903,6 +908,7 @@ namespace SSTFEditor
                                { SSTFormat.チップ種別.Tom3, Color.FromArgb( チップ背景色透明度, Color.Magenta ) },
                                { SSTFormat.チップ種別.Tom3_Rim, Color.FromArgb( チップ背景色透明度, Color.Magenta ) },
                                { SSTFormat.チップ種別.RightCrash, Color.FromArgb( チップ背景色透明度, Color.WhiteSmoke ) },
+                               { SSTFormat.チップ種別.RightCymbal_Mute, Color.FromArgb( チップ背景色透明度, Color.Gray ) },
                                { SSTFormat.チップ種別.Ride, Color.FromArgb( チップ背景色透明度, Color.WhiteSmoke ) },
                                { SSTFormat.チップ種別.Ride_Cup, Color.FromArgb( チップ背景色透明度, Color.WhiteSmoke ) },
                                { SSTFormat.チップ種別.China, Color.FromArgb( チップ背景色透明度, Color.WhiteSmoke ) },
index 7d63d4c..3d08fee 100644 (file)
@@ -77,9 +77,9 @@ namespace SSTFormat
                                { レーン種別.BPM, new List<チップ種別>() { チップ種別.BPM } },
                                { レーン種別.China, new List<チップ種別>() { チップ種別.China } },
                                { レーン種別.HiHat, new List<チップ種別>() { チップ種別.HiHat_Close, チップ種別.HiHat_Foot, チップ種別.HiHat_HalfOpen, チップ種別.HiHat_Open } },
-                               { レーン種別.LeftCrash, new List<チップ種別>() { チップ種別.LeftCrash } },
+                               { レーン種別.LeftCrash, new List<チップ種別>() { チップ種別.LeftCrash, チップ種別.LeftCymbal_Mute } },
                                { レーン種別.Ride, new List<チップ種別>() { チップ種別.Ride, チップ種別.Ride_Cup } },
-                               { レーン種別.RightCrash, new List<チップ種別>() { チップ種別.RightCrash } },
+                               { レーン種別.RightCrash, new List<チップ種別>() { チップ種別.RightCrash, チップ種別.RightCymbal_Mute } },
                                { レーン種別.Snare, new List<チップ種別>() { チップ種別.Snare, チップ種別.Snare_ClosedRim, チップ種別.Snare_Ghost, チップ種別.Snare_OpenRim } },
                                { レーン種別.Song, new List<チップ種別>() { チップ種別.背景動画 } },
                                { レーン種別.Splash, new List<チップ種別>() { チップ種別.Splash } },
@@ -656,13 +656,24 @@ namespace SSTFormat
                                                                                //-----------------
                                                                                case チップ種別.LeftCrash:
 
-                                                                                       #region " 未知の属性 "
-                                                                                       //-----------------
-                                                                                       chipTokens[ i ] = chipTokens[ i ].Substring( 1 ).Trim();
-                                                                                       FDK.Log.ERROR( $"未対応の属性「{属性ID}」が指定されています。この属性をスキップします。[{行番号}行目; {i + 1}個目のチップ]" );
-                                                                                       //-----------------
-                                                                                       #endregion
-
+                                                                                       if( 属性ID == 'm' )
+                                                                                       {
+                                                                                               #region " Mute "
+                                                                                               //----------------
+                                                                                               chipTokens[ i ] = chipTokens[ i ].Substring( 1 ).Trim();
+                                                                                               chip.チップ種別 = チップ種別.LeftCymbal_Mute;
+                                                                                               //----------------
+                                                                                               #endregion
+                                                                                       }
+                                                                                       else
+                                                                                       {
+                                                                                               #region " 未知の属性 "
+                                                                                               //-----------------
+                                                                                               chipTokens[ i ] = chipTokens[ i ].Substring( 1 ).Trim();
+                                                                                               FDK.Log.ERROR( $"未対応の属性「{属性ID}」が指定されています。この属性をスキップします。[{行番号}行目; {i + 1}個目のチップ]" );
+                                                                                               //-----------------
+                                                                                               #endregion
+                                                                                       }
                                                                                        continue;
 
                                                                                //-----------------
@@ -927,13 +938,24 @@ namespace SSTFormat
                                                                                //-----------------
                                                                                case チップ種別.RightCrash:
 
-                                                                                       #region " 未知の属性 "
-                                                                                       //-----------------
-                                                                                       chipTokens[ i ] = chipTokens[ i ].Substring( 1 ).Trim();
-                                                                                       FDK.Log.ERROR( $"未対応の属性「{属性ID}」が指定されています。この属性をスキップします。[{行番号}行目; {i + 1}個目のチップ]" );
-                                                                                       //-----------------
-                                                                                       #endregion
-
+                                                                                       if( 属性ID == 'm' )
+                                                                                       {
+                                                                                               #region " Mute "
+                                                                                               //----------------
+                                                                                               chipTokens[ i ] = chipTokens[ i ].Substring( 1 ).Trim();
+                                                                                               chip.チップ種別 = チップ種別.RightCymbal_Mute;
+                                                                                               //----------------
+                                                                                               #endregion
+                                                                                       }
+                                                                                       else
+                                                                                       {
+                                                                                               #region " 未知の属性 "
+                                                                                               //-----------------
+                                                                                               chipTokens[ i ] = chipTokens[ i ].Substring( 1 ).Trim();
+                                                                                               FDK.Log.ERROR( $"未対応の属性「{属性ID}」が指定されています。この属性をスキップします。[{行番号}行目; {i + 1}個目のチップ]" );
+                                                                                               //-----------------
+                                                                                               #endregion
+                                                                                       }
                                                                                        continue;
 
                                                                                //-----------------
@@ -1256,11 +1278,11 @@ namespace SSTFormat
                        #endregion
                }
                /// <summary>
-               /// 現在の スコア の内容をデータファイル(*.sstf)に書き出す。
+               ///             現在の スコア の内容をデータファイル(*.sstf)に書き出す。
                /// </summary>
                /// <remarks>
-               /// 小節線、拍線、Unknown チップは出力しない。
-               /// 失敗すれば何らかの例外を発出する。
+               ///             小節線、拍線、Unknown チップは出力しない。
+               ///             失敗すれば何らかの例外を発出する。
                /// </remarks>
                public void 曲データファイルを書き出す( string 曲データファイル名, string ヘッダ行 )
                {
@@ -1307,19 +1329,25 @@ namespace SSTFormat
                                        //-----------------
                                        foreach( var cc in this.チップリスト )
                                        {
-                                               if( cc.小節番号 > 小節番号 )
-                                                       break;    // チップリストは昇順に並んでいるので、これ以上検索しても無駄。
-
+                                               #region " 出力しないチップ種別は無視。"
+                                               //----------------
                                                if( cc.チップ種別 == チップ種別.小節線 ||
                                                        cc.チップ種別 == チップ種別.拍線 ||
                                                        cc.チップ種別 == チップ種別.小節メモ ||
                                                        cc.チップ種別 == チップ種別.小節の先頭 ||
                                                        cc.チップ種別 == チップ種別.Unknown )
                                                {
-                                                       continue;   // これらは出力しないので無視。
+                                                       continue;
                                                }
+                                               //----------------
+                                               #endregion
 
-                                               if( cc.小節番号 == 小節番号 )
+                                               if( cc.小節番号 > 小節番号 )
+                                               {
+                                                       // チップリストは昇順に並んでいるので、これ以上検索しても無駄。
+                                                       break;
+                                               }
+                                               else if( cc.小節番号 == 小節番号 )
                                                {
                                                        var lane = レーン種別.Bass;   // 対応するレーンがなかったら Bass でも返しておく。
 
@@ -1439,6 +1467,14 @@ namespace SSTFormat
                                                                                sw.Write( 'r' );
                                                                                break;
 
+                                                                       case チップ種別.LeftCymbal_Mute:
+                                                                               sw.Write( 'm' );
+                                                                               break;
+
+                                                                       case チップ種別.RightCymbal_Mute:
+                                                                               sw.Write( 'm' );
+                                                                               break;
+
                                                                        case チップ種別.BPM:
                                                                                sw.Write( $"b{cc.BPM.ToString()}" );
                                                                                break;
index c808c18..87c9c6d 100644 (file)
     <Content Include="songs\[豚乙女 feat.ランコ] 遙か遠い空の声\遙か遠い空の声[豚乙女](原曲:無限の鐘).mp4">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <None Include="sounds\drums\LeftCymbalMute.wav">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
+    <None Include="sounds\drums\RightCymbalMute.wav">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </None>
   </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
index 647a4ce..e3388e3 100644 (file)
@@ -22,5 +22,7 @@
         <Sound Name="Tom3">drums\Tom3.wav</Sound>
         <Sound Name="Tom3_Rim">drums\Tom3Rim.wav</Sound>
         <Sound Name="RightCrash">drums\RightCrash.wav</Sound>
+        <Sound Name="LeftCymbal_Mute">drums\LeftCymbalMute.wav</Sound>
+        <Sound Name="RightCymbal_Mute">drums\RightCymbalMute.wav</Sound>
     </DrumKit>
 </Root>
\ No newline at end of file
diff --git a/StrokeStyleT/sounds/drums/LeftCymbalMute.wav b/StrokeStyleT/sounds/drums/LeftCymbalMute.wav
new file mode 100644 (file)
index 0000000..dbe5a1b
Binary files /dev/null and b/StrokeStyleT/sounds/drums/LeftCymbalMute.wav differ
diff --git a/StrokeStyleT/sounds/drums/RightCymbalMute.wav b/StrokeStyleT/sounds/drums/RightCymbalMute.wav
new file mode 100644 (file)
index 0000000..73e7ed8
Binary files /dev/null and b/StrokeStyleT/sounds/drums/RightCymbalMute.wav differ
index e727a42..ba1198e 100644 (file)
@@ -421,108 +421,355 @@ namespace SST.ステージ.演奏
 
                        switch( chip.チップ種別 )
                        {
+                               #region " LeftCrash "
+                               //----------------
                                case SSTFormat.チップ種別.LeftCrash:
-                                       this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.LeftCrash, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.LeftCrash ) ], Ydpx, 音量0to1 );
+                                       this._単画チップを1つ描画する(
+                                               dr,
+                                               SSTFormat.レーン種別.LeftCrash,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.LeftCrash ) ],
+                                               Ydpx,
+                                               音量0to1 );
                                        break;
+                               //----------------
+                               #endregion
 
+                               #region " HiHat_Close "
+                               //----------------
                                case SSTFormat.チップ種別.HiHat_Close:
-                                       this._アニメチップを1つ描画する( dr, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_Close ) ], SSTFormat.レーン種別.HiHat, Ydpx, 音量0to1 );
+                                       this._アニメチップを1つ描画する(
+                                               dr,
+                                               SSTFormat.レーン種別.HiHat,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_Close ) ],
+                                               Ydpx,
+                                               音量0to1 );
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " HiHat_HalfOpen "
+                               //----------------
                                case SSTFormat.チップ種別.HiHat_HalfOpen:
-                                       this._アニメチップを1つ描画する( dr, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_Close ) ], SSTFormat.レーン種別.HiHat, Ydpx, 音量0to1 );
-                                       this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.Foot, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_HalfOpen ) ], Ydpx, 1.0f );    // 音量は反映しない
+                                       this._アニメチップを1つ描画する( 
+                                               dr,
+                                               SSTFormat.レーン種別.HiHat,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_Close ) ],
+                                               Ydpx, 
+                                               音量0to1 );
+                                       this._単画チップを1つ描画する( 
+                                               dr, 
+                                               SSTFormat.レーン種別.Foot, 
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_HalfOpen ) ],
+                                               Ydpx, 
+                                               1.0f );    // 音量は反映しない
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " HiHat_Open "
+                               //----------------
                                case SSTFormat.チップ種別.HiHat_Open:
-                                       this._アニメチップを1つ描画する( dr, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_Close ) ], SSTFormat.レーン種別.HiHat, Ydpx, 音量0to1 );
+                                       this._アニメチップを1つ描画する(
+                                               dr,
+                                               SSTFormat.レーン種別.HiHat,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_Close ) ],
+                                               Ydpx, 
+                                               音量0to1 );
                                        this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.Foot, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_Open ) ], Ydpx, 1.0f );    // 音量は反映しない
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " HiHat_Foot "
+                               //----------------
                                case SSTFormat.チップ種別.HiHat_Foot:
-                                       this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.Foot, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_Foot ) ], Ydpx, 1.0f );    // 音量は反映しない
+                                       this._単画チップを1つ描画する( 
+                                               dr, 
+                                               SSTFormat.レーン種別.Foot, 
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.HiHat_Foot ) ],
+                                               Ydpx,
+                                               1.0f );    // 音量は反映しない
                                        break;
-
+                               //----------------
+                               #endregion
+                               
+                               #region " Snare "
+                               //----------------
                                case SSTFormat.チップ種別.Snare:
-                                       this._アニメチップを1つ描画する( dr, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Snare ) ], SSTFormat.レーン種別.Snare, Ydpx, 音量0to1 );
+                                       this._アニメチップを1つ描画する(
+                                               dr,
+                                               SSTFormat.レーン種別.Snare,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Snare ) ], 
+                                               Ydpx, 
+                                               音量0to1 );
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Snare_ClosedRim "
+                               //----------------
                                case SSTFormat.チップ種別.Snare_ClosedRim:
-                                       this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.Snare, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Snare_ClosedRim ) ], Ydpx, 1.0f );  // 音量は反映しない
+                                       this._単画チップを1つ描画する(
+                                               dr, 
+                                               SSTFormat.レーン種別.Snare,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Snare_ClosedRim ) ], 
+                                               Ydpx,
+                                               1.0f );  // 音量は反映しない
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Snare_OpenRim "
+                               //----------------
                                case SSTFormat.チップ種別.Snare_OpenRim:
-                                       this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.Snare, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Snare_OpenRim ) ], Ydpx, 音量0to1 );
-                                       //this.単画チップを1つ描画する( dr, SSTFormat.レーン種別.Snare, this.チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Snare ) ], y, 音量0to1 ); → ないほうが見た目がいいかも。
+                                       this._単画チップを1つ描画する( 
+                                               dr,
+                                               SSTFormat.レーン種別.Snare,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Snare_OpenRim ) ], 
+                                               Ydpx,
+                                               音量0to1 );
+                                       // ↓ないほうがいいかも。
+                                       //this._単画チップを1つ描画する(
+                                       //      dr,
+                                       //      SSTFormat.レーン種別.Snare,
+                                       //      this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Snare ) ],
+                                       //      Ydpx,
+                                       //      音量0to1 ); 
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Snare_Ghost "
+                               //----------------
                                case SSTFormat.チップ種別.Snare_Ghost:
-                                       this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.Snare, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Snare_Ghost ) ], Ydpx, 1.0f );  // 音量は反映しない
+                                       this._単画チップを1つ描画する( 
+                                               dr, 
+                                               SSTFormat.レーン種別.Snare,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Snare_Ghost ) ], 
+                                               Ydpx,
+                                               1.0f );  // 音量は反映しない
                                        break;
+                               //----------------
+                               #endregion
 
+                               #region " Bass "
+                               //----------------
                                case SSTFormat.チップ種別.Bass:
-                                       this._アニメチップを1つ描画する( dr, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Bass ) ], SSTFormat.レーン種別.Bass, Ydpx, 音量0to1 );
+                                       this._アニメチップを1つ描画する(
+                                               dr,
+                                               SSTFormat.レーン種別.Bass,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Bass ) ],
+                                               Ydpx,
+                                               音量0to1 );
                                        break;
+                               //----------------
+                               #endregion
 
+                               #region " Tom1 "
+                               //----------------
                                case SSTFormat.チップ種別.Tom1:
-                                       this._アニメチップを1つ描画する( dr, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom1 ) ], SSTFormat.レーン種別.Tom1, Ydpx, 音量0to1 );
+                                       this._アニメチップを1つ描画する(
+                                               dr,
+                                               SSTFormat.レーン種別.Tom1,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom1 ) ], 
+                                               Ydpx,
+                                               音量0to1 );
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Tom1_Rim "
+                               //----------------
                                case SSTFormat.チップ種別.Tom1_Rim:
-                                       this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.Tom1, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom1_Rim ) ], Ydpx, 1.0f );  // 音量は反映しない
+                                       this._単画チップを1つ描画する(
+                                               dr, 
+                                               SSTFormat.レーン種別.Tom1, 
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom1_Rim ) ], 
+                                               Ydpx,
+                                               1.0f );  // 音量は反映しない
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Tom2 "
+                               //----------------
                                case SSTFormat.チップ種別.Tom2:
-                                       this._アニメチップを1つ描画する( dr, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom2 ) ], SSTFormat.レーン種別.Tom2, Ydpx, 音量0to1 );
+                                       this._アニメチップを1つ描画する( 
+                                               dr,
+                                               SSTFormat.レーン種別.Tom2,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom2 ) ], 
+                                               Ydpx,
+                                               音量0to1 );
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Tom2_Rim "
+                               //----------------
                                case SSTFormat.チップ種別.Tom2_Rim:
-                                       this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.Tom2, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom2_Rim ) ], Ydpx, 1.0f );  // 音量は反映しない
+                                       this._単画チップを1つ描画する( 
+                                               dr, 
+                                               SSTFormat.レーン種別.Tom2, 
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom2_Rim ) ],
+                                               Ydpx, 
+                                               1.0f );  // 音量は反映しない
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Tom3 "
+                               //----------------
                                case SSTFormat.チップ種別.Tom3:
-                                       this._アニメチップを1つ描画する( dr, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom3 ) ], SSTFormat.レーン種別.Tom3, Ydpx, 音量0to1 );
+                                       this._アニメチップを1つ描画する(
+                                               dr,
+                                               SSTFormat.レーン種別.Tom3,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom3 ) ], 
+                                               Ydpx, 
+                                               音量0to1 );
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Tom3_Rim "
+                               //----------------
                                case SSTFormat.チップ種別.Tom3_Rim:
-                                       this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.Tom3, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom3_Rim ) ], Ydpx, 1.0f );  // 音量は反映しない
+                                       this._単画チップを1つ描画する(
+                                               dr,
+                                               SSTFormat.レーン種別.Tom3,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.Tom3_Rim ) ], 
+                                               Ydpx,
+                                               1.0f );  // 音量は反映しない
                                        break;
+                               //----------------
+                               #endregion
 
+                               #region " RightCrash "
+                               //----------------
                                case SSTFormat.チップ種別.RightCrash:
-                                       this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.RightCrash, this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.RightCrash ) ], Ydpx, 音量0to1 );
+                                       this._単画チップを1つ描画する( 
+                                               dr, 
+                                               SSTFormat.レーン種別.RightCrash,
+                                               this._チップ画像の矩形リスト[ nameof( SSTFormat.チップ種別.RightCrash ) ],
+                                               Ydpx,
+                                               音量0to1 );
                                        break;
+                               //----------------
+                               #endregion
 
+                               #region " China "
+                               //----------------
                                case SSTFormat.チップ種別.China:
                                        if( StrokeStyleT.ユーザ管理.現在選択されているユーザ.Chinaは左 )
-                                               this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.LeftCrash, this._チップ画像の矩形リスト[ "LeftChina" ], Ydpx, 音量0to1 );
+                                       {
+                                               this._単画チップを1つ描画する(
+                                                       dr,
+                                                       SSTFormat.レーン種別.LeftCrash,
+                                                       this._チップ画像の矩形リスト[ "LeftChina" ],
+                                                       Ydpx,
+                                                       音量0to1 );
+                                       }
                                        else
-                                               this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.RightCrash, this._チップ画像の矩形リスト[ "RightChina" ], Ydpx, 音量0to1 );
+                                       {
+                                               this._単画チップを1つ描画する( 
+                                                       dr, 
+                                                       SSTFormat.レーン種別.RightCrash, 
+                                                       this._チップ画像の矩形リスト[ "RightChina" ],
+                                                       Ydpx,
+                                                       音量0to1 );
+                                       }
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Ride "
+                               //----------------
                                case SSTFormat.チップ種別.Ride:
                                        if( StrokeStyleT.ユーザ管理.現在選択されているユーザ.Rideは左 )
-                                               this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.LeftCrash, this._チップ画像の矩形リスト[ "LeftRide" ], Ydpx, 音量0to1 );
+                                       {
+                                               this._単画チップを1つ描画する(
+                                                       dr,
+                                                       SSTFormat.レーン種別.LeftCrash,
+                                                       this._チップ画像の矩形リスト[ "LeftRide" ],
+                                                       Ydpx,
+                                                       音量0to1 );
+                                       }
                                        else
-                                               this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.RightCrash, this._チップ画像の矩形リスト[ "RightRide" ], Ydpx, 音量0to1 );
+                                       {
+                                               this._単画チップを1つ描画する(
+                                                       dr,
+                                                       SSTFormat.レーン種別.RightCrash,
+                                                       this._チップ画像の矩形リスト[ "RightRide" ], 
+                                                       Ydpx, 
+                                                       音量0to1 );
+                                       }
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Ride_Cup "
+                               //----------------
                                case SSTFormat.チップ種別.Ride_Cup:
                                        if( StrokeStyleT.ユーザ管理.現在選択されているユーザ.Rideは左 )
-                                               this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.LeftCrash, this._チップ画像の矩形リスト[ "LeftRide_Cup" ], Ydpx, 音量0to1 );
+                                       {
+                                               this._単画チップを1つ描画する(
+                                                       dr,
+                                                       SSTFormat.レーン種別.LeftCrash,
+                                                       this._チップ画像の矩形リスト[ "LeftRide_Cup" ],
+                                                       Ydpx,
+                                                       音量0to1 );
+                                       }
                                        else
-                                               this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.RightCrash, this._チップ画像の矩形リスト[ "RightRide_Cup" ], Ydpx, 音量0to1 );
+                                       {
+                                               this._単画チップを1つ描画する( 
+                                                       dr, 
+                                                       SSTFormat.レーン種別.RightCrash, 
+                                                       this._チップ画像の矩形リスト[ "RightRide_Cup" ], 
+                                                       Ydpx,
+                                                       音量0to1 );
+                                       }
                                        break;
-
+                               //----------------
+                               #endregion
+                               #region " Splash "
+                               //----------------
                                case SSTFormat.チップ種別.Splash:
                                        if( StrokeStyleT.ユーザ管理.現在選択されているユーザ.Splashは左 )
-                                               this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.LeftCrash, this._チップ画像の矩形リスト[ "LeftSplash" ], Ydpx, 音量0to1 );
+                                       {
+                                               this._単画チップを1つ描画する(
+                                                       dr,
+                                                       SSTFormat.レーン種別.LeftCrash,
+                                                       this._チップ画像の矩形リスト[ "LeftSplash" ],
+                                                       Ydpx,
+                                                       音量0to1 );
+                                       }
                                        else
-                                               this._単画チップを1つ描画する( dr, SSTFormat.レーン種別.RightCrash, this._チップ画像の矩形リスト[ "RightSplash" ], Ydpx, 音量0to1 );
+                                       {
+                                               this._単画チップを1つ描画する( 
+                                                       dr,
+                                                       SSTFormat.レーン種別.RightCrash,
+                                                       this._チップ画像の矩形リスト[ "RightSplash" ],
+                                                       Ydpx, 
+                                                       音量0to1 );
+                                       }
+                                       break;
+                               //----------------
+                               #endregion
+
+                               #region " LeftCymbal_Mute "
+                               //----------------
+                               case SSTFormat.チップ種別.LeftCymbal_Mute:
+                                       this._単画チップを1つ描画する(
+                                               dr,
+                                               SSTFormat.レーン種別.LeftCrash,
+                                               this._チップ画像の矩形リスト[ "LeftCymbal_Mute" ],
+                                               Ydpx,
+                                               1.0f ); // 音量は反映しない
                                        break;
+                               //----------------
+                               #endregion
+                               #region " RightCymbal_Mute "
+                               //----------------
+                               case SSTFormat.チップ種別.RightCymbal_Mute:
+                                       this._単画チップを1つ描画する(
+                                               dr,
+                                               SSTFormat.レーン種別.RightCrash,
+                                               this._チップ画像の矩形リスト[ "RightCymbal_Mute" ],
+                                               Ydpx,
+                                               1.0f ); // 音量は反映しない
+                                       break;
+                               //----------------
+                               #endregion
                        }
                }
 
-               private void _アニメチップを1つ描画する( デバイスリソース dr, SharpDX.RectangleF? 画像範囲orNull, SSTFormat.レーン種別 elane, float Ydpx, float 音量0to1 )
+               private void _アニメチップを1つ描画する( デバイスリソース dr, SSTFormat.レーン種別 elane, SharpDX.RectangleF? 画像範囲orNull, float Ydpx, float 音量0to1 )
                {
                        if( null == 画像範囲orNull )
                                return;
index 8fcb6ef..4346613 100644 (file)
@@ -7,6 +7,7 @@ namespace SST.ステージ.演奏
 {
        /// <summary>
        ///             SSTFormat.チップ種別 の拡張メソッド。
+       ///             このプロジェクトだけが追加で必要とする機能を定義。
        /// </summary>
        static class チップ種別Extensions
        {
@@ -109,15 +110,39 @@ namespace SST.ステージ.演奏
                /// </returns>
                public static int 排他発声グループID( this SSTFormat.チップ種別 チップ種別 )
                {
-                       // 今のところ、排他発声を行うのはハイハット系のみ。
+                       const int GID_HIHAT = 1;
+                       const int GID_LEFT_CYMBAL = 2;
+                       const int GID_RIGHT_CYMBAL = 3;
+
+                       var ユーザ設定 = StrokeStyleT.ユーザ管理.現在選択されているユーザ;
+
                        switch( チップ種別 )
                        {
                                case SSTFormat.チップ種別.HiHat_Close:
                                case SSTFormat.チップ種別.HiHat_Foot:
                                case SSTFormat.チップ種別.HiHat_HalfOpen:
                                case SSTFormat.チップ種別.HiHat_Open:
-                                       return 1;
+                                       return GID_HIHAT;
+
+                               case SSTFormat.チップ種別.LeftCrash:
+                               case SSTFormat.チップ種別.LeftCymbal_Mute:
+                                       return GID_LEFT_CYMBAL;
+
+                               case SSTFormat.チップ種別.RightCrash:
+                               case SSTFormat.チップ種別.RightCymbal_Mute:
+                                       return GID_RIGHT_CYMBAL;
+
+                               case SSTFormat.チップ種別.China:
+                                       return ( ユーザ設定.Chinaは左 ) ? GID_LEFT_CYMBAL : GID_RIGHT_CYMBAL;
+
+                               case SSTFormat.チップ種別.Splash:
+                                       return ( ユーザ設定.Splashは左 ) ? GID_LEFT_CYMBAL : GID_RIGHT_CYMBAL;
+
+                               case SSTFormat.チップ種別.Ride:
+                               case SSTFormat.チップ種別.Ride_Cup:
+                                       return ( ユーザ設定.Rideは左 ) ? GID_LEFT_CYMBAL : GID_RIGHT_CYMBAL;
                        }
+
                        return 0;
                }
        }