2013-04-18 4 views
8

У меня проблема. Я использую sqlite для хранения звуков. Я получаю звук от него в байте []. Затем преобразовать байт [], чтобы плавать []:создать AudioClip из байт []

  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); 

Затем создайте AudioClip:

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

а затем воспроизвести его

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

Но результат шум :(

+1

Может быть, другой способ поможет вам определить источник проблемы? Если бы я отлаживал это, я бы создал обратное преобразование из массива audioClip.GetData в байты. Если вы загрузите тот же самый образец в Unity и используйте это обратное преобразование, вы можете получить намек на то, что здесь не так. –

+0

Спасибо, я хотел попробовать) Я сделаю это. Возможно, есть другое решение - сохранить байты [] в файл, а затем использовать экземпляр WWW для загрузки AudioClip, но мне это не нравится :) – Igor

ответ

6
.

floatArr необходимо масштабировать, чтобы быть в пределах от -1.0f до 1.0f.

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

И включают: 'using System;' –

Смежные вопросы