javascript
  • html
  • web-audio
  • 2013-06-26 105 views 1 likes 
    1

    我想通過拼湊示例在線跟隨教程。我覺得這應該是播放MP3文件。我使用的是Chrome瀏覽器,並且它是最新的。我沒有在控制檯上發現任何錯誤。我不確定我需要更改或添加這項工作。基本的Web音頻API不播放聲音

    <html> 
    
    <head> 
    <script type="text/javascript"> 
    var context; 
    
    var sound1Buffer = null; 
    var url = 'https://dl.dropboxusercontent.com/u/1957768/SrtV2.mp3'; 
    
    
    function init(){ 
        try { 
         window.AudioContext = window.AudioContext || window.webkitAudioContext; 
         context = new AudioContext(); 
        } 
    
        catch(e) { 
         alert("web Audio api is not supported!"); 
        } 
    } 
    
    window.addEventListener('load', init, false); 
    
    function loadDogSound(url){ 
    
        var request = new XMLHttpRequest(); 
        request.open("GET", url, true); 
        request.responseType = 'arrayBuffer'; 
    
        //decode asynchronously 
        request.onload = function(){ 
         context.decodeAudioData(request.response, function(buffer){ 
          sound1Buffer = buffer; 
    
         }, onError); 
        } 
        request.send(); 
    } 
    
    
    function playSound(sound1Buffer){ 
        var source = context.createBufferSource(); 
        source.sound1Buffer = sound1Buffer; 
    
        source.connect(context.destination);  
        source.start(0); 
    } 
    
    </script> 
    </head> 
    <body> 
    </body> 
    </html> 
    

    回答

    5

    你永遠不會打電話給loadDogSound。如果你調用它,你會發現,你得到一個錯誤:

    Uncaught ReferenceError: onError is not defined 
    

    此外,你永遠不會調用playSound

    這裏有一個工作示例:

    <html> 
    <head> 
    <script type="text/javascript"> 
        //That one url you wanted. 
        var url = 'https://dl.dropboxusercontent.com/u/1957768/SrtV2.mp3'; 
    
        /* --- set up web audio --- */ 
        //create the context 
        var context = new webkitAudioContext(); 
        //...and the source 
        var source = context.createBufferSource(); 
        //connect it to the destination so you can hear it. 
        source.connect(context.destination); 
    
        /* --- load up that buffer --- */ 
        //Basic start to ajax! (I say basic, yet i don't know it well.) 
        var request = new XMLHttpRequest(); 
        //open the request...? 
        request.open('GET', url, true); 
        //I don't even know. 
        request.responseType = 'arraybuffer'; 
        //Once the request has completed... do this 
        request.onload = function() { 
        context.decodeAudioData(request.response, function(response) { 
         /* --- play the sound AFTER we've gotten the buffer loaded --- */ 
         //set the buffer to the response we just received. 
         source.buffer = response; 
         //And off we go! .start(0) should play asap. 
         source.start(0); 
        }, function() { console.error('The request failed.'); }); 
        } 
        //Now that the request has been defined, actually make the request. (send it) 
        request.send(); 
    </script> 
    </head> 
    <body> 
    </body> 
    </html> 
    
    +0

    功能'的init()'沒有問題,如果運行的瀏覽器不支持音頻API。這讓我覺得所有的函數在加載到瀏覽器時都會運行。我必須改變'window.addEventListener'中的內容嗎?什麼是調用'loadDogSound'和'playSound'的正確方法。原諒我,但我對這個東西還很陌生。 – oxxi

    +0

    嘿,我喜歡搞亂網絡音頻API。我可以幫你嗎?我們聊聊吧? - http://chat.stackoverflow.com/rooms/32365/room-for-uber5001-and-oxxi – uber5001

    相關問題