2013-04-18 9 views
8

Ich habe ein Problem. Ich benutze sqlite um Sounds zu speichern. Ich erhalte Ton in Byte []. konvertieren Dann byte [] schweben []:create AudioClip von 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); 

Dann Audioclip erstellen:

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

Und dann spielen

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

Aber Ergebnis ist Lärm :(

+1

Kann sein, in die andere Richtung Sie die Quelle des Problems ermitteln helfen würde? Wenn ich das debugging, würde ich die inverse Konvertierung von audioClip.GetData in Byte-Array erstellen. Wenn Sie das gleiche Sample in Unity laden und diese umgekehrte Konvertierung verwenden, erhalten Sie möglicherweise einen Hinweis darauf, was hier falsch läuft. –

+0

Danke, ich wollte es versuchen) Ich werde das tun. Es ist vielleicht eine andere Lösung - speichern Bytes [] in die Datei, und verwenden Sie dann WWW-Instanz Audioclip zu laden, aber ich mag es nicht :) – Igor

Antwort

6
.

FloatVek muss skaliert werden im Bereich von -1.0f bis 1.0f sein.

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

und beinhalten: 'using System;' –