Get/Set 我所有音频实例的全局音量

Get/Set global volume for all of my audio instances

我正在使用 jPlayer 播放我网站上的音频文件。

我创建了 mix 以实现两首歌曲之间的平滑过渡。

mix = 在降低第一个播放器的音量的同时,我正在提高另一个播放器的音量。

我正在寻找一个全局音量 属性,它会同时影响两个玩家,这样我就可以相对于他们当前的音量状态更改音量,即使他们处于中间状态混合。

我尝试按照 Jplayer 的文档中的描述使用 globalVolume,但我不明白我应该用它做什么并设置它.

我确定有更优雅的方法来访问音频 class 并请求全局音量或更改它。

MDN 上,获取实例卷的唯一方法是

var vid = document.getElementById("myAudio");
vid.volume = 0.2;

有什么建议吗?

您可以通过调用构造函数创建一个jPlayer实例:$('#myPlayerId').jPlayer({option: 'value'});.

其中一个选项是volume,它将初始音量定义为从0到1的值:$('#myPlayerId').jPlayer({volume: '0.8'});

另一种选择是globalVolume。这是一个布尔选项,它导致 volume 选项与其他启用了 globalVolume 选项的 jPlayer 实例共享。 Check out this demo page 例如,不要忘记调整音量以查看此选项的效果。

无论如何,globalVolume 属性 不是您想要的,如果您想要创建交叉淡入淡出效果(或实现一种方法来 'mix' 一个或多个音频流)。

我会做的是听 jPlayer event,更具体地说,当实例的音量发生变化时触发的那个:$.jPlayer.event.volumechange。例如:

// [...] Code to create jPlayer instances

var handleOnVolumeChange = function handleOnVolumeChange (event) {
    var targetElement = event.srcElement || event.target;
    var playerId = targetElement.id;

    // event.jPlayer contains jPlayer information
    // event.jPlayer.options: The volume and muted values are maintained here along with all the other options.
};

$('#playerOneId').bind($.jPlayer.event.volumechange, handleOnVolumeChange);
$('#playerTwoId').bind($.jPlayer.event.volumechange, handleOnVolumeChange);

在处理事件的函数中,您应该能够找出哪个玩家触发了它并做出相应的响应(例如,根据您定义的比例更改一个或多个其他玩家的音量)。

这对你有用吗?