Exemple #1
0
        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);
            });
        }