.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