c# - 从 byte[] 创建 AudioClip

标签 c# arrays unity3d endianness

我有问题。我使用 sqlite 来存储声音。我从字节 [] 中得到声音。 然后将 byte[] 转换为 float[]:

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

但结果是噪音 :( .

最佳答案

floatArr 需要缩放到 -1.0f 到 1.0f 的范围内。

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

关于c# - 从 byte[] 创建 AudioClip,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16078254/

相关文章:

c# - Protobuf-net 交换类型?

python - 如何使对象在按键时在对象数组中移动?

unity3d - 如何在 RectTransform 中计算 sizeDelta?

c# - Hololens - 访问相机框架

c# - C# WebBrowser 控件中带有 HTML anchor 的奇怪浏览器行为

c# - C#中的类型转换对象数组成员导致异常

c#如何在列表框中找到最小值和最大值

php - Mysqli 到 foreach 内的数组;内部 foreach 与另一个 mysqli 数组无法正确读取外部数组中的值

ruby - 最多 n 的组合

animation - 我怎样才能最好地在 Unity3d 中为 2D Sprite 设置动画?