微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Howler.js变量偏移量

如何解决Howler.js变量偏移量

为了方便起见,我从Web Audio API过渡到Howler.js,但是我不知道如何在声音的开头实现可变(静音)偏移。


这是一个例子:

snd为简单的How叫声,而offset为可变数:

let snd = new Howl({ src: data })
let offset = 2000 // in ms

我希望能够做到以下几点:

snd.seek(1000)

这不会在声音中寻找1秒,而是开始偏移的一半。

此外,如果正在播放snd,我需要执行以下操作:

offset = 4000

,在播放过程中,音频将移动2秒(4000毫秒-2000毫秒)。


显然,该示例过于简化,偏移量的分配将在具有其他逻辑的函数中进行。话虽这么说,即使有点骇人听闻,有什么办法可以通过Howler.js做到这一点吗?

我看到了带有计时器和setTimeout的选项,但这些选项似乎不正确或与我的逻辑要求不兼容。我也尝试过为seek()设置负值,但这些值似乎认为0

解决方法

Howl似乎不支持此功能,但是您可以包装of叫的实例并自己添加此逻辑。您可以创建一个继承自var testFolderId = 'di98kjsdf9...'; function testGetFolder(testFolderId){ folder = DriveApp.getFolderById(testFolderId); Logger.log("folders: " + folder); } 的新类,并包含此逻辑。

这不会很简单。

此示例很不完整,但是它说明了一种可行的方法。基本上,您将需要重载子类中的每个方法,并使它知道偏移量。

Howl

同样,这些实现是不完整的。您需要处理寻求小于偏移量的值的情况,您可能需要跟踪是处于偏移量部分还是实际声音部分。如果支持在播放时更改偏移,则可能需要在更改偏移时调用import { Howl,HowlOptions } from 'howler' interface HowlWithOffsetOptions extends HowlOptions { offset: number } class HowlWithOffset extends Howl { #offset: number = 0 constructor(options: HowlWithOffsetOptions) { super(options) this.#offset = options.offset } offset(newOffset?: number): number { if (newOffset) { this.#offset = newOffset } return this.#offset } // start playing in `offset` milliseconds. play() { setTimeout(() => super.play(),this.#offset) } seek(position?: number): number { if (position != null) { if (position > this.#offset) { super.seek(this.#offset - position) } else { super.seek(0) } } } }

但是从理论上讲,您应该能够以偏移识别的方式覆盖每个方法。

祝你好运!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。