/// <summary> /// 指定した番号のWAVを、指定したチップ種別として発声する。 /// </summary> /// <param name="音量">0:無音~1:原音</param> public void 発声する(int WAV番号, チップ種別 chipType, float 音量 = 1f) { if (!(this._WavContexts.ContainsKey(WAV番号))) { return; } // 現在発声中のサウンドを全部止めるチップ種別の場合は止める。 if (0 != chipType.排他発声グループID()) // グループID = 0 は対象外。 { // 消音対象のコンテキストの Sounds[] を select する。 var 停止するサウンドs = from kvp in this._WavContexts where (chipType.直前のチップを消音する(kvp.Value.最後に発声したときのチップ種別)) select kvp.Value.Sounds; // 集めた Sounds[] をすべて停止する。 foreach (var sounds in 停止するサウンドs) { foreach (var sound in sounds) { sound.Stop(); } } } // 発声する。 this._WavContexts[WAV番号].発声する(chipType, 音量); }
public static bool 直前のチップを消音する(this チップ種別 今回のチップの種別, チップ種別 直前のチップの種別) { int 今回のチップのGID = 今回のチップの種別.排他発声グループID(); int 直前のチップのGID = 直前のチップの種別.排他発声グループID(); if (直前のチップのGID != 今回のチップのGID) { return(false); } // 以下は、消音する。 if ((今回のチップの種別 == チップ種別.SE1) || (今回のチップの種別 == チップ種別.SE2) || (今回のチップの種別 == チップ種別.SE3) || (今回のチップの種別 == チップ種別.SE4) || (今回のチップの種別 == チップ種別.SE5) || //( 今回のチップの種別 == チップ種別.BGM ) || BGM は消音しない。(DTX仕様) (今回のチップの種別 == チップ種別.GuitarAuto) || (今回のチップの種別 == チップ種別.BassAuto)) { return(true); } // グループIDがシンバルである場合は、Mute が来た場合を除き、消音しない。 if (直前のチップのGID == GID_LEFT_CYMBAL) { return(今回のチップの種別 == チップ種別.LeftCymbal_Mute); } if (直前のチップのGID == GID_RIGHT_CYMBAL) { return(今回のチップの種別 == チップ種別.RightCymbal_Mute); } return(true); }