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);
                }
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы