示例#1
0
        /// <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);
        }