gpt4 book ai didi

c# - 将 OnAudioFilterRead 与 playOnAwake 一起使用

转载 作者:行者123 更新时间:2023-12-02 23:46:53 25 4
gpt4 key购买 nike

我目前正在 Unity 中处理一些音频处理代码,最近遇到了一个相当奇怪的问题,我希望尽快解决。

基本上,使用 OnAudioFilterRead AudioSource 上的回调函数当playOnAwake检查标志会导致意外行为,即默认的 Unity AudioSource 流似乎会播放几个缓冲区 - 绕过 OnAudioFilterRead 函数 - 直到脚本正确初始化(假设直到 Awake/OnEnable 函数完成) .

为了强调这个问题,这里有一个简单的说明性脚本,可以使音频源静音:

// This script is attached to a GameObject with an AudioSource.
// AudioSource has a clip attached to it, and playOnAwake flag is set to true.
[RequireComponent(typeof(AudioSource))]
public class MuteSource : MonoBehaviour {
void Awake () {
/*
* Some time-consuming code block.
*/
}

void OnAudioFilterRead (float[] data, int channels) {
for (int i = 0; i < data.Length; ++i) {
data[i] = 0.0f;
}
}
}

如前所述,上面的这个脚本仅在 Awake 中的代码块完成后才开始提供静默输出(它播放剪辑就像在那之前没有附加脚本一样)。

我一直在玩这个,以更好地了解潜在问题,甚至得到奇怪的结果。首先,添加 Stop事先 Awake 似乎没有任何影响:
  void Awake () {
// The clip still plays as normal after this call.
AudioSource audioSource = GetComponent<AudioSource>();
audioSource.Stop();

/*
* Some time-consuming code block.
*/
}

我尝试的另一件事是通过在 AudioListener 上附加一个类似的脚本来强制使输出静音。 ,但仍然没有运气:
// This script is attached to a GameObject with AudioListener.
[RequireComponent(typeof(AudioListener))]
public class MuteListener : MonoBehaviour {
void Awake () {
}

void OnAudioFilterRead (float[] data, int channels) {
for (int i = 0; i < data.Length; ++i) {
data[i] = 0.0f;
}
}
}

组合时,如果 MuteSource 和 MuteListener 都存在于场景中,即使 MuteListener 似乎也不足以强制使输出静音,即问题仍然存在。事实上,我已经尝试了不同的变体,例如从 AudioSource 中完全删除 OnAudioFilterRead 并将 Stop 添加到 MuteSource 的 Awake 中,如下所述,这并没有改变行为。同样,将 Awake 函数上耗时的代码块移至 OnEnable 也无济于事。

我能找到的唯一解决方法是更改​​ ScriptExecutionOrder在 MuteSource 之前调用 MuteListener,这似乎工作正常。同样,删除耗时的代码块可以完全解决预期的问题。

总而言之,如果您对此有任何建议/反馈,我将不胜感激。首先十分感谢!

最佳答案

如果其他人遇到此问题,似乎问题已在 Unity 5.2.0B5(或者可能是 5.1.0 以上的某些早期版本)中自动解决。奇怪的是,我在他们的任何发行说明中都找不到有关该修复的任何具体内容。

关于c# - 将 OnAudioFilterRead 与 playOnAwake 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30654493/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com