0

iOS6 で WebAudio API を使用していくつかのテストを実行していました。ボタンをクリックすると、AudioBufferSourceNode が正しく作成され、Contexts の宛先に接続されるようです。

iOS6 デバイスは SourceNode を正しく構築しているように見えるため、ページが読み込まれたときにサウンドを自動的に再生する方法があるかどうか単純に疑問に思っていましたが、サウンドは出ません。

私は以下のコードを投稿しました:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>HTML 5 WebAudio API Tests</title>

    <script type="text/javascript">
        var audioContext,
            audioBuffer;

        function init() {
            try {
                audioContext = new webkitAudioContext();
                initBuffer('resources/dogBarking.mp3');
            } catch(e) {
                console.error('webkitAudioContext is not supported in this browser');
            }
        }

        function initBuffer(desiredUrl) {
            var url = desiredUrl || '';
            var request = new XMLHttpRequest();
            request.open("GET", url, true);
            request.responseType = "arraybuffer";
            request.onload = function() {
                audioContext.decodeAudioData(request.response, function(buffer) {
                    audioBuffer = buffer;
                }, onError);
            }

            request.send();
        }

        function playSound(startTime, endTime) {
            var audioSource = audioContext.createBufferSource();
            audioSource.buffer = audioBuffer;
            audioSource.connect(audioContext.destination);
            audioSource.noteOn(0);
            audioSource.noteOff(10);
        }
    </script>
</head>

<body onload="init()">
    <script type="text/javascript">
        (function() { 
            var buttonNode = document.createElement('input');
            buttonNode.setAttribute('type', 'button');
            buttonNode.setAttribute('name', 'playButton');
            buttonNode.setAttribute('onclick', 'playSound(0, 1)')
            buttonNode.setAttribute('value', 'playSound()');
            document.body.appendChild(buttonNode);

            document.write('<a id="test" onclick="playSound(0, 2)">hello</a>');

            var testLink = document.getElementById('test');
            var dispatch = document.createEvent('HTMLEvents');
            dispatch.initEvent("click", true, true);
            testLink.dispatchEvent(dispatch);
        }());
    </script>
</body>
</html>

これが理にかなっていることを願っています。よろしく、ジェイミー。

4

1 に答える 1

0

この質問はiOS 6 Web Audio API で音が出ないとよく似ています。WebAudio API はユーザー入力を初期化する必要があり、最初のサウンドがこのように再生された後、WebAudioAPI は現在のセッション中に必要なアクションなしで大幅に機能します。

次のように、リスナーを最初のウィンドウの touchstart イベントに追加することで、API を初期化できます。

w.addEventListener('touchstart', myFunctionThatPlaysAnyWebAudioSound);
于 2012-11-14T01:07:20.387 に答える