2013-04-18 6 views
8

Ho un problema. Io uso sqlite per memorizzare suoni. Ne ricevo il suono in byte []. poi convertire byte [] a stare a galla []:crea AudioClip dal byte []

  private float[] ConvertByteToFloat(byte[] array) 
      { 
       float[] floatArr = new float[array.Length/4]; 
       for (int i = 0; i < floatArr.Length; i++) 
       { 
        if (BitConverter.IsLittleEndian) 
         Array.Reverse(array, i * 4, 4); 
        floatArr[i] = BitConverter.ToSingle(array, i * 4); 
       } 
       return floatArr; 
      } 


      float[] f = ConvertByteToFloat(bytes); 

Quindi creare AudioClip:

AudioClip audioClip = AudioClip.Create("testSound", f.Length, 1, 44100, false, false); 
    audioClip.SetData(f, 0); 

E poi riprodurlo

AudioSource.PlayClipAtPoint(audioClip, new Vector3(100, 100, 0), 1.0f); 

Ma risultato è il rumore :(

+1

L'altra direzione potrebbe aiutarti a determinare l'origine del problema? Se stavo eseguendo il debug di questo, vorrei creare la conversione inversa, da audioClip.GetData a array di byte. Se caricerai lo stesso identico campione in Unity e userai questa conversione inversa, potresti dare un suggerimento a cosa sta andando storto qui. –

+0

Grazie, volevo provarlo) Lo farò. C'è forse un'altra soluzione: salvare i byte [] nel file, quindi utilizzare l'istanza WWW per caricare AudioClip, ma non mi piace :) – Igor

risposta

6
.

floatArr deve essere ridimensionato per essere compreso nell'intervallo da -1,0f a 1,0f

floatArr[i] = BitConverter.ToSingle(array, i*4)/0x80000000; 
+0

E includere: 'using System;' –