From 0ef97f777940f3f4581bf1590113cd7eb27236cc Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E3=81=8F=E3=81=BE=E3=81=8B=E3=81=BF=E5=B7=A5=E6=88=BF?= Date: Sat, 26 Nov 2016 18:04:10 +0900 Subject: [PATCH] =?utf8?q?=E3=82=B7=E3=83=B3=E3=83=90=E3=83=AB=E3=83=9F?= =?utf8?q?=E3=83=A5=E3=83=BC=E3=83=88=E3=83=81=E3=83=83=E3=83=97=E3=82=92?= =?utf8?q?=E5=AE=9F=E8=A3=85=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- FDK24/メディア/サウンド/WASAPI/Sound.cs | 18 +- SSTFEditor/メインフォーム.cs | 2 + SSTFEditor/譜面/C譜面.cs | 10 +- SSTFormat/スコア.cs | 84 ++++-- StrokeStyleT/StrokeStyleT.csproj | 6 + StrokeStyleT/sounds/Kit.xml | 2 + StrokeStyleT/sounds/drums/LeftCymbalMute.wav | Bin 0 -> 184506 bytes StrokeStyleT/sounds/drums/RightCymbalMute.wav | Bin 0 -> 176314 bytes .../ステージ/演奏/スクロール譜面.cs | 333 ++++++++++++++++++--- .../演奏/チップ種別Extensions.cs | 29 +- 10 files changed, 412 insertions(+), 72 deletions(-) create mode 100644 StrokeStyleT/sounds/drums/LeftCymbalMute.wav create mode 100644 StrokeStyleT/sounds/drums/RightCymbalMute.wav diff --git a/FDK24/メディア/サウンド/WASAPI/Sound.cs b/FDK24/メディア/サウンド/WASAPI/Sound.cs index 722c03e..30efec7 100644 --- a/FDK24/メディア/サウンド/WASAPI/Sound.cs +++ b/FDK24/メディア/サウンド/WASAPI/Sound.cs @@ -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; diff --git a/SSTFEditor/メインフォーム.cs b/SSTFEditor/メインフォーム.cs index ea58eac..4a33730 100644 --- a/SSTFEditor/メインフォーム.cs +++ b/SSTFEditor/メインフォーム.cs @@ -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.チップ種別.背景動画, "" }, diff --git a/SSTFEditor/譜面/C譜面.cs b/SSTFEditor/譜面/C譜面.cs index cf24868..2259f61 100644 --- a/SSTFEditor/譜面/C譜面.cs +++ b/SSTFEditor/譜面/C譜面.cs @@ -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.チップ種別.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 ) }, diff --git a/SSTFormat/スコア.cs b/SSTFormat/スコア.cs index 7d63d4c..3d08fee 100644 --- a/SSTFormat/スコア.cs +++ b/SSTFormat/スコア.cs @@ -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 } /// - /// 現在の スコア の内容をデータファイル(*.sstf)に書き出す。 + /// 現在の スコア の内容をデータファイル(*.sstf)に書き出す。 /// /// - /// 小節線、拍線、Unknown チップは出力しない。 - /// 失敗すれば何らかの例外を発出する。 + /// 小節線、拍線、Unknown チップは出力しない。 + /// 失敗すれば何らかの例外を発出する。 /// 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; diff --git a/StrokeStyleT/StrokeStyleT.csproj b/StrokeStyleT/StrokeStyleT.csproj index c808c18..87c9c6d 100644 --- a/StrokeStyleT/StrokeStyleT.csproj +++ b/StrokeStyleT/StrokeStyleT.csproj @@ -409,6 +409,12 @@ PreserveNewest + + PreserveNewest + + + PreserveNewest +