Доброго времени суток. Можете объяснить почему второй код не совсем правильно работает? При воспроизведении записанного файла слышно только звуки похожие на щелчки мыши. Хотя от первого кода (отлично работающего) он отличается только тем что буфер не сразу записывается в файл, а добавляется в список, затем после окончания записи весь буфер из списка записывается в файл.
Первый код
using NAudio.Wave;
namespace Record
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
WaveIn waveIn;
WaveFileWriter waveWriter;
private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
if (waveWriter == null) return;
waveWriter.Write(e.Buffer, 0, e.BytesRecorded);
waveWriter.Flush();
}
private void button1_Click(object sender, EventArgs e)
{
waveIn = new WaveIn();
waveIn.DeviceNumber = 0;
string outputFilename = @"D:/demo.wav";
waveIn.WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(waveIn.DeviceNumber).Channels);
waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(waveIn_DataAvailable);
waveWriter = new WaveFileWriter(outputFilename, waveIn.WaveFormat);
waveIn.StartRecording();
}
private void button2_Click(object sender, EventArgs e)
{
if (waveIn != null)
{
waveIn.StopRecording();
waveIn.Dispose();
waveIn = null;
}
if (waveWriter != null)
{
waveWriter.Dispose();
waveWriter = null;
}
}
}
}
Второй код
using NAudio.Wave;
namespace RecordReally
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
WaveIn waveIn;
WaveFileWriter waveWriter;
string outputFilename = @"D:/demo.wav";
List<byte[]> bytes = new List<byte[]>();
private void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
bytes.Add(e.Buffer);
}
private void button1_Click(object sender, EventArgs e)
{
waveIn = new WaveIn();
waveIn.DeviceNumber = 0;
waveIn.WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(waveIn.DeviceNumber).Channels);
waveWriter = new WaveFileWriter(outputFilename, waveIn.WaveFormat);
waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(waveIn_DataAvailable);
waveIn.StartRecording();
}
private void button2_Click(object sender, EventArgs e)
{
if (waveIn != null)
{
waveIn.StopRecording();
waveIn.Dispose();
waveIn = null;
}
foreach (byte[] buffer in bytes)
{
waveWriter.Write(buffer, 0, buffer.Length);
waveWriter.Flush();
}
if (waveWriter != null)
{
waveWriter.Dispose();
waveWriter = null;
}
}
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть стиль для Button c шаблоном в виде иконки и текста, который применяется к нескольким кнопкам: