public void BufferWave( string file, float volume) { lock (WaveBuffer) { var key = GetBufferKey(file, volume); WaveBuffer[key] = new WaveDataContainer(ReadWaveSamples(file, volume)); } }
public static void LoadTTSHistory() { var file = TTSHistoryFileName; if (!File.Exists(file)) { return; } lock (WaveBuffer) { var lines = File.ReadAllLines(file, new UTF8Encoding(false)); foreach (var line in lines) { var values = line.Split('\t'); if (values.Length < 2) { continue; } var key = values[0]; if (!DateTime.TryParse(values[1], out DateTime timestamp)) { continue; } var keySplits = key.Split('-'); if (keySplits.Length < 2) { continue; } var waveFile = keySplits[0]; if (!File.Exists(waveFile)) { continue; } WaveBuffer[key] = new WaveDataContainer() { LastAccessTimestamp = timestamp }; } } }
public int BufferWaves( IEnumerable <string> files, float volume) { var count = 0; lock (WaveBuffer) { foreach (var file in files) { var key = GetBufferKey(file, volume); if (WaveBuffer.ContainsKey(key)) { var container = WaveBuffer[key]; if ((DateTime.Now - container.LastAccessTimestamp) <= CacheToloadScope) { container.Samples = ReadWaveSamples(file, volume); count++; Thread.Yield(); } } else { WaveBuffer[key] = new WaveDataContainer(ReadWaveSamples(file, volume)) { LastAccessTimestamp = DateTime.MinValue }; count++; Thread.Yield(); } } } return(count); }
public void Play( string file, float volume = 1.0f, bool sync = false) { if (!File.Exists(file)) { return; } var buffer = default(BufferedWaveProvider); var config = Config.Instance; if (!sync) { lock (this) { buffer = this.Buffers[this.CurrentPlayerIndex]; this.CurrentPlayerIndex++; if (this.CurrentPlayerIndex >= config.WasapiMultiplePlaybackCount) { this.CurrentPlayerIndex = 0; } } } else { buffer = this.Buffers[config.WasapiMultiplePlaybackCount]; } if (buffer == null) { return; } var samples = default(byte[]); var key = GetBufferKey(file, volume); lock (WaveBuffer) { if (WaveBuffer.ContainsKey(key)) { var wave = WaveBuffer[key]; if (wave.Samples.Length > 0) { samples = wave.Samples; wave.LastAccessTimestamp = DateTime.Now; } } if (samples == null || samples.Length <= 0) { samples = ReadWaveSamples(file, volume); WaveBuffer[key] = new WaveDataContainer(ReadWaveSamples(file, volume)); } } buffer.AddSamples( samples, 0, samples.Length); #if DEBUG System.Diagnostics.Debug.WriteLine($"WASAPI(Buffered) Play: {file}"); #endif }