Запись звука(без NAudio) - C#

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

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

Уже второй день курю интернеты, ничего не выходит. Брал копипасту кода отсюда. As is она не работает. Во-первых, вот эта строка :
 waveIn.RecordingStopped += new EventHandler(waveIn_RecordingStopped);
Эррорит, говорит "Неявное преобразование типа System.EventHandler в System.EventHandler<NAudio.Wave.StoppedEventArgs>". Соответственно, я допиливаю:
waveIn.RecordingStopped += new EventHandler<NAudio.Wave.StoppedEventArgs>(waveIn_RecordingStopped);
Компилируется без ошибок, но теперь другая беда, при завершении записи(нажатие на вторую кнопку) содержимое файла не сохраняется. Что примечательно, если закрыть приложение, при закрытии файл "наполняется"(у него появляется вес), но он битый, не воспроизводится. Может, кто знает как решить эту проблему, или записать аудио в .wav по-другому? Находил еще какой-то способ через пространство имен Microsoft.VisualBasic и Microsoft.VisualBasic.Device, но там не сохраняется файл почему-то. Короче, ахтунг. Выручайте.

Решение задачи: «Запись звука(без NAudio)»

textual
Листинг программы
using System;
using System.Windows.Forms;
using NAudio.Wave;
 
// На форме есть две кнопки - одна для начала записи (button1), другая - для окончания (button2)
namespace WindowsFormsApplication10
{
    public partial class Form1 : Form
    {
        // WaveIn - поток для записи
        WaveIn waveIn;
        // Класс для записи в файл
        WaveFileWriter writer;
        // Имя файла для записи
        string outputFilename = "имя_файла.wav";
 
        public Form1()
        {
            InitializeComponent();
        }
 
        // Получение данных из входного буфера 
        void waveIn_DataAvailable(object sender, WaveInEventArgs e)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new EventHandler<WaveInEventArgs>(waveIn_DataAvailable), sender, e);
            }
            else
            {
                // Записываем данные из буфера в файл
                writer.Write(e.Buffer, 0, e.BytesRecorded);
            }
        }
 
        // Завершаем запись
        void StopRecording()
        {
            MessageBox.Show("StopRecording");
            waveIn.StopRecording();
        }
 
        // Окончание записи
        private void waveIn_RecordingStopped(object sender, EventArgs e)
        {
            if (this.InvokeRequired)
            {
                this.BeginInvoke(new EventHandler(waveIn_RecordingStopped), sender, e);
            }
            else
            {
                waveIn.Dispose();
                waveIn = null;
                writer.Close();
                writer = null;
            }
        }
 
        // Начинаем запись - обработчик нажатия кнопки
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                MessageBox.Show("Start Recording");
                waveIn = new WaveIn();
                // Дефолтное устройство для записи (если оно имеется)
                // встроенный микрофон ноутбука имеет номер 0
                waveIn.DeviceNumber = 0;
                // Прикрепляем к событию DataAvailable обработчик, возникающий при наличии записываемых данных
                waveIn.DataAvailable += waveIn_DataAvailable;
                // Прикрепляем обработчик завершения записи
                waveIn.RecordingStopped += waveIn_RecordingStopped;
                // Формат wav-файла - принимает параметры - частоту дискретизации и количество каналов(здесь mono)
                waveIn.WaveFormat = new WaveFormat(8000, 1);
                // Инициализируем объект WaveFileWriter
                writer = new WaveFileWriter(outputFilename, waveIn.WaveFormat);
                // Начало записи
                waveIn.StartRecording();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
 
        // Прерываем запись - обработчик нажатия второй кнопки
        private void button2_Click(object sender, EventArgs e)
        {
            if (waveIn != null)
            {
                StopRecording();
            }
        }
    }
}

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


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

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

13   голосов , оценка 3.769 из 5