2010-04-19 4 views
9

Я пытаюсь воспроизвести звук 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(); 
} 
+0

Из любопытства: Как вы получили звук в массиве байтов в первую очередь? – Svish

+0

Это отдельно от словарного проекта, который загружает звук каждого слова в моем словаре с http://www.merriam-webster.com/. и здесь образец wav-файла, который загружен и сохранен в массиве байтов: http: //media.merriam-webster.com/soundc11/g/good0001. – Eyla

+0

Привет Эйла, не могли бы вы предоставить код для чтения файла формата волны в массив байтов в android. Будем очень благодарны. – Joyson

ответ

9

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

System.IO.File.WriteAllBytes("yourfilepath.wav", bytes); 
+0

Благодарим за помощь. ваш код работает для меня и преобразовывает массив байтов в wav-файл и сохраняет его в заданном пути, но проблема, которую я использую: System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer (myfile); , чтобы играть, это даст мне ошибку, которая: заголовок волны поврежден. , но когда я использую Windows Media Player для воспроизведения файла, он будет работать. рекомендации какие проблемы? – Eyla

+0

Я просто попробовал URL, который вы указали, и это сработало: 'new System.Media.SoundPlayer (@" http://media.merriam-webster.com/soundc11/g/good0001 ") .Play();' - возможно, проблема - это код загрузки? –

+3

Проблема здесь не поврежденные данные. OP имеет только исходные звуковые байты. Ему нужно будет написать заголовок WAV для файла перед массивом байтов и компенсировать большие/маленькие конечные форматы. Я также ищу чистый код для этого. –

7

Вы можете использовать что-то вроде 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 :-)

+0

Извините, я оставил код myPlayer.Stream = new MemoryStream() из образца, который бы отменил поток конструктора ... –

+0

Благодарим за помощь. Ваш код тоже работает, и я тоже голосовал за вас. – Eyla