private void SendAudioBtn_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
 {
     waveIn.StopRecording();
     waveIn.Dispose();
     waveFile.Dispose();
     timer2.Start();//Tempo delay para mandar audio
 }
        private void OnButtonStartRecordingClick(object sender, EventArgs e)
        {
            if (writer != null)
            {
                writer.Close();
                writer.Dispose();
                writer = null;
            }

            DisableButtons();
            buttonStopRecording.Enabled = true;

            captureDevice = new WaveIn();

            captureDevice.DataAvailable    += OnDataAvailable;
            captureDevice.RecordingStopped += OnRecordingStopped;

            //if(MainForm.savingWaveProvider != null)
            //{
            //    MainForm.savingWaveProvider.ClearWriterFileHandles();
            //}

            // Forcibly turn on the microphone (some programs (Skype) turn it off).
            inputDevice.AudioEndpointVolume.Mute = false;

            outputFilename = $"{recordingNameText.Text}.wav";
            writer         = new WaveFileWriter(Path.Combine(outputFolder, outputFilename), captureDevice.WaveFormat);
            captureDevice.StartRecording();
            SetControlStates(true);
        }
 public override void StopRecording()
 {
     base.StopRecording();
     _captureStream.DataAvailable -= CaptureStream_DataAvailable;
     _outWriter.Dispose();
     _outWriter = null;
 }
Exemple #4
0
        private void btStop_Click(object sender, EventArgs e)
        {
            if (sourceStream != null)
            {
                sourceStream.StopRecording();
                sourceStream.Dispose();
                sourceStream = null;
            }

            if (sourceStream1 != null)
            {
                sourceStream1.StopRecording();
                sourceStream1.Dispose();
                sourceStream1 = null;
            }
            if (this.waveWriter == null)
            {
                return;
            }
            this.waveWriter.Dispose();
            waveWriter2.Dispose();
            this.waveWriter        = null;
            waveWriter2            = null;
            this.sbtRecord.Enabled = false;
            this.sbtStop.Enabled   = false;
            sbtPlay.Enabled        = true;
            sbtPlay.Focus();

            //mix();
        }
Exemple #5
0
 // 停止录音的外部接口
 public void StopRecording()
 {
     waveIn.StopRecording();
     waveIn.Dispose();
     waveIn = null;
     writer.Dispose();
     writer = null;
 }
Exemple #6
0
 public void Dispose()
 {
     mWaveIn.DataAvailable -= On_AudioDataAvailable;
     mWaveIn.StopRecording();
     mWaveIn.Dispose();
     mWaveFileWriter.Close();
     mWaveFileWriter.Dispose();
 }
 public void Stop()
 {
     if (IsRecording)
     {
         _writer?.Dispose();
         IsRecording = false;
     }
 }
 private void FinalizeWaveFile()
 {
     if (writer != null)
     {
         writer.Dispose();
         writer = null;
     }
 }
        /// <summary>
        /// Stops recording wave data from SoundCard and releases all resources
        /// </summary>
        public void StopRecording()
        {
            wasapiLoopbackCapture.StopRecording();
            RecordingState = false;

            waveFileWriter.Dispose();
            waveFileWriter = null;
            wasapiLoopbackCapture.Dispose();
        }
