.NET 4.x Запись звука c#
Формулировка задачи:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Text; using System.Windows; using System.IO; using NAudio.Wave; using NAudio.FileFormats; using NAudio.CoreAudioApi; using NAudio; namespace SpeechProject { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { // WaveIn - поток для записи WaveIn waveIn; //Класс для записи в файл WaveFileWriter writer; //Имя файла для записи string outputFilename = "Rec.wav"; public MainWindow() { InitializeComponent(); } 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); } } //Завершаем запись 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(); //Дефолтное устройство для записи (если оно имеется) waveIn.DeviceNumber = 0; //Прикрепляем к событию DataAvailable обработчик, возникающий при наличии записываемых данных waveIn.DataAvailable += waveIn_DataAvailable; //Прикрепляем обработчик завершения записи waveIn.RecordingStopped += new EventHandler(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(); } } } }
InvokeRequired BeginInvoke
Решение задачи: «.NET 4.x Запись звука c#»
textual
Листинг программы
InvokeRequired BeginInvoke
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д