Beispiel #1
0
        /// <summary>
        ///		指定した番号のWAVを、指定したチップ種別として発声する。
        /// </summary>
        /// <param name="音量">0:無音~1:原音</param>
        public void 発声する(int WAV番号, チップ種別 chipType, bool 発声前に消音する, 消音グループ種別 muteGroupType, bool BGM以外も再生する, float 音量 = 1f, double 再生開始時刻sec = 0.0)
        {
            if (!(this._WAV情報リスト.ContainsKey(WAV番号)) ||
                (!(BGM以外も再生する) && !(this._WAV情報リスト[WAV番号].BGMである)))
            {
                return;
            }


            // 消音する(必要あれば)。

            if (発声前に消音する && muteGroupType != 消音グループ種別.Unknown)
            {
                // 発生時に指定された消音グループ種別に属するWAVサウンドをすべて停止する。
                var 停止するWavContexts = this._WAV情報リスト.Where((kvp) => (kvp.Value.最後に発声したときの消音グループ種別 == muteGroupType));

                foreach (var kvp in 停止するWavContexts)
                {
                    kvp.Value.発声を停止する();
                }
            }


            // 発声する。

            this._WAV情報リスト[WAV番号].発声する(muteGroupType, 音量, 再生開始時刻sec);
        }
 public ドラムサウンドコンテキスト(ISampleSource sampleSource, int 多重度 = 4)
 {
     this._多重度               = 多重度;
     this.SampleSource       = sampleSource;
     this.Sounds             = new Sound[多重度];
     this.最後に発声したときの消音グループ種別 = 消音グループ種別.Unknown;
 }
Beispiel #3
0
            /// <summary>
            ///		指定したチップ種別扱いでWAVサウンドを発声する。
            /// </summary>
            /// <param name="音量">0:無音~1:原音</param>
            public void 発声する(消音グループ種別 muteGroupType, float 音量, double 再生開始時刻sec = 0.0)
            {
                this.最後に発声したときの消音グループ種別 = muteGroupType;

                // 発声。
                音量 =
                    (0f > 音量) ? 0f :
                    (1f < 音量) ? 1f : 音量;
                this.Sounds[this._次に再生するSound番号].Volume = 音量;
                this.Sounds[this._次に再生するSound番号].Play(再生開始時刻sec);

                // サウンドローテーション。
                this._次に再生するSound番号 = (this._次に再生するSound番号 + 1) % this.Sounds.Length;
            }
            public void 発声する(消音グループ種別 type, float 音量)
            {
                this.最後に発声したときの消音グループ種別 = type;

                // サウンドを再生する。
                if (null != this.Sounds[this._次に再生するSound番号])
                {
                    this.Sounds[this._次に再生するSound番号].Volume =
                        (0f > 音量) ? 0f :
                        (1f < 音量) ? 1f : 音量;
                    this.Sounds[this._次に再生するSound番号].Play();
                }

                // サウンドローテーション。
                this._次に再生するSound番号 = (this._次に再生するSound番号 + 1) % this._多重度;
            }
Beispiel #5
0
            /// <summary>
            ///		指定したチップ種別扱いでWAVサウンドを発声する。
            /// </summary>
            /// <param name="音量">0:無音~1:原音</param>
            public void 発声する(消音グループ種別 muteGroupType, float 音量, double 再生開始時刻sec = 0.0)
            {
                var sound = this.Sounds[this._次に再生するSound番号];

                if (sound.Length <= 再生開始時刻sec)
                {
                    return; // 再生範囲外なので無視
                }
                this.最後に発声したときの消音グループ種別 = muteGroupType;

                // 発声。
                sound.Volume = Math.Clamp(音量, min: 0f, max: 1f);
                sound.Play(再生開始時刻sec);

                // サウンドローテーション。
                this._現在再生中のSound番号 = this._次に再生するSound番号;
                this._次に再生するSound番号 = (this._次に再生するSound番号 + 1) % this.Sounds.Length;
            }
Beispiel #6
0
        /// <summary>
        ///		指定した番号のWAVを、指定したチップ種別として発声する。
        /// </summary>
        /// <param name="音量">0:無音~1:原音</param>
        public void 発声する(int WAV番号, bool 発声前に消音する, 消音グループ種別 muteGroupType, bool BGM以外も再生する, float 音量 = 1f, double 再生開始時刻sec = 0.0)
        {
            if (!(this._WAV情報リスト.ContainsKey(WAV番号)))
            {
                return; // 未使用のWAV番号は無視。
            }
            if (!(BGM以外も再生する) && !(this._WAV情報リスト[WAV番号].BGMである))
            {
                return; // BGM以外を再生しない場合、BGM以外のWAV番号は無視。
            }
            // 指定があれば消音する。

            if (発声前に消音する && muteGroupType != 消音グループ種別.Unknown)
            {
                // 発声時に指定された消音グループ種別に属するWAVサウンドをすべて停止する。
                var 停止するWavContexts = this._WAV情報リスト
                                      .Where((kvp) => (kvp.Value.最後に発声したときの消音グループ種別 == muteGroupType));

                foreach (var kvp in 停止するWavContexts)
                {
                    kvp.Value.発声を停止する();
                }
            }


            // 発声する。

            if (this._WAV情報リスト[WAV番号].BGMである)
            {
                // BGM なら BGMAdjust を適用する。
                再生開始時刻sec += Global.App.演奏譜面.譜面.BGMAdjust / 1000.0;
                再生開始時刻sec  = Math.Max(0.0, 再生開始時刻sec);
            }

            this._WAV情報リスト[WAV番号].発声する(muteGroupType, 音量, 再生開始時刻sec);
        }
Beispiel #7
0
        /// <summary>
        ///     指定したチップ種別・サブチップIDの組に対応するドラムサウンドを再生する。
        /// </summary>
        /// <remarks>
        ///     <paramref name="発声前に消音する"/> を true にすると、ドラムサウンドは多重再生されなくなる。
        ///     この場合、現在再生しているサウンドを停止(消音)してから再生することになるが、
        ///     <paramref name="消音グループ種別"/> で指定されたグループ種別と同じグループ種別に属する
        ///     ドラムサウンドが停止の対象となる。
        /// </remarks>
        public void 発声する(チップ種別 chipType, int subChipId, bool 発声前に消音する = false, 消音グループ種別 消音グループ種別 = 消音グループ種別.Unknown, float 音量0to1 = 1f)
        {
            lock (this._Sound利用権)
            {
                if (this._チップtoコンテキスト.TryGetValue((chipType, subChipId), out ドラムサウンド情報 context))
                {
                    // 必要あれば消音する。
                    if (発声前に消音する && 消音グループ種別 != 消音グループ種別.Unknown)
                    {
                        // 指定された消音グループ種別に属するドラムサウンドをすべて停止する。
                        var 停止するSoundContexts = this._チップtoコンテキスト.Where((kvp) => (kvp.Value.最後に発声したときの消音グループ種別 == 消音グループ種別));

                        foreach (var wavContext in 停止するSoundContexts)
                        {
                            foreach (var sound in wavContext.Value.Sounds)
                            {
                                sound.Stop();
                            }
                        }
                    }

                    // 発声する。
                    context.発声する(消音グループ種別, 音量0to1);
                }