コード例 #1
0
        /**
         * Play the given stream with given id
         * @param id of the stream
         * @param stream the generated tts
         * @param async boolean true/false
         * @param format int FORMAT_WAV or FORMAT_MP3
         */
        public void PlayWAV(String id, Stream stream, bool async)
        {
            var state = new SpeakerState(id, speakerTimeout);

            SpeakerStates[id] = state;
            PlayWAV(stream, async, state);
        }
コード例 #2
0
 private void Play(WaveStream stream, bool async, SpeakerState state)
 {
     if (async)
     {
         Task.Factory.StartNew(() => Play(stream, state));
         return;
     }
     Play(stream, state);
 }
コード例 #3
0
        private void PlayWAV(Stream stream, bool async, SpeakerState state)
        {
            var memory = new MemoryStream();

            stream.Position = 0;
            stream.CopyTo(memory);

            memory.Position = 0;
            var wav = WaveFormatConversionStream.CreatePcmStream(new WaveFileReader(memory));

            Play(wav, async, state);
        }
コード例 #4
0
        private void Play(WaveStream stream, SpeakerState state)
        {
            // Stop all stream from playing for 1s
            if (DateTime.Now - StopTimeout < TimeSpan.FromMilliseconds(1000))
            {
                Log("Stop next speech");
                state.playing = false;
                stream.Dispose();
                return;
            }

            state.start = DateTime.Now;
            using (WaveChannel32 volume = new WaveChannel32(stream)) {
                try {
                    volume.Volume = speakerVol / 100f;

                    // Blank dummy Audio
                    float delay = speakerDelay / 1000f;
                    if (delay > 0)
                    {
                        OffsetSampleProvider osp = new OffsetSampleProvider(volume.ToSampleProvider());
                        osp.DelayBySamples = (int)(osp.WaveFormat.SampleRate * delay) * osp.WaveFormat.Channels;
                        waveOut.Init(osp);
                    }
                    else
                    {
                        waveOut.Init(volume);
                    }

                    waveOut.Play();
                    while (stream.CurrentTime < stream.TotalTime && (DateTime.Now - state.start) < state.timeout)
                    {
                        Thread.Sleep(500);
                    }
                    waveOut.Stop();
                    state.playing = false;
                }
                catch (Exception ex) { Log("Error while using WaveOut: " + ex.Message); }
            }
            stream.Dispose();
        }
コード例 #5
0
        /**
         * Play the given file path
         * @param path the file to play
         * @param async boolean true/false
         */
        public void Play(String path, bool async)
        {
            var id = path;

            if (!File.Exists(path))
            {
                return;
            }

            int format = path.ToLower().EndsWith(".wav") || path.ToLower().EndsWith(".wma") ? FORMAT_WAV : FORMAT_MP3;

            if (format == FORMAT_WAV)
            {
                using (var stream = new FileStream(path, FileMode.Open)) {
                    PlayWAV(id, stream, async);
                }
            }
            else
            {
                var stream = (WaveStream) new Mp3FileReader(path);
                SpeakerStates[id] = new SpeakerState(id, speakerTimeout);
                Play(stream, SpeakerStates[id]);
            }
        }