Запись и воспроизведение звука - C#
Формулировка задачи:
всем привет! хочу добавить в программу запись и воспроизведение звука, что то типа диктофона, никто не может поделиться исходником или сказать как записывать и сохранять звук с микрофона а потом воспроизводить его
Решение задачи: «Запись и воспроизведение звука»
textual
Листинг программы
using NAudio.Wave;
using NAudio.FileFormats;
using NAudio.CoreAudioApi;
using NAudio;
namespace SpeechProject
{
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.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();
}
}
}