Преобразование байтового массива в файл wav

Я пытаюсь воспроизвести звук в формате WAV, который хранится в массиве байтов, называемом байтами. Я знаю, что мне нужно преобразовать массив байтов в файл wav и сохранить его на моем локальном диске, а затем вызвать сохраненный файл, но я не смог преобразовать массив байтов в файл wav.

пожалуйста, помогите мне дать образец кода для преобразования байтового массива звука в формате WAV в файл WAV.

вот мой код:

protected void Button1_Click(object sender, EventArgs e)
{
    byte[] bytes = GetbyteArray();

   //missing code to convert the byte array to wav file

    .....................

    System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer(myfile);
    myPlayer.Stream = new MemoryStream();
    myPlayer.Play();
}

person Eyla    schedule 19.04.2010    source источник
comment
Из любопытства: как вообще вы получили звук в байтовом массиве?   -  person Svish    schedule 19.04.2010
comment
Это часть словарного проекта, который загружает звук каждого слова в моем словаре с merriam-webster.com. и вот образец файла wav, который был загружен и сохранен в массиве байтов: media.merriam-webster .com / soundc11 / g / good0001.   -  person Eyla    schedule 19.04.2010
comment
Привет, Эйла, не могли бы вы предоставить код для чтения файла формата волны в массив байтов в android. Буду очень благодарен.   -  person Joyson    schedule 14.10.2012


Ответы (3)


Попробуй это:

System.IO.File.WriteAllBytes("yourfilepath.wav", bytes);
person Jay Riggs    schedule 19.04.2010
comment
Спасибо за помощь. ваш код работает на меня и преобразует массив байтов в файл wav и сохраняет его по заданному пути, но проблема в том, что когда я использую: System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer (myfile); при воспроизведении я получаю ошибку: Заголовок волны поврежден. но когда я использую проигрыватель Windows Media для воспроизведения файла, он будет работать. какие-нибудь советы по сохранению этой проблемы? - person Eyla; 19.04.2010
comment
Я просто попробовал указанный вами URL-адрес, и он сработал: new System.Media.SoundPlayer(@"http://media.merriam-webster.com/soundc11/g/good0001").Play(); - возможно, проблема в коде загрузки? - person Paul Kohler; 20.04.2010
comment
Проблема здесь не в повреждении данных. OP имеет только байты необработанного звука. Ему нужно будет записать заголовок WAV в файл перед массивом байтов и компенсировать форматы big / little endian. Я тоже ищу чистый код, чтобы сделать это. - person Raheel Khan; 19.03.2012

Вы можете использовать что-то вроде File.WriteAllBytes(path, data) или ...

... В качестве альтернативы, если вы не хотите записывать файл, вы можете преобразовать массив байтов в поток, а затем воспроизвести его ...

var bytes = File.ReadAllBytes(@"C:\WINDOWS\Media\ding.wav"); // as sample

using (Stream s = new MemoryStream(bytes))
{
    // http://msdn.microsoft.com/en-us/library/ms143770%28v=VS.100%29.aspx
    System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer(s);
    myPlayer.Play();
}

PK :-)

person Paul Kohler    schedule 19.04.2010
comment
Извините, я оставил код myPlayer.Stream = new MemoryStream() из образца, который отменял бы поток конструктора ... - person Paul Kohler; 19.04.2010
comment
Спасибо за помощь. ваш код тоже работает, и я тоже проголосовал за вас. - person Eyla; 20.04.2010

Используя NAudio, вы можете попробовать что-то вроде:

//var wavReader = new WaveFileReader(yourWavFilePath);
//byte[] buffer = new byte[2 * wav1Reader.WaveFormat.SampleRate * wav1Reader.WaveFormat.Channels];
byte[] buffer = YourWaveSoundByteArray;

using ( WaveFileWriter writer = new WaveFileWriter(YourOutputFilePath, new WaveFormat( AssignWaveFormatYouWant /*wavReader.WaveFormat.SampleRate, 16, 2/*how many channel*/))
    )
{
    //int bytesRead;
    //while ((bytesRead = wavReader.Read(buffer, 0, buffer.Length)) > 0)
    //{
        writer.Write(buffer, 0,  buffer.Length/*bytesRead*/);
    //}
}
person yu yang Jian    schedule 14.05.2018