private void button1_Click(object sender, RoutedEventArgs e) { settings.IsProcessing = true; progBarMessage.Visibility = Visibility.Visible; settings.StartEnabled = false; settings.ProcessEnabled = false; var calculate = Task.Factory.StartNew(() => { prgrs.Report(0); audioFile = new AudioFileReader(settings.InputFile); audioFile.ToStereo(); var n = audioFile.Length / (audioFile.WaveFormat.BitsPerSample / 8) / audioFile.WaveFormat.Channels; var outFormat = new WaveFormat(settings.SampleRate, 2); ISampleProvider wave; using (var resampler = new MediaFoundationResampler(audioFile, outFormat)) { wave = resampler.ToSampleProvider(); } //MessageBox.Show(audioFile.WaveFormat.Channels.ToString()); //audioFile.ToMono(); //audioFile.ToStereo(); var bits = wave.WaveFormat.BitsPerSample; var Fs = wave.WaveFormat.SampleRate; //MessageBox.Show(Fs.ToString()); var channels = wave.WaveFormat.Channels; //string outpath = @"E:\states.dat"; string outwav = settings.OutputFile; float FS = settings.SampleRate; prgrs.Report(10); Thread.Sleep(200); using (WaveFileWriter outWavFile = new WaveFileWriter(outwav, new WaveFormat((int)FS, 16, 2))) { float period = settings.Period; // ms double fullPath = period; int bb = 0; int i = 0; bool mode = false; do { if (i % 1000 == 0) { prgrs.Report((int)(i / (float)n * 100 * 0.9f + 10f)); } float[] samples = new float[2]; bb = wave.Read(samples, 0, samples.Length); var leftVal = samples[0]; var rightVal = samples[1]; var curPath = (i * 1000f / FS); if (curPath >= fullPath) { mode = !mode; fullPath = fullPath + period; } if (mode == true) { leftVal = 0; } else { rightVal = 0; } //writer.Write(leftVal); //writer.Write(rightVal); outWavFile.WriteSample(leftVal); outWavFile.WriteSample(rightVal); i++; } while (bb > 0); prgrs.Report(95); //writer.Flush(); //writer.Close(); outWavFile.Flush(); prgrs.Report(100); outWavFile.Close(); } //outputDevice.Init(audioFile); }); calculate.GetAwaiter().OnCompleted(() => { settings.IsProcessing = false; progBarMessage.Visibility = Visibility.Hidden; settings.StartEnabled = true; settings.ProcessEnabled = true; MessageBox.Show("Готово!"); prgrs.Report(0); }); }