Exemple #10
0
 private void btnStopRecording_Click(object sender, EventArgs e)
 {
     btnStopRecording.Visible = false;
     btnRec.Visible           = true;
     if (waveWriter != null)
     {
         waveWriter.Dispose();
         waveWriter = null;
     }
 }
        /* TODO
         * //If the audio from the computer is silent for about 10 seconds, either NAudio or Wasapi Capture
         * //stops providing audio samples. This fixes this problem by:
         * //	Detect if there is more than <varNameHere=5s> of silence in the clip.
         * //	If so, check if the length of the current snippet is more than <varNameHere=0.2s> shorter
         * //	than the time since the last snippet.
         * //	If so, find the longest strech of silence within the current audio data snippet (this assumes
         * //	that there is only ever one timeout within an audio data snippet, i.e. snippets are shorter than 20s).
         * //	Then, insert the missing duration of silence into strech of silence (in the middle to be safe).
         * private void FillInUncapturedSilence(WaveInEventArgs e)
         * {
         *      var realtimeSampleDuration = _sampleDurationStopwatch.ElapsedMilliseconds;
         *      _sampleDurationStopwatch.Stop();
         *
         *      e.
         *
         *      _sampleDurationStopwatch.Restart();
         * }
         */

        private void RecordingStopped(object sender, StoppedEventArgs e)
        {
            _wasapiIn.Dispose();
            _wavOut.Dispose();

            File.Move(this.FullOutputPath, Path.ChangeExtension(this.FullOutputPath, ".wav"));
            this.CurrentExtension = ".wav";

            HasStopped = true;
            Stopped?.Invoke(this, EventArgs.Empty);
        }
 private void button2_Click(object sender, EventArgs e)
 {
     saveWave.StopRecording();
     saver?.Dispose();
     saver                  = null;
     button1.Enabled        = true;
     button2.Enabled        = false;
     button3.Enabled        = true;
     PlayButton.Enabled     = true;
     FixAudioButton.Enabled = true;
 }
 void waveInSource_RecordingStopped(object sender, StoppedEventArgs e)
 {
     //throw new NotImplementedException();
     //waveInSource.StopRecording();
     //MessageBox.Show("aaaaaaaaaaaaaaaaaaaaaaa");
     if (waveFileWriter != null)
     {
         waveFileWriter.Flush();
         waveFileWriter.Dispose();
         waveFileWriter = null;
     }
 }
 public WaveSoundRecorder()
 {
     waveIn.DataAvailable += (s, e) =>
     {
         writer?.Write(e.Buffer, 0, e.BytesRecorded);
         // TODO: 録音時間がヤバそうだったら自動で録音停止するなり出力ファイル切り替えるなりの処理をする
     };
     waveIn.RecordingStopped += (s, e) =>
     {
         writer?.Dispose();
         writer = null;
     };
 }
Exemple #15
0
 private void Cleanup()
 {
     if (asioOut != null)
     {
         asioOut.Dispose();
         asioOut = null;
     }
     if (writer != null)
     {
         writer.Dispose();
         writer = null;
     }
 }
Exemple #16
0
        public void EndRecord(string fn)
        {
            if (writer == null)
            {
                throw new InvalidOperationException("recording is not started");
            }
            ProcessData -= RecordData;
            var origin = writer.Filename;

            writer.Close();
            writer.Dispose();
            writer = null;
            System.IO.File.Copy(origin, fn, true);
        }
        /// <summary>
        /// 录音结束回调函数
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void waveSource_RecordingStopped(object sender, StoppedEventArgs e)
        {
            if (waveSource != null)
            {
                waveSource.Dispose();
                waveSource = null;
            }

            if (waveFile != null)
            {
                waveFile.Dispose();
                waveFile = null;
            }
        }
Exemple #18
0
 public void Dispose()
 {
     if (_waveIn != null)
     {
         _waveIn.StopRecording();
         _waveIn.Dispose();
         _waveIn = null;
     }
     if (_writer != null)
     {
         _writer.Close();
         _writer.Dispose();
         _writer = null;
     }
 }
Exemple #19
0
        void sourceInStream_RecordingStopped(object sender, StoppedEventArgs e)
        {
            if (sourceInStream != null)
            {
                sourceInStream.Dispose();
                sourceInStream = null;
            }

            if (waveWriter != null)
            {
                waveWriter.Close();
                waveWriter.Dispose();
                waveWriter = null;
            }
        }
Exemple #20
0
        public void InitWriter(int nowPlaying)
        {
            if (asioWriter != null)
            {
                asioWriter.Dispose();
            }
            //set the record format indentical with the waveProvider's format just for in case
            var        sampleRate       = mwProvider.WaveFormat.SampleRate;
            var        bitsPerSample    = mwProvider.WaveFormat.BitsPerSample;
            var        channels         = desiredInputChannels.Length + desiredOutputChannels.Length;
            WaveFormat asioWriterFormat = new WaveFormat(sampleRate, bitsPerSample, channels);
            var        filename         = $@"{asioWriterPath}/record{nowPlaying+1}.wav";

            asioWriter = new WaveFileWriter(filename, asioWriterFormat);
        }
