Ejemplo n.º 1
0
        /// <summary>
        /// Пункт конвертации в стерео
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void конвертацияВСтереоToolStripMenuItem_Click(object sender, EventArgs e)
        {
            StopAud();
            SaveFileDialog save = new SaveFileDialog();

            save.InitialDirectory = "C:\\";
            save.Filter           = "wav files (*.wav)|*.wav";
            save.FilterIndex      = 1;
            save.Title            = "Сохранить файл";
            if (save.ShowDialog() == DialogResult.Cancel)
            {
                return;
            }
            string filename = save.FileName;

            if (filename != null)
            {
                using (var inputReader = new AudioFileReader(rfname))
                {
                    var stereo = new MonoToStereoSampleProvider(inputReader);
                    WaveFileWriter.CreateWaveFile16(filename, stereo);
                }
                MessageBox.Show("Файл сохранен!");
            }
            else
            {
                System.Windows.Forms.MessageBox.Show("Не выбран путь сохранения!", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Ejemplo n.º 2
0
        public void AddSource(ISampleProvider source, TimeSpan delayBy)
        {
            ISampleProvider _source;

            if (source == null || source.WaveFormat == null)
            {
                return;
            }
            if (source.WaveFormat.Channels == 1)
            {
                _source = new MonoToStereoSampleProvider(source);
            }
            else if (source.WaveFormat.Channels == 2)
            {
                _source = source;
            }
            else
            {
                return;
            }
            mix.AddMixerInput(new OffsetSampleProvider(_source)
            {
                DelayBy = delayBy
            });
        }
Ejemplo n.º 3
0
        string micAdd()
        {
            string          ret = "";
            ISampleProvider micProv;

            if (micVol != null && micVol.OK())
            {
                return("");
            }

            if (settings.devMic != null && settings.devMic.mm != null)
            {
                Logger.mix.a("create mic");
                micCap = new WasapiCapture(settings.devMic.mm);
                micCap.DataAvailable += micDev_DataAvailable_03;
                micIn = new BufferedWaveProvider(micCap.WaveFormat);
                if (micCap.WaveFormat.SampleRate != settings.samplerate)
                {
                    Logger.mix.a("create mic resampler");
                    micRe = new MediaFoundationResampler(micIn, settings.samplerate);
                    micRe.ResamplerQuality = 60;
                    ret += "Incorrect samplerate on microphone device, resampling\n" +
                           settings.devMic.mm.DeviceFriendlyName + "\n" +
                           settings.devMic.mm.FriendlyName + "\n" +
                           settings.devMic.id + "\n" +
                           LSDevice.stringer(settings.devMic.wf) + "\n" +
                           LSDevice.stringer(micCap.WaveFormat) + "\n\n";
                }
                micProv = new WaveToSampleProvider((IWaveProvider)micRe ?? (IWaveProvider)micIn);
                if (micCap.WaveFormat.Channels == 1)
                {
                    Logger.mix.a("mic mono2stereo");
                    micProv = new MonoToStereoSampleProvider(micProv);
                }
                else if (settings.micLeft != settings.micRight)
                {
                    Logger.mix.a("mic chanselector");
                    micProv = new NPatch.ChannelSelector(micProv, settings.micLeft ? 0 : 1);
                }
                if (settings.reverbP > 0)
                {
                    micProv = new NPatch.Reverb(micProv);
                }

                micVol.SetSource(micProv);
                mixa.AddMixerInput(micVol);
                Logger.mix.a("mic done");
            }
            else
            {
                Logger.mix.a("mic skipped");
            }
            return(ret);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Initialises a new instance of SampleChannel
        /// </summary>
        /// <param name="waveProvider">Source wave provider, must be PCM or IEEE</param>
        /// <param name="forceStereo">force mono inputs to become stereo</param>
        public SampleChannel(IWaveProvider waveProvider, bool forceStereo)
        {
            ISampleProvider sampleProvider = SampleProviderConverters.ConvertWaveProviderIntoSampleProvider(waveProvider);

            if (sampleProvider.WaveFormat.Channels == 1 && forceStereo)
            {
                sampleProvider = new MonoToStereoSampleProvider(sampleProvider);
            }
            this.waveFormat = sampleProvider.WaveFormat;
            // let's put the meter before the volume (useful for drawing waveforms)
            this.preVolumeMeter = new MeteringSampleProvider(sampleProvider);
            this.volumeProvider = new VolumeSampleProvider(preVolumeMeter);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Converts to stereo.
        /// </summary>
        /// <param name="monoFilePath">The mono file path.</param>
        /// <returns>System.String.</returns>
        public static string ConvertToStereo(string monoFilePath)
        {
            var outputFilePath = monoFilePath.Substring(0, monoFilePath.Length - 4) + monoFilePath.Substring(monoFilePath.Length - 4).Replace(".wav", $"-{STEREO}.wav");

            using (var inputReader = new AudioFileReader(monoFilePath))
            {
                // convert our mono ISampleProvider to stereo
                var stereo = new MonoToStereoSampleProvider(inputReader);

                // write the stereo audio out to a WAV file
                WaveFileWriter.CreateWaveFile16(outputFilePath, stereo);
            }

            return(outputFilePath);
        }
Ejemplo n.º 6
0
        private void btn_stop_Click(object sender, EventArgs e)
        {
            if (output != null)
            {
                btn_stop.Enabled     = false;
                btn_pause.Enabled    = false;
                vsb_volumeL.Enabled  = false;
                vsb_volumeR.Enabled  = false;
                vsb_volumeM.Enabled  = false;
                trb_progress.Enabled = false;
                cb_controle.Enabled  = false;
                progressBar1.Value   = 0;
                progressBar2.Value   = 0;
                progressBar3.Value   = 0;
                progressBar4.Value   = 0;
                progressBar6.Value   = 0;
                progressBar7.Value   = 0;
                progressBar8.Value   = 0;
                btn_pause.Text       = "Play";
                lb_name.Text         = "";
                lb_length.Text       = "";
                trb_progress.Value   = 0;
                lb_decTime.Text      = "";

                if (output != null)
                {
                    if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing)
                    {
                        output.Stop();
                    }
                    output.Dispose();
                    output = null;
                }
                if (stream != null)
                {
                    stream.Dispose();
                    stream = null;
                }
                if (pitch != null)
                {
                    pitch = null;
                }
                if (stereo != null)
                {
                    stereo = null;
                }
            }
        }
Ejemplo n.º 7
0
        public SmartSample(MasterVolume volume, Sound sound, AudioFileReader reader)
        {
            _volume = volume;
            _sound  = sound;
            _reader = reader;

            var sampleProvider = ConvertWaveProviderIntoSampleProvider(_reader);

            if (sampleProvider.WaveFormat.Channels == 1)
            {
                sampleProvider = new MonoToStereoSampleProvider(sampleProvider);
            }
            WaveFormat      = sampleProvider.WaveFormat;
            _preVolumeMeter = new MeteringSampleProvider(sampleProvider);
            _volumeProvider = new VolumeSampleProvider(_preVolumeMeter);
        }
Ejemplo n.º 8
0
 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
 {
     if (output != null)
     {
         if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing)
         {
             output.Stop();
         }
         output.Dispose();
         output = null;
     }
     if (stream != null)
     {
         stream.Dispose();
         stream = null;
     }
     if (pitch != null)
     {
         pitch = null;
     }
     if (stereo != null)
     {
         stereo = null;
     }
     closing = true;
     if (capture != null && capture.CaptureState == NAudio.CoreAudioApi.CaptureState.Capturing)
     {
         capture.StopRecording();
     }
     if (wo != null)
     {
         if (wo.PlaybackState == PlaybackState.Playing)
         {
             wo.Stop();
         }
         wo.Dispose();
     }
     waveIn.StopRecording();
     writer?.Dispose();
     wo      = null;
     waveIn  = null;
     capture = null;
     writer  = null;
 }
Ejemplo n.º 9
0
        public EStimAudioDevice(DirectSoundDeviceInfo device, EstimParameters parameters)
        {
            Name = device.Description;

            _parameters = parameters;

            _generator           = new SineWaveProvider();
            _generator.Frequency = 600;

            _stereo             = new MonoToStereoSampleProvider(_generator);
            _stereo.LeftVolume  = 0f;
            _stereo.RightVolume = 0f;

            _soundOut = new DirectSoundOut(device.Guid);
            _soundOut.Init(_stereo);
            _soundOut.Play();

            MinDelayBetweenCommands = TimeSpan.Zero;
        }
 /// <summary>
 /// Converts between Stereo and Mono SampleProviders for 32 bit sampled audio
 /// </summary>
 /// <param name="input">The input 32 bit SampleProvider</param>
 /// <param name="toMono">True for mono audio, falses for stereo</param>
 /// <returns></returns>
 public ISampleProvider MonoStereoConvert32(ISampleProvider input, bool toMono)
 {
     if (toMono && input.WaveFormat.Channels != 1)
     {
         var stmp = new StereoToMonoSampleProvider(input);
         return(stmp);
     }
     else if (!toMono && input.WaveFormat.Channels != 2)
     {
         var mtsp = new MonoToStereoSampleProvider(input);
         mtsp.LeftVolume  = 0.7f;
         mtsp.RightVolume = 0.7f; //0.7 on each to avoid double loud
         return(mtsp);
     }
     else
     {
         return(input);
     }
 }
Ejemplo n.º 11
0
        static void Convert(
            string inputPath, out string intermediateChannelFormatPath, ChannelFormat?channelFormat,
            string outputDirectory, string outputFileName)
        {
            if (!channelFormat.HasValue)
            {
                intermediateChannelFormatPath = inputPath;
                return;
            }

            using (var reader = new AudioFileReader(inputPath))
            {
                var intermediateChannelFormatFileName = $"{outputFileName}-intermediate-channelformat.wav";
                intermediateChannelFormatPath = Path.Combine(outputDirectory, intermediateChannelFormatFileName);

                if (reader.WaveFormat.Channels == 2 && channelFormat.Value == ChannelFormat.Mono)
                {
                    var resampler = new StereoToMonoSampleProvider(reader)
                    {
                        LeftVolume  = 0,
                        RightVolume = 1
                    };
                    WaveFileWriter.CreateWaveFile16(intermediateChannelFormatPath, resampler);
                }
                else if (reader.WaveFormat.Channels == 1 && channelFormat.Value == ChannelFormat.Stereo)
                {
                    var resampler = new MonoToStereoSampleProvider(reader)
                    {
                        LeftVolume  = 0.5f,
                        RightVolume = 0.5f
                    };
                    WaveFileWriter.CreateWaveFile16(intermediateChannelFormatPath, resampler);
                }
                else
                {
                    // Do nothing, already same channel format
                    File.Copy(inputPath, intermediateChannelFormatPath, true);
                }
            }
        }
Ejemplo n.º 12
0
        private void btn_open_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();

            open.Filter = "MP3 File (*.mp3)|*.mp3|WAV File (*.wav)|*.wav";
            if (open.ShowDialog() != DialogResult.OK)
            {
                return;
            }

            output = new WaveOutEvent();
            stream = new AudioFileReader(open.FileName);
            pitch  = new SmbPitchShiftingSampleProvider(stream.ToSampleProvider());

            pitch.PitchFactor = 1;
            stereo            = new MonoToStereoSampleProvider(pitch.ToMono());

            output.Init(stereo);

            stereo.RightVolume = 0.5f;
            stereo.LeftVolume  = 0.5f;
            stream.Volume      = 0.5f;

            lb_name.Text    = open.SafeFileName;
            lb_length.Text  = stream.TotalTime.ToString().Remove(8);
            lb_length.Text += " sec.";
            lb_decTime.Text = stream.CurrentTime.ToString();

            btn_pause.Enabled    = true;
            btn_stop.Enabled     = true;
            vsb_volumeL.Enabled  = true;
            vsb_volumeM.Enabled  = true;
            vsb_volumeR.Enabled  = true;
            trb_progress.Enabled = true;
            cb_controle.Enabled  = true;

            trb_progress.Maximum = (int)stream.TotalTime.TotalSeconds;
        }
Ejemplo n.º 13
0
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Console.WriteLine("There is nothing to process...");
                Console.ReadLine();
            }
            else if (args.Length == 1 && (args[0] == "--create-equalizer"))
            {
                CreateEqualizerJson(equalizerFilename);

                Console.WriteLine("Done.");
                Console.ReadLine();
            }
            else
            {
                MediaFoundationApi.Startup();
                Directory.CreateDirectory(Path.Combine(Environment.CurrentDirectory, outputDir));

                ReadEqParams(equalizerFilename);
                CalcAdjustVolumeFromEq(eqParams);
                GetDelayValues();
                GetChannelsVolume();

                foreach (var arg in args)
                {
                    try
                    {
                        Console.WriteLine($"Loading file {Path.GetFileName(arg)}.");
                        var loadedAudio = LoadFile(arg);

                        var stereo = loadedAudio;
                        if (loadedAudio.WaveFormat.Channels != 2)
                        {
                            stereo = new MonoToStereoSampleProvider(loadedAudio);
                        }

                        if (volumeAdjustDB < 0)
                        {
                            stereo = new ChannelsVolumeSampleProvider(stereo)
                            {
                                LeftChannelVolumeInDB  = volumeAdjustDB,
                                RightChannelVolumeInDB = volumeAdjustDB
                            };
                        }

                        var resampled = stereo;
                        if (stereo.WaveFormat.SampleRate != 44100)
                        {
                            resampled = new WdlResamplingSampleProvider(stereo, 44100);
                        }

                        var processedAudio = ChannelsDelay(resampled, leftDelay, rightDelay);

                        processedAudio = eqParams == null ? processedAudio : EqualizeChannels(processedAudio);

                        processedAudio = leftVolumeDB == 0 && rightVolumeDB == 0 ? processedAudio : AdjustChannelsVolume(processedAudio);

                        SaveToMp3(Path.Combine(Environment.CurrentDirectory, outputDir, $"{Path.GetFileNameWithoutExtension(arg)}.mp3"),
                                  processedAudio);

                        Console.WriteLine("Success.");
                        Console.WriteLine("");
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine($"Error on file: {Path.GetFileName(arg)}. {ex.Message}");
                    }
                }
                Console.WriteLine("Done.");
                Console.ReadLine();
            }
        }