我想在左声道,右声道或两个声道中播放振荡器,为了达到这个目的,我使用了来自Web Audio Api的StereoPannerNode。 当我在Chrome上运行“离子服务”时,一切正常,但是当我在Android上测试代码时(我安装了人行横道插件),声音来自两个声道(声道中较低,我不希望声音播放)。
我也尝试过使用相同结果的Merger和Splitter节点:在Chrome上运行,在Android上不起作用。
我尝试使用Android 4.4.2的华硕ZenFone和Android 6.0的华为p8。
这就是我创建音频上下文和panner节点的方法。
var contextClass = (window.AudioContext);
var audioCtx = new contextClass();
var panNode = audioCtx.createStereoPanner();
我不知道如何解决这个问题,任何想法?
答案 0 :(得分:0)
在Android 6.0上,以下脚本有效。它使用了Web Audio API。我还没有在iOS上测试它,但我觉得它会在那里工作(如果没有,请发表评论)。
您需要在根目录中使用“omg.mp3”文件进行测试。您还应该使用Cordova进行构建,而不必担心浏览器中可能出现的CORS或同域错误
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width">
<title>StereoPannerNode example</title>
<link rel="stylesheet" href="">
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
</head>
<body>
<h1>StereoPannerNode example</h1>
<audio controls>
<source src="omg.mp3" type="audio/mp3">
<p>Browser too old to support HTML5 audio? How depressing!</p>
</audio>
<h2>Set stereo panning</h2>
<input class="panning-control" type="range" min="-1" max="1" step="0.1" value="0">
<span class="panning-value">0</span>
</body>
<script>
var audioCtx = new (window.AudioContext || window.webkitAudioContext)();
var myAudio = document.querySelector('audio');
var panControl = document.querySelector('.panning-control');
var panValue = document.querySelector('.panning-value');
// Create a MediaElementAudioSourceNode
// Feed the HTMLMediaElement into it
var source = audioCtx.createMediaElementSource(myAudio);
// Create a stereo panner
var panNode = audioCtx.createStereoPanner();
// Event handler function to increase panning to the right and left
// when the slider is moved
panControl.oninput = function() {
panNode.pan.value = panControl.value;
panValue.innerHTML = panControl.value;
}
// connect the AudioBufferSourceNode to the gainNode
// and the gainNode to the destination, so we can play the
// music and adjust the panning using the controls
source.connect(panNode);
panNode.connect(audioCtx.destination);
</script>
</html>