Example #1
0
        public OrderSound(string message, float Depth, float Frequency, float Feedback, float WetDryMix, float ReverbTime, float HighFrequencyRTRatio)
        {
            Thread theRT = new Thread(delegate()
            {
                {
                    m_AudioStream = new MemoryStream();
                    using (SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer())
                    {
                        speechSynthesizer.SelectVoiceByHints(VoiceGender.Female, VoiceAge.Child);
                        speechSynthesizer.Rate = Rate;
                        speechSynthesizer.SetOutputToWaveStream(m_AudioStream);
                        speechSynthesizer.SpeakCompleted += new EventHandler <SpeakCompletedEventArgs>(WriteCompleate);
                        speechSynthesizer.SpeakAsync(message);
                        state = SOUNDSTATE.FORMING;
                        manualReset.WaitOne();
                        state = SOUNDSTATE.READY;
                        m_AudioStream.Seek(0, SeekOrigin.Begin);
                        flanger = new FlangerEffect(GetSoundSource(m_AudioStream))
                        {
                            Depth     = Depth,
                            Frequency = Frequency,
                            Feedback  = Feedback,
                            WetDryMix = WetDryMix
                        };
                        rev = new DmoWavesReverbEffect(flanger.ToStereo())
                        {
                            ReverbTime           = ReverbTime,
                            HighFrequencyRTRatio = HighFrequencyRTRatio
                        };
                        rev.WriteToWaveStream(m_AudioStream2);
                        soundOut = GetSoundOut();
                        soundOut.Initialize(GetSoundSource(m_AudioStream2));
                        soundOut.Volume   = 1;
                        soundOut.Stopped += DonePlaying;
                        soundOut.Play();

                        state = SOUNDSTATE.PLAYING;
                        manualReset.WaitOne();
                    }
                }
            })
            {
                IsBackground = true
            };

            theRT.Start();
        }