createMediaElementSource ios safari 没有音频

Posted

技术标签:

【中文标题】createMediaElementSource ios safari 没有音频【英文标题】:createMediaElementSource ios safari no audio 【发布时间】: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>

转为假;">播放

【问题讨论】:

【参考方案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>

【讨论】:

以上是关于createMediaElementSource ios safari 没有音频的主要内容,如果未能解决你的问题,请参考以下文章

可以使用 Web Audio API 和 createMediaElementSource 分析来自 Icecast 的流式音频吗?

iOS Safari 上的 webkitAudioContext createMediaElementSource 不起作用

Java Script DOMException Web Audio API audioContext.createMediaElementSource 再次调用该函数

可以使用Web Audio API和createMediaElementSource分析来自Icecast的流式音频吗?

将audioContext转换回缓冲区

Web 音频 api 的 Soundcloud CORS 错误