javascript - HTML5 <audio> 淡入淡出播放

标签 javascript html audio volume

我想在具有淡入淡出周期的随机位置开始和停止 HTML5 播放,以平滑聆听体验。

为此存在什么样的机制?使用 setTimeout() 手动提高音量?

最佳答案

jQuery 方式...

$audio.animate({volume: newVolume}, 1000);

编辑:$audio 是一个 jQuery 包装的音频元素,newVolume 是 0 到 1 之间的 double 值。

编辑:元素的有效媒体音量是音量,相对于 0.0 到 1.0 的范围进行解释,0.0 表示静音,1.0 是最大声设置,介于两者之间的值会增加响度。该范围不必是线性的。 http://www.w3.org/html/wg/drafts/html/master/embedded-content.html#effective-media-volume

编辑:人们正在发布 vanilla JavaScript 实现,所以我将发布一个保留 jQuery 摆动动画的 vanilla TypeScript(如果您想在 JavaScript 中运行它,只需删除类型信息)。 免责声明,这是完全未经测试的:

export async function adjustVolume(
    element: HTMLMediaElement,
    newVolume: number,
    {
        duration = 1000,
        easing = swing,
        interval = 13,
    }: {
        duration?: number,
        easing?: typeof swing,
        interval?: number,
    } = {},
): Promise<void> {
    const originalVolume = element.volume;
    const delta = newVolume - originalVolume;

    if (!delta || !duration || !easing || !interval) {
        element.volume = newVolume;
        return Promise.resolve();
    }

    const ticks = Math.floor(duration / interval);
    let tick = 1;

    return new Promise(resolve => {
        const timer = setInterval(() => {
            element.volume = originalVolume + (
                easing(tick / ticks) * delta
            );

            if (++tick === ticks + 1) {
                clearInterval(timer);
                resolve();
            }
        }, interval);
    });
}

export function swing(p: number) {
    return 0.5 - Math.cos(p * Math.PI) / 2;
}

关于javascript - HTML5 <audio> 淡入淡出播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7451508/

相关文章:

javascript - 使用 Javascript 定义表单的 html 属性,backgroundColor 属性不起作用

javascript - 验证或检查在 JavaScript 中对字符串的括号进行编码

javascript - Chartjs,使用 For-Loop 进行分散

python - 如何在 python 中将 16 位 PCM 数据转换为 float ?

python - 在 Python 中分别编辑左右音轨 channel

javascript - 这个 jQuery 验证代码有什么问题? regexp.exec(值)

javascript - 导入后如何使用全局模块?

javascript - 通过在文本区域中部分显示数据来动态显示大量文本

html - 最初在youtube iframe中显示任何点

api - 我想通过Web音频API获取当前频率