Exemple #21
0
 public static void OnRecordingStopped(object sender, StoppedEventArgs e)
 {
     Debug.WriteLine("WaveSourceRecordingStopped");
     if (WaveSource != null)
     {
         WaveSource.Dispose();
         WaveSource = null;
     }
     if (WaveFile != null)
     {
         WaveFile.Dispose();
         WaveFile = null;
     }
     if (Recording)
     {
         Recording = false;
         // Convert wav file to mp3
         WavToMP3(WaveAudioFile, Mp3AudioFile);
         if (File.Exists(WaveAudioFile) && File.Exists(Mp3AudioFile))
         {
             File.Delete(WaveAudioFile);
         }
         Logger.AddLogEntry(LogCategory.INFO, "Recording ended. Audio converted to mp3 file " + Mp3AudioFile);
     }
     else
     {
         CurrentInputLevel = 0;
         EventSystem.Publish(new AudioUpdated()
         {
             RecordingLevel = CurrentInputLevel
         });
     }
 }
Exemple #22
0
    /// <summary>
    /// Stop Recording
    /// </summary>
    /// <returns>Successful</returns>
    public bool Stop()
    {
        if (!isRecording)
        {
            return(false);
        }

        // Stop Capturing Audio
        if (recordAudio)
        {
            audioSource.StopRecording();

            if (audioSource != null)
            {
                audioSource.Dispose();
                audioSource = null;
            }

            if (audioFile != null)
            {
                audioFile.Dispose();
                audioFile = null;
            }
        }

        // Kill Timers
        StopTimers();

        status      = "Idle";
        isRecording = false;
        return(isRecording);
    }
        public void StopEncoding()
        {
            _waveIn?.Dispose();
            _waveIn = null;

            _waveOut?.Dispose();
            _waveOut = null;

            _playBuffer?.ClearBuffer();
            _playBuffer = null;

            _encoder?.Dispose();
            _encoder = null;

            _decoder?.Dispose();
            _decoder = null;

            _playBuffer?.ClearBuffer();
            _playBuffer = null;

            _speex?.Dispose();
            _speex = null;

            _waveFile?.Dispose();
            _waveFile = null;

            SpeakerMax = -100;
            MicMax     = -100;
        }
Exemple #24
0
        public void StartRecording(string outputFileName)
        {
            this.outputFileName = outputFileName;
            Directory.CreateDirectory(outputFolder);

            capture = new WasapiLoopbackCapture();
            writer  = new WaveFileWriter(outputFilePathWav, capture.WaveFormat);
            capture.DataAvailable += (s, a) =>
            {
                writer.Write(a.Buffer, 0, a.BytesRecorded);
                if (writer.Position > capture.WaveFormat.AverageBytesPerSecond * 20)
                {
                    capture.StopRecording();
                }
            };
            capture.RecordingStopped += (s, a) =>
            {
                // TODO dispose before new writer...
                writer.Dispose();
                writer = null;
                capture.Dispose();
            };
            capture.StartRecording();
            new Thread(() =>
            {
                while (capture.CaptureState != NAudio.CoreAudioApi.CaptureState.Stopped)
                {
                    Thread.Sleep(10);
                }
            }).Start();
        }
Exemple #25
0
 private static void TrimWavFile(WaveFileReader reader, WaveFileWriter writer, int startPos, int endPos)
 {
     reader.Position = startPos;
     byte[] buffer = new byte[1024];
     while (reader.Position < endPos)
     {
         int bytesRequired = (int)(endPos - reader.Position);
         if (bytesRequired > 0)
         {
             int bytesToRead = Math.Min(bytesRequired, buffer.Length);
             int bytesRead   = reader.Read(buffer, 0, bytesToRead);
             if (bytesRead > 0)
             {
                 writer.Write(buffer, 0, bytesRead);
             }
         }
     }
     if (reader != null)
     {
         reader.Dispose();
     }
     if (writer != null)
     {
         writer.Dispose();
     }
 }
