从程序集资源流式传输的音频速度快、声音大且失真

问题描述

我正在尝试从程序集资源加载 AudioClip(由 AudioSource 播放)。然而,在我目前的设置下,音频非常响亮,极度失真并且播放速度大约是其两倍。它是一个 .wav 文件,作为资源包含在托管程序集中。任何人都知道我做错了什么? (我已经匹配了频率和频道)

private static AudioClip LoadAudioClip()
{
    // Try loading from resources first.
    AudioClip audioClip = Resources.Load<AudioClip>(AudioClipResourceFolder + Path.GetFileNameWithoutExtension(EmbeddedChime.FileName));

    if (audioClip == null)
    {
        // nothing found in resources,load from library manifest instead.
        try
        {
            using (Stream stream = GetResourceStream(EmbeddedChime.FileName))
            {
                float[] buffer = GetAudioBuffer(stream);
                audioClip = AudioClip.Create("Chime",buffer.Length,2,44100,true,false);
                if (!audioClip.SetData(buffer,0))
                {
                    throw new NotSupportedException(EmbeddedChime.FileName);
                }
            }
        }
        catch (Exception e)
        {
            AMDebug.LogError($"Failed to load {EmbeddedChime.FileName} from Assembly library manifest: " + e.Message);
        }
    }

    return audioClip;
}

private static float[] GetAudioBuffer(Stream stream)
{
    byte[] buffer = GetResourceBuffer(stream);
    
    float[] floatBuffer = new float[buffer.Length / 4];
    for (int i = 0; i < floatBuffer.Length; i++) 
    {
        if (BitConverter.IsLittleEndian)
        {
            Array.Reverse(buffer,i * 4,4);
        }

        floatBuffer[i] = BitConverter.ToSingle(buffer,i*4) / 0x80000000;
    }

    return floatBuffer;
}

private static byte[] GetResourceBuffer(Stream stream)
{
    stream.Seek(0,SeekOrigin.Begin);
    byte[] buffer = new byte[stream.Length];
    stream.Read(buffer,(int)stream.Length);
    return buffer;
}

private static Stream GetResourceStream(string resourceName)
{
    return AudioMobAssembly.GetManifestResourceStream(resourceName);
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)