【问题标题】:Java Script DOMException Web Audio API audioContext.createMediaElementSource call again the functionJava Script DOMException Web Audio API audioContext.createMediaElementSource 再次调用该函数
【发布时间】:2017-12-31 15:47:26
【问题描述】:

大家好,我需要你们的帮助 我有下一个功能,这是第一次按下按钮,但我再次按下按钮音频不起作用。 控制台日志是这样的:未捕获的 DOMException:无法在“BaseAudioContext”上执行“createMediaElementSource”:HTMLMediaElement 之前已连接到不同的 MediaElementSourceNode。 在 cargar_audio1

¿如何解决这个问题并在每次按下按钮时加载视频?

我使用的代码是这样的:

 document.getElementById('audio1').addEventListener('click', function() {
 var mediaElement1 = document.getElementById("ad1"); 
 mediaElement1.src = "audio1.mp3";
 load_audio1();
 });


 var analyser, source;
 function load_audio1() {
 var audio1 = document.getElementById('ad1');
 var audioContext = new AudioContext();
 analyser = audioContext.createAnalyser();
 analyser.minDecibels = -60;
 analyser.maxDecibels = -10;  
 analyser.fftSize = 32;
 source = audioContext.createMediaElementSource(audio1);
 source.connect(analyser);
 analyser.connect(audioContext.destination); 
 audio1.play();
 view_dat_audio();
 }

【问题讨论】:

  • define var audioContext = new AudioContext();在点击事件和函数 load_audio1() 之外
  • 坦克 Marouen Mhiri 但没有工作:(

标签: javascript


【解决方案1】:

假设“每次按下按钮时加载视频”意味着您希望在每次触发 audio1 上的点击事件时播放音频文件 audio1.mp3,您可以执行以下操作:

为了播放文件你需要做两件事:

  1. 初始化音频图(创建分析器节点并将其连接到音频源等)
  2. 在图上调用 play()

现在您在load_audio1() 中一步完成此操作,解决方案是将初始化和对play() 的调用分开,并在必要时只在开始时进行一次初始化。

大概是这样的:

document.getElementById('audio1').addEventListener('click', clickHandler);

function clickHandler() {
    if (!audioGraphIsInitialized()) {
        initAudioGraph();
    }

    audio1.play();
}

【讨论】:

  • 如何用分析仪连接音频文件?
  • 或其他选项来收听浏览器中的任何声音
  • 我已经更新了答案。这应该显示了原理,您只需将代码从上面移动到函数initAudioGraph() 而不调用play() 并创建一个新函数audioGraphIsInitialzed() 来测试initAudioGraph() 是否已经被调用。
  • 感谢尝试我的建议,目前我不得不以非正统的方式尝试使用 iframe 为页面充电 XD
猜你喜欢
  • 2021-01-03
  • 2021-05-16
  • 2011-01-30
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
相关资源
最近更新 更多