2017-09-16 33 views
2

所以iOS的Safari瀏覽器11本來是要增加對通過Web Audio API的支持,但它似乎仍然沒有與這段JavaScript代碼的工作:無法獲取網絡音頻API與iOS Safari瀏覽器11的工作

//called on page load 
get_user_media = get_user_media || navigator.webkitGetUserMedia; 
get_user_media = get_user_media || navigator.mozGetUserMedia; 
get_user_media.call(navigator, { "audio": true }, use_stream, function() { }); 
function use_stream(stream){ 
    var audio_context = new AudioContext(); 
    var microphone = audio_context.createMediaStreamSource(stream); 
    window.source = microphone; // Workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=934512 
    var script_processor = audio_context.createScriptProcessor(1024, 1, 1); 
    script_processor.connect(audio_context.destination); 
    microphone.connect(script_processor); 
    //do more stuff which involves processing the data from user's microphone... 
} 

我複製了大部分代碼,因此我只能粗略理解它。我知道它應該(並且在其他瀏覽器上)捕獲用戶的麥克風以進一步處理。我知道代碼在var audio_context = new AudioContext();一行(因爲在運行之後沒有代碼)中斷,但沒有任何錯誤消息,因爲我沒有調試iOS Safari所需的mac(蘋果已經死機> _ <)任何人都知道發生了什麼和/或如何解決它?

E:忘了提,我看着它,顯然我需要使用Safari網絡音頻API,但是使它var audio_context = new webkitAudioContext();之前關鍵字「WebKit的」不工作,要麼

+0

將其更改爲window.webketAudioContext – user7951676

+0

是webket一個錯字? – Artikash

+1

用'''var audio_context = window.webkitAudioContext'替換'''var audio_context = new AudioContext();'但似乎並沒有幫助 – Artikash

回答

3

@TomW是右側跟蹤 - 基本上webkitAudioContext被暫停,除非它是直接響應用戶的點擊(在獲取流之前)創建的。

查看我的答案https://stackoverflow.com/a/46534088/933879瞭解更多詳情和工作示例。

+0

謝謝,現在就開始工作吧。需要將AudioContext()更改爲webkitAudioContext()和一個按鈕以恢復audio_context – Artikash

+0

有趣。我在onclick句柄上有一個帶'audioContext.resume()'的按鈕。然後,當我嘗試播放聲音時,我仍然沒有聲音。如果我檢查音頻上下文對象,它的'state'屬性是'running'。還有什麼我失蹤? –

+0

@AleksG:可能。如果狀態是「運行」,那麼你可能不會碰到這個特殊的問題,儘管很難說實際問題是什麼。 –

0

沒有什麼適用於手機保存到主屏幕應用程序。我向蘋果開發人員發佈了一個錯誤報告。得到了一個答覆,它是一個重複的(這意味着他們知道..不知道如果或何時他們將實際修復它)。