Exemple #26
0
        private static void Main(string[] args)
        {
            var elapsed = new TimeSpan(0, 0, 60);
            var id      = Guid.NewGuid();
            var capture = new WaveInEvent
            {
                DeviceNumber       = 0,
                BufferMilliseconds = 1000,
                WaveFormat         = new WaveFormat(44100, 2),
            };
            var writer = new WaveFileWriter($"record-{id}.wav", capture.WaveFormat);

            capture.DataAvailable += (s, a) =>
            {
                writer.Write(a.Buffer, 0, a.BytesRecorded);
            };

            capture.RecordingStopped += (s, a) =>
            {
                writer.Dispose();
                writer = null;
                capture.Dispose();
            };

            Task.Run(async() => await ExecFfm($"-y -f vfwcap -r 25 -t {elapsed:g} -i 0 front-{id}.mp4"));
            Task.Run(async() => await ExecFfm($"-y -f gdigrab -framerate 25 -t {elapsed:g} -i desktop desk-{id}.mkv"));

            capture.StartRecording();

            Thread.Sleep(elapsed);
            Console.WriteLine("Done!");
            capture.StopRecording();

            Environment.Exit(Environment.ExitCode);
        }
        static Task recordAsync(int deviceNum, CancellationToken cancellationToken)
        {
            return(new Task(async() =>
            {
                WaveFileWriter waveFile;
                WaveInEvent waveSource = new WaveInEvent();
                waveSource.DeviceNumber = deviceNum;
                waveSource.WaveFormat = new WaveFormat(44100, 1);

                string tempFile = ($@"{_saveDirectory}mic_recording_{deviceNum}.wav");
                waveFile = new WaveFileWriter(tempFile, waveSource.WaveFormat);

                waveSource.DataAvailable += (sender, e) =>
                {
                    waveFile.Write(e.Buffer, 0, e.BytesRecorded);
                };

                waveSource.StartRecording();

                while (!cancellationToken.IsCancellationRequested)
                {
                    await Task.Delay(100);
                }

                waveSource.StopRecording();
                waveFile.Dispose();
            }));
        }
Exemple #28
0
        /// <summary>
        /// Stop the recording.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void _waveIn_RecordingStopped(object sender, StoppedEventArgs e)
        {
            // Close the writer.
            if (_writer != null)
            {
                _writer.Dispose();
                _writer = null;
            }

            // If created.
            if (_waveInCreated)
            {
                // Stop recording.
                RecordingStopped?.Invoke(sender, new StoppedEventArgs(e.Exception, true));
            }
        }
Exemple #29
0
        private async Task <bool> CreateWaveFile(byte[] audioArray, string path, string fileName = "MyFile.wav")
        {
            StorageFolder storageFolder = ApplicationData.Current.LocalFolder;
            StorageFile   audioFile     = await storageFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);

            AudioFileReader reader = null;
            WaveFileWriter  wfw    = null;

            try
            {
                reader = new AudioFileReader(path);
                wfw    = new WaveFileWriter(audioFile.Path, reader.WaveFormat);

                wfw.Write(audioArray, 0, audioArray.Length);
            }
            catch (Exception e)
            {
                throw e;
            }
            finally
            {
                if (wfw != null)
                {
                    wfw.Dispose();
                    wfw = null;
                }

                CloseReader(reader);
            }

            return(true);
        }
Exemple #30
0
        void startRecordingW()
        {
            this.CreateDataRecoClient();
            var capture = new WasapiLoopbackCapture();

            writer = new WaveFileWriter("temp.wav", capture.WaveFormat);

            this.dataClient.AudioStart();

            capture.DataAvailable += (s, a) =>
            {
                writer.Write(a.Buffer, 0, a.BytesRecorded);
                if (writer.Position > capture.WaveFormat.AverageBytesPerSecond * 5)
                {
                    capture.StopRecording();
                }
            };

            capture.RecordingStopped += (s, a) =>
            {
                writer.Dispose();
                writer = null;
                capture.Dispose();
                startAnalysis();
            };

            capture.StartRecording();
        }