2010-04-19 7 views
9

Sto provando a riprodurre un suono wav memorizzato in un array di byte chiamato byte. So che dovrei convertire l'array di byte in file wav e salvarlo nella mia unità locale, quindi ho chiamato il file salvato ma non ero in grado di convertire l'array di byte in file wav.Converti array di byte in file wav

per favore aiutami a dare codice di esempio per convertire byte arrary di wav sound in wav file.

Ecco il mio codice:

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

Per curiosità: come hai ottenuto il suono nell'array di byte, in primo luogo? – Svish

+0

Questo è parte di un progetto di dizionario che scarica il suono di ogni parola nel mio dizionario da http://www.merriam-webster.com/. e qui un esempio di file wav scaricato e salvato nell'array di byte: http: //media.merriam-webster.com/soundc11/g/good0001. – Eyla

+0

Ciao Eyla, potresti fornire il codice per leggere il file in formato wave in un array di byte in Android. Saremo molto grati. – Joyson

risposta

9

Prova questo:

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

Grazie per il vostro aiuto. il tuo codice funziona per me e converte l'array di byte in un file wav e lo ho salvato nel percorso specificato, ma il problema è che quando utilizzo: System.Media.SoundPlayer myPlayer = new System.Media.SoundPlayer (myfile); per riprodurlo mi darà errore che è: L'intestazione dell'onda è corrotta. ma quando uso Windows Media Player per riprodurre il file funzionerà. qualche consiglio per salvare questo problema? – Eyla

+0

Ho appena provato l'URL che hai fornito e ha funzionato: 'nuovo System.Media.SoundPlayer (@" http://media.merriam-webster.com/soundc11/g/good0001 ") .Play();' - forse il problema è il codice di download? –

+3

Il problema qui non è dati corrotti. L'OP ha solo byte audio non elaborati. Dovrà scrivere l'intestazione WAV su file prima dell'array di byte e compensare i formati big/little endian. Sto cercando un codice pulito per fare anche questo. –

7

È possibile usare qualcosa come File.WriteAllBytes(path, data) o ...

... In alternativa, se non si vuole per scrivere il file è possibile convertire l'array di byte in uno stream e quindi riprodurlo ...

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

Mi scuso, ho lasciato il codice 'myPlayer.Stream = new MemoryStream()' dall'esempio che avrebbe annullato lo stream del costruttore ... –

+0

Grazie per il vostro aiuto. funziona anche il tuo codice e ho votato per te. – Eyla