gpt4 book ai didi

javascript - 取消预定的网络音频

转载 作者:行者123 更新时间:2023-11-30 13:49:26 26 4
gpt4 key购买 nike

我已经了解了我能做的 A Tale of Two Clocks ,它描述了一种为具有实时编辑功能的 Web 音频应用程序(如鼓机)进行调度的方法,我对一个关键方面感到困惑。

该技术的主要动机是,一旦 AudioBufferSourceNode 已安排使用 start() 播放,就无法取消。

但是,如果我在 AudioBufferSourceNodes 计划播放之前调用 stop(),它就不会播放,因此可以取消。那么为什么需要这种技术呢?我错过了什么?

最佳答案

我认为 OP 在问“为什么我不提前安排所有的笔记,如果我想停止,然后取消所有剩余的笔记(通过 .stop())?”

实际上,您可以做到这一点。对于小序列,这可能是一种不错的方法。然而:

如果您想要取消它们的能力,您需要分别挂起对每个 AudioBufferSourceNode 的引用 - 单独的 16 音符踩镲模式,在 140bpm,是 2800 个音符(=AudioBufferSourceNodes)持续 5 分钟歌曲。这也是(对于整首歌曲)可能要同时分配和取消分配的大量内存。对于更长的序列,它可能不那么有吸引力。

如果您正在对序列播放进行任何实时更改,则尤其如此 - 例如,如果您想要更改速度,则需要取消所有剩余的音符,然后重新安排它们。

我在 ATOTC 中详述的技术的主要动机是在第二部分的末尾:“简而言之,因为您需要灵活地更改节奏或参数,如频率或增益(或完全停止调度),您不需要不想将太多音频事件插入队列 - 或者,更准确地说,你不想在时间上看得太远,因为你可能想完全改变那个安排。”虽然我确实提到了取消,但这是事后才想到的,真的。

如果您正在处理相对较短的序列,并且您不关心使用的额外内存,那么最简单的做法就是创建一个 GainNode,将其连接到目的地,然后设置所有 AudioBufferSourceNode连接到那个 GainNode。明确不要保留对您的 ABSN 的引用,但要保留对 GainNode 的引用——如果您想取消,只需断开 GainNode 的连接并释放它。没有进一步的发挥到目的地,一切最终都会得到释放。 (我在第二部分也提到了这一点,尽管它可能读起来有点贬义。对于较小的应用程序来说没关系。)

关于javascript - 取消预定的网络音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58574007/

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