最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決Babylon.js中AudioContext was not allowed to start異常問題

 更新時間:2023年04月03日 14:52:13   作者:方寸匠心  
這篇文章主要介紹了解決Babylon.js中AudioContext was not allowed to start異常問題方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

BabylonJS中使用音頻引擎時遇到錯誤

當在BabylonJS中使用音頻引擎時,可能會遇到以下錯誤:

audioEngine.ts:172 The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu

這個錯誤是因為瀏覽器的安全策略要求音頻上下文必須在用戶事件(例如單擊、鍵盤按鍵等)中啟用。這意味著,如果您嘗試在沒有用戶事件的情況下自動播放音樂,則會拋出此錯誤。

為了解決這個問題,我們需要啟用音頻上下文。在BabylonJS中,可以通過AudioEngine()類來創(chuàng)建音頻上下文。

您可以使用以下代碼在用戶事件觸發(fā)后啟用音頻上下文:

let audioContext = new AudioEngine().audioContext;
audioContext.resume();

在以上示例中,我們創(chuàng)建了一個AudioEngine實例,并從中獲取了音頻上下文。接下來,我們調(diào)用resume()方法啟用音頻上下文。請注意,在啟用之前,必須先檢查音頻上下文是否存在。如果不存在,則需要將其創(chuàng)建。

這樣就可以成功地啟用音頻上下文,然后您可以在BabylonJS中播放音頻文件而不會遇到錯誤。

示例源碼(修改前):

playingSoundSprites = (scene: Scene, canvas: HTMLCanvasElement) => {
        var freeCamera = new FreeCamera("freeCamera", new Vector3(0, 0, 0), scene);
        var theSound = new Sound("allSounds", "https://playground.babylonjs.com/sounds/6sounds.mp3", scene, null, {autoplay: false});
        var isPlaying = 0;
        let audioContext = new AudioEngine().audioContext;
        var soundArray = [
            [0.0, 5.000],
            [5.100, 6.600],
            [12.000, 1.600],
	        [14.000, 9.200],
	        [23.000, 7.900],
	        [31.000, 2.800],
        ];
        theSound.onended = function() {
            isPlaying = 0;
            console.log("not playing");
        };
        var advanceTexture = AdvancedDynamicTexture.CreateFullscreenUI("UI");
        var uiPanel = new StackPanel();
        uiPanel.width = "220px";
        uiPanel.fontSize = "14px";
        uiPanel.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;
        uiPanel.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;
        advanceTexture.addControl(uiPanel);
        var button = Button.CreateSimpleButton("but", "Play All Sounds");
        button.paddingTop = "10px";
        button.width = "150px";
        button.height = "50px";
        button.color = "white";
        button.background = "green";
        button.onPointerDownObservable.add(function() {
            if (isPlaying === 0) {
                isPlaying = 1;
                theSound.play();
                console.log("playing");
            }
        });
        uiPanel.addControl(button);
        var button1 = Button.CreateSimpleButton("but1", "Play Random Sound");
        button1.paddingTop = "10px";
        button1.width = "150px";
        button1.height = "50px";
        button1.color = "white";
        button1.background = "green";
        button1.onPointerDownObservable.add(function() {
            if (isPlaying === 0) {
                isPlaying = 1;
                var randomSound = Math.floor(Math.random() * 6);
                theSound.play(0, soundArray[randomSound][0], soundArray[randomSound][1]);
                console.log("playing");
            }
        });
        uiPanel.addControl(button1);
        return scene;
    }

運行結(jié)果如下:

不能播放聲音,在瀏覽器控制臺

查看日志如下:

The AudioContext was not allowed to start. It must be resumed (or created) after a user gesture on the page. https://goo.gl/7K7WLu

示例源碼(修改后):

playingSoundSprites = (scene: Scene, canvas: HTMLCanvasElement) => {
        var freeCamera = new FreeCamera("freeCamera", new Vector3(0, 0, 0), scene);
        var theSound = new Sound("allSounds", "https://playground.babylonjs.com/sounds/6sounds.mp3", scene, null, {autoplay: false});
        var isPlaying = 0;
        var soundArray = [
            [0.0, 5.000],
            [5.100, 6.600],
            [12.000, 1.600],
	        [14.000, 9.200],
	        [23.000, 7.900],
	        [31.000, 2.800],
        ];
        theSound.onended = function() {
            isPlaying = 0;
            console.log("not playing");
        };
        var advanceTexture = AdvancedDynamicTexture.CreateFullscreenUI("UI");
        var uiPanel = new StackPanel();
        uiPanel.width = "220px";
        uiPanel.fontSize = "14px";
        uiPanel.horizontalAlignment = Control.HORIZONTAL_ALIGNMENT_CENTER;
        uiPanel.verticalAlignment = Control.VERTICAL_ALIGNMENT_CENTER;
        advanceTexture.addControl(uiPanel);
        var button = Button.CreateSimpleButton("but", "Play All Sounds");
        button.paddingTop = "10px";
        button.width = "150px";
        button.height = "50px";
        button.color = "white";
        button.background = "green";
        button.onPointerDownObservable.add(function() {
            let audioContext = new AudioEngine().audioContext;
            audioContext!.resume().then(() => {
                if (isPlaying === 0) {
                    isPlaying = 1;
                    theSound.play();
                    console.log("playing");
                }
            });
        });
        uiPanel.addControl(button);
        var button1 = Button.CreateSimpleButton("but1", "Play Random Sound");
        button1.paddingTop = "10px";
        button1.width = "150px";
        button1.height = "50px";
        button1.color = "white";
        button1.background = "green";
        button1.onPointerDownObservable.add(function() {
            let audioContext = new AudioEngine().audioContext;
            audioContext!.resume().then(() => {
                if (isPlaying === 0) {
                    isPlaying = 1;
                    var randomSound = Math.floor(Math.random() * 6);
                    theSound.play(0, soundArray[randomSound][0], soundArray[randomSound][1]);
                    console.log("playing");
                }
            });
        });
        uiPanel.addControl(button1);
        return scene;
    }

