Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为iOS Web应用程序优化音频_Javascript_Ios_Cordova_Audio_Web Applications - Fatal编程技术网

Javascript 为iOS Web应用程序优化音频

Javascript 为iOS Web应用程序优化音频,javascript,ios,cordova,audio,web-applications,Javascript,Ios,Cordova,Audio,Web Applications,我目前正在开发和测试一款使用Javascript和Cordova框架的iOS游戏。我试图在触摸某些节点时添加声音效果。因为节点可以以任何速率重复接触。我在用 var snd = new Audio("audio/note_"+currentChain.length+".mp3"); snd.play(); 这是我需要的,但当我启用这些效果时,我发现游戏落后了。我正在处理mp3文件,这些文件的大小已经缩小到16kb左右,但仍然存在很大的延迟 在我的情况下,优化声音的最佳方法是什么?我是否因为应用

我目前正在开发和测试一款使用Javascript和Cordova框架的iOS游戏。我试图在触摸某些节点时添加声音效果。因为节点可以以任何速率重复接触。我在用

var snd = new Audio("audio/note_"+currentChain.length+".mp3");
snd.play();
这是我需要的,但当我启用这些效果时,我发现游戏落后了。我正在处理mp3文件,这些文件的大小已经缩小到16kb左右,但仍然存在很大的延迟

在我的情况下,优化声音的最佳方法是什么?我是否因为应用程序不是本地应用程序而受到质量限制


谢谢

预加载它们并在需要时准备好它们是最好的选择。我刚刚写了一个快速的自足的结束语,我想它将向你展示你最想知道的事情

var playSound = (function () {
        var sounds = 15, // idk how many mp3 files you have
            loaded = new Array(sounds),
            current = -1,
            chain = [],
            audio,
            i;

        function incrementLoaded(index) {
            loaded[index] = true;
        }

        // preloads the sound data
        for(i = 0; i < sounds; i++) {
            audio = new Audio();
            audio.addEventListener('canplay', incrementLoaded.bind(audio, i));
            audio.src = 'audio/note_' + i + '.mp3';
            chain.push(audio);
        }

        // this will play audio only when ready and in sequential order automatically
        // or "which" index, if supplied
        return function (which) {
            if(typeof which === 'number') {
                current = which;
            } else {
                current = (current + 1) % sounds;
            }

            // only play if loaded
            if(loaded[current]) {
                chain[current].pause();
                chain[current].currentTime = 0;
                chain[current].play();
            }
        };
    }());
// would play sounds in order every second
setInterval(function () {
    playSound();
}, 1000);

如果您使用多个文件,我建议您使用声音精灵的思想将其更改为单个文件。此链接有更多详细信息:


根据我自己的经验,如果声音无法准确播放,请尝试提高文件比特率,请参阅:

谢谢您花时间这么做。我有点理解它是如何工作的,但我想知道我是如何使用它的。我复制了这个函数,并在我通常调用声音播放的地方粘贴了playSound函数调用,但没有得到任何响应。很明显,我遗漏了一些东西,只是不确定是什么。