【问题标题】:createMediaElementSource ios safari no audiocreateMediaElementSource ios safari 没有音频
【发布时间】:2022-01-05 07:00:05
【问题描述】:

我正在使用此代码播放音频,在 ios chrome 上运行良好,但在 safari 上却不行。谁能知道可能是什么问题?

   var audio, gainNode, audioContext;
    audio = new Audio();
     audio.crossOrigin = "anonymous";

    function playme() {

        audio.src = "https://greggman.github.io/doodles/sounds/DOCTOR VOX - Level Up.mp3";

        audioContext = new (window.AudioContext || window.webkitAudioContext)();

        var source = audioContext.createMediaElementSource(audio);
                
        gainNode = audioContext.createGain();

        source.connect(gainNode);
        gainNode.connect(audioContext.destination);

        gainNode.gain.value = 1; 

        try {
             audio.play();
         } catch (e) {
             console.log(e);
        }

                
    }
<a href="#" onclick="playme();return false;">play</a>

转为假;">播放

【问题讨论】:

    标签: ios safari web-audio-api


    【解决方案1】:

    在 Safari 15.1 上测试,结果很奇怪。 Safari 首先在audio.volume 播放一些样本,然后gainNode.gain.value 音量开始播放。

    const audio = new Audio()
    const audioSrc = 'https://greggman.github.io/doodles/sounds/DOCTOR VOX - Level Up.mp3'
    const audioCtx = new (AudioContext || webkitAudioContext)()
    const sourceNode = audioCtx.createMediaElementSource(audio);
    const gainNode = audioCtx.createGain();
    
    audio.volume = 1  // gainNode will override volume
    audio.autoplay = false
    audio.crossOrigin = 'anonymous'
    
    sourceNode.connect(gainNode);
    gainNode.connect(audioCtx.destination);
    gainNode.gain.value = 0.5; 
    
    const play = async () => {
      await stop()
      audio.src = audioSrc
      audio.oncanplaythrough = async event => {
        console.log(event.type)
        await audioCtx.resume()
        audio.play()
      }
    }
    
    const stop = () => {
      return Promise.all([
        audio.pause(),
        audioCtx.suspend(),
      ])
    }
    
    document.querySelector('#play').onclick = play
    document.querySelector('#stop').onclick = stop
    button { padding: 1em 2em; }
    <button id="play">Play</button>
    <button id="stop">Stop</button>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      • 2019-06-12
      • 2020-08-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多