NAudio. Как записать звук в массив байтов? - C#
Формулировка задачи:
Доброго времени суток. Есть код который записывает звук с микрофона и сохраняет его в файл demo.wav:
Можно ли сделать так чтобы звук сохранялся не в файл, а в массив? Для передачи на сервер
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;
}
}
}
}
подниму
Решение задачи: «NAudio. Как записать звук в массив байтов?»
textual
Листинг программы
//--Код чтения байт из файла
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Wave File (*.wav)|*.wav;";
if (open.ShowDialog() != DialogResult.OK) return;
NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(open.FileName));
int size = 4096;
int bytes = 4;
//--Массив для хранения байт, составляющих сигнал
byte[] buffer = new byte[size];
//--Массив для хранения значений амплитуд сигнала
double[] amps = new double[size / bytes];
while(wave.Position < wave.Length)
{
//--Запись байт в массив
wave.Read(buffer, 0, size);
for (int i = 0; i < read / bytes; i++)
{
//--Получить значения амплитуд сигнала
amps[i] = BitConverter.ToSingle(buffer, i * bytes);
}
}