2013-04-18 33 views
8

Tôi gặp sự cố. Tôi sử dụng sqlite để lưu trữ âm thanh. Tôi nhận được âm thanh từ nó trong byte []. Sau đó chuyển đổi byte [] để float []:tạo AudioClip từ 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); 

Sau đó tạo AudioClip:

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

Và sau đó chơi nó

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

Nhưng kết quả là tiếng ồn :(

+1

Có thể đi theo một cách khác sẽ giúp bạn xác định nguồn gốc của vấn đề? Nếu tôi đã gỡ lỗi này, tôi sẽ tạo ra chuyển đổi nghịch đảo, từ audioClip.GetData thành mảng byte. Nếu bạn sẽ tải lên cùng một mẫu chính xác trong Unity và sử dụng chuyển đổi ngược lại này, bạn có thể nhận được một gợi ý về những gì đang xảy ra ở đây. –

+0

Cảm ơn, tôi muốn thử nó) Tôi sẽ làm điều đó. Có thể có một giải pháp khác - lưu byte [] vào tập tin, và sau đó sử dụng WWW dụ để tải AudioClip, nhưng tôi không thích nó :) – Igor

Trả lời

6
.

floatArr cần được thu nhỏ trong phạm vi từ -1.0f đến 1.0f.

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

Và bao gồm: 'using System;' –