我知道 html5 音频的东西都是非常新的,但是有没有办法改变声音的左/右平衡?
像这样的东西:
var snd = new Audio("test.mp3");
snd.balance = -1; // only left
snd.play();
我知道 html5 音频的东西都是非常新的,但是有没有办法改变声音的左/右平衡?
像这样的东西:
var snd = new Audio("test.mp3");
snd.balance = -1; // only left
snd.play();
该<audio>
元素是一个非常基本的工具,只允许您播放/暂停播放和更改音量。如果您需要更复杂的操作,则需要使用Audio Web API
Audio Web API 的工作方式是构建一个连接在一起的节点图/链。一方面,你有你的音频源——它可以是一个音频文件或你生成的一些音频波。另一方面,您有您的音频目的地(音频接收器),它将是您的计算机扬声器/耳机。在中间,您可以放置任意数量的节点来操作音频。例如,您可以使用GainNode
来控制音量,也可以使用SterioPannerNode
来控制左右平衡。
API 非常复杂,但仅控制左右平衡非常简单:
首先,让我们创建一个<audio>
元素,以便我们可以加载声音。如果您通过 XHR 请求加载音频,或者在运行时生成声音,则不必使用该元素。<audio>
<audio src="myCoolTrack.mp3"></audio>
让我们创建一个AudioContext
并将音频从元素加载到上下文对象
// for legacy browsers
const AudioContext = window.AudioContext || window.webkitAudioContext;
const audioContext = new AudioContext();
// get the audio element
const audioElement = document.querySelector('audio');
// pass it into the audio context
const track = audioContext.createMediaElementSource(audioElement);
让我们创建一个StereoPannerNode
控制平衡的
// default pan set to 0 - center
const stereoNode = new StereoPannerNode(audioContext, { pan: 0 });
// change the value of the balance by updating the pan value
stereoNode.pan.value = -1; // left
stereoNode.pan.value = 0; // center
stereoNode.pan.value = 1; // right
将所有节点连接到单个图/链。带有输入节点(音频源)和输出节点(扬声器/耳机)。您可以在中间添加更多节点以进行其他音频操作,例如音量、过滤等。
track.connect(stereoNode).connect(audioContext.destination);
这个答案使用StereoPannerNode
单个控制平衡的AudioNode
。但是如果你想分割你的音频并分别操纵每个通道(左/右),你需要ChannelSplitterNode
和ChannelMergerNode
. 您可以在此处找到有关如何使用它们的完整示例:https ://stackoverflow.com/a/63272648/2658683
Original answer:
Currently, this is not supported.
You can check the w3c spec for supported properties and methods. Note that browsers often provide more / less or different things. But in this case: no browser supports audio balance changes.