Пауза при записи с микрофона в классе nAudio - C#

Узнай цену своей работы

Формулировка задачи:

Всем хорошего настроения и доброго утра. Господа, помогите, пожалуйста. Можно ли в классе nAudio организовать паузу во время записи с дальнейшим ее продолжением? Не могу сообразить.
//начали запись
        private void StartRecording()
        {
            wi = new WaveIn();
            wi.DeviceNumber = 0;
            wi.DataAvailable += waveIn_DataAvailable;
            wi.RecordingStopped += waveIn_RecordingStopped;
            wi.WaveFormat = new WaveFormat(44100, 2);
            writer = new WaveFileWriter("c:\\file1.wav", wi.WaveFormat);
            wi.StartRecording();
        }
 
//накопление данных
        private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);
            }
            else
            {
                writer.WriteData(e.Buffer, 0, e.BytesRecorded);
            }
        }
 
        //завершить запись
        private void StopRecording()
        {
            if (wi != null)
            {
                wi.StopRecording();
            }
        }
 
        //после окончания записи
        private void waveIn_RecordingStopped(object sender, EventArgs e)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new EventHandler(waveIn_RecordingStopped), sender, e);
            }
            else
            {
                wi.Dispose();
                wi = null;
                writer.Close();
                writer = null;
            }
        }

Решение задачи: «Пауза при записи с микрофона в классе nAudio»

textual
Листинг программы
public static void Concatenate(string outputFile, IEnumerable<string> sourceFiles)
{
    byte[] buffer = new byte[1024];
    WaveFileWriter waveFileWriter = null;
 
    try
    {
        foreach (string sourceFile in sourceFiles)
        {
            using (WaveFileReader reader = new WaveFileReader(sourceFile))
            {
                if (waveFileWriter == null)
                {
                    // first time in create new Writer
                    waveFileWriter = new WaveFileWriter(outputFile, reader.WaveFormat);
                }
                else
                {
                    if (!reader.WaveFormat.Equals(waveFileWriter.WaveFormat))
                    {
                        throw new InvalidOperationException("Can't concatenate WAV Files that don't share the same format");
                    }
                }
 
                int read;
                while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
                {
                    waveFileWriter.WriteData(buffer, 0, read);
                }
            }
        }
    }
    finally
    {
        if (waveFileWriter != null)
        {
            waveFileWriter.Dispose();
        }
    }
 
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы