亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Web Audio API 在 google chrome 瀏覽器中無法正常工作

Web Audio API 在 google chrome 瀏覽器中無法正常工作

阿波羅的戰車 2023-09-14 18:03:49
我創建了一個簡單的音樂播放器,它bufferArray為特定的音頻 URL 創建一個來播放音樂。它在我的許多手機瀏覽器中工作正常,所以我猜音頻 URL 不存在跨源問題。但是 chrome 不播放音頻。另外,我還創建了一個Uint8Array用于在內部繪制頻率數據的工具canvas,雖然許多瀏覽器都canvas成功地繪制了頻率圖,但 chrome 卻沒有這樣做!看看我到目前為止所嘗試過的!```<!DOCTYPE html><html><head>    <title>Page Title</title>    <meta name="viewport" content="width=device-width, initial-scale=1.0"></head><body>    <center>    <h1>Music Player</h1>    <hr>    <div id="div"></div>    <canvas></canvas>    <p>Frequency plot</p>    </center>    <script>    url = "https://dl.dropbox.com/s/5jyylqps64nyoez/Legends%20never%20die.mp3?dl=0";    const div = document.querySelector("#div");    const cvs = document.querySelector("canvas");    cvs.width = window.innerWidth - 20;    cvs.height = 200;    const c = cvs.getContext("2d");    function loadMusic(url){ div.innerHTML = "Loading music, please wait...";        const context = new AudioContext();        const source = context.createBufferSource();        const analyser = context.createAnalyser();        let request = new XMLHttpRequest();        request.open("GET",url,true);        request.responseType = "arraybuffer";        request.onload = ()=>{            div.innerHTML = "Music loaded, please wait, music will be played soon...";context.decodeAudioData(request.response,suffer=>{    source.buffer = suffer;    source.connect(context.destination);    source.connect(analyser);    analyser.connect(context.destination);    source.start();    div.innerHTML = "Music is playing... Enjoy!";    setInterval(()=>{c.clearRect(0,0,cvs.width,cvs.height);let array = new Uint8Array(analyser.frequencyBinCount);analyser.getByteFrequencyData(array);let m = 0;for(m = 0; m < array.length; m++){    let x = (parseInt(window.innerWidth -20)*m)/array.length;    c.beginPath();    c.moveTo(x,150-((100*array[m])/255));    c.lineTo((parseInt(window.innerWidth -20)*(m+1))/array.length,150-((100*array[m+1])/255));    c.lineWidth = 1;    c.strokeStyle = "black";    c.stroke();}},1);});
查看完整描述

1 回答

?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

這更多的是一些觀察結果,而不是完整的解決方案。

給出的代碼適用于 Windows 10 上的 Edge、Chrome 和 Firefox。

在 IOS 14 Safari 和 IOS 14 Chrome 上,它似乎在發出加載消息后停止了。

參考使用“跨瀏覽器”方法來創建音頻上下文,因此我添加了這一行:

?var?AudioContext?=?window.AudioContext?||?window.webkitAudioContext;

在此行之前:

?const?context?=?new?AudioContext();


這似乎在執行其余代碼時就達到了目的。然而,沒有聲音,似乎音頻沒有播放。該圖還僅顯示一條水平線。

這是IOS要求在實際播放音頻之前必須有一些用戶交互的體現嗎?

我很確定音頻已加載,因為此時有明顯的暫停。我懷疑必須有一個按鈕,單擊該按鈕后實際上會開始播放。


查看完整回答
反對 回復 2023-09-14
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號