Safari或Firefox都无法MediaElementSource
使用Web Audio API 处理音频数据.
var audioContext, audioProcess, audioSource,
result = document.createElement('h3'),
output = document.createElement('span'),
mp3 = '//www.jonathancoulton.com/wp-content/uploads/encodes/Smoking_Monkey/mp3/09_First_of_May_mp3_3a69021.mp3',
ogg = '//upload.wikimedia.org/wikipedia/en/4/45/ACDC_-_Back_In_Black-sample.ogg',
gotData = false, data, audio = new Audio();
function connect() {
audioContext = window.AudioContext ? new AudioContext() : new webkitAudioContext(),
audioSource = audioContext.createMediaElementSource( audio ),
audioScript = audioContext.createScriptProcessor( 2048 );
audioSource.connect( audioScript );
audioSource.connect( audioContext.destination );
audioScript.connect( audioContext.destination );
audioScript.addEventListener('audioprocess', function(e){
if ((data = e.inputBuffer.getChannelData(0)[0]*3)) {
output.innerHTML = Math.abs(data).toFixed(3);
if (!gotData) gotData = true;
}
}, false);
} …
Run Code Online (Sandbox Code Playgroud)这是一个显示问题的小提琴。基本上,每当调用对象createMediaElementSource
的方法时,音频元素的输出都会重新路由到返回的. 这一切都很好并且符合规范;但是,当我尝试将输出重新连接到扬声器(使用)时,没有任何反应。AudioContext
MediaElementAudioSourceNode
destination
AudioContext
我在这里遗漏了一些明显的东西吗?也许这与跨域音频文件有关?我只是在 Google 上找不到有关该主题的任何信息,并且在规范中没有看到它的注释。
小提琴的代码是:
var a = new Audio();
a.src = "http://webaudioapi.com/samples/audio-tag/chrono.mp3";
a.controls = true;
a.loop = true;
a.autoplay = true;
document.body.appendChild(a);
var ctx = new AudioContext();
// PROBLEM HERE
var shouldBreak = true;
var src;
if (shouldBreak) {
// this one stops playback
// it should redirect output from audio element to the MediaElementAudioSourceNode
// but src.connect(ctx.destination) does not fix it
src = ctx.createMediaElementSource(a);
src.connect(ctx.destination);
}
Run Code Online (Sandbox Code Playgroud)