以上就是解決Babylon.js中AudioContext was not allowed to start異常問題的詳細內(nèi)容,更多關(guān)于解決Babylon.js異常的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • electron-builder允許安裝時請求提升權(quán)限的場景分析

    electron-builder允許安裝時請求提升權(quán)限的場景分析

    electron-builder 作為一個用于 Electron 應(yīng)用程序打包的工具,需要下載并使用 Electron 運行時來創(chuàng)建可執(zhí)行文件,這篇文章給大家介紹electron-builder允許安裝時請求提升權(quán)限的相關(guān)知識,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • bootstrap-table后端分頁功能完整實例

    bootstrap-table后端分頁功能完整實例

    這篇文章主要介紹了bootstrap-table后端分頁功能,結(jié)合完整實例形式分析了bootstrap-table后端請求、數(shù)據(jù)分頁功能具體步驟與實現(xiàn)技巧,需要的朋友可以參考下
    2020-06-06
  • 有關(guān)suggest快速刪除后仍然出現(xiàn)下拉列表的bug問題

    有關(guān)suggest快速刪除后仍然出現(xiàn)下拉列表的bug問題

    寫suggest的時候,有時我們快速刪除輸入框的文字后,但是suggest下拉列表還有出現(xiàn),導(dǎo)致的原因是因為ajax異步請求造成的,下面通過本文給大家分享下解決方法,感興趣的朋友一起看看
    2016-12-12
  • JavaScript如何實現(xiàn)LRU緩存淘汰算法

    JavaScript如何實現(xiàn)LRU緩存淘汰算法

    LRU(Least Recently Used)緩存淘汰算法是一種常見的緩存淘汰策略,它的核心思想是優(yōu)先淘汰最近最少使用的緩存數(shù)據(jù),以保證緩存中的數(shù)據(jù)始終是最熱門的。本文主要介紹了一些關(guān)于如何實現(xiàn)LRU緩存淘汰算法的方法,感興趣的小伙伴可以參考一下
    2023-04-04
  • js實現(xiàn)ATM機存取款功能

    js實現(xiàn)ATM機存取款功能

    這篇文章主要為大家詳細介紹了js實現(xiàn)ATM機存取款功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • 微信小程序?qū)崿F(xiàn)頂部固定 底部分頁滾動效果

    微信小程序?qū)崿F(xiàn)頂部固定 底部分頁滾動效果

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)頂部固定底部分頁滾動效果,本文大概給大家分享三種解決方案,每種方案給大家詳細剖析通過代碼解析哪種方案更適合,感興趣的朋友跟隨小編一起看看吧
    2022-10-10
  • JS實現(xiàn)圖表日期分類按色顯示效果

    JS實現(xiàn)圖表日期分類按色顯示效果

    這篇文章主要介紹了JS實現(xiàn)圖表日期分類按色顯示,文中需要注意若 iOS 手機預(yù)覽時顯示NaN ,可能是時間格式的問題,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2024-05-05
  • JS獲取文件大小方法小結(jié)

    JS獲取文件大小方法小結(jié)

    這篇文章主要介紹了JS獲取文件大小的方法,結(jié)合實例總結(jié)分析了JavaScript獲取文件大小的常用技巧,并給出了判斷文件格式與大小的完整實例供讀者參考,需要的朋友可以參考下
    2015-12-12
  • js實現(xiàn)消滅星星(web簡易版)

    js實現(xiàn)消滅星星(web簡易版)

    這篇文章主要為大家詳細介紹了js實現(xiàn)web簡易版的消滅星星,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • JS+Ajax實現(xiàn)百度智能搜索框

    JS+Ajax實現(xiàn)百度智能搜索框

    現(xiàn)在遇到這樣的需求,要求輸入一個a之后會出現(xiàn)包含a的下拉列表,當我們點擊某一個的時候,搜索框中就會出現(xiàn)點擊的值。下面小編給大家分享同js和ajax實現(xiàn)百度智能搜索框,需要的的朋友參考下實現(xiàn)代碼
    2017-08-08

最新評論

阳朔县| 鲁山县| 读书| 高雄县| 垫江县| 武安市| 万源市| 娄底市| 肃宁县| 石台县| 枝江市| 墨竹工卡县| 湖北省| 沁水县| 灯塔市| 句容市| 公安县| 阿巴嘎旗| 武冈市| 荥经县| 利川市| 苍溪县| 韩城市| 博客| 涞水县| 盐城市| 张家港市| 江达县| 威远县| 五寨县| 渭源县| 偃师市| 多伦县| 镇安县| 三河市| 蚌埠市| 资阳市| 石阡县| 西华县| 嘉善县| 普定县|