2016-04-20 20 views
2

我有一臺服務器將ogg編碼的音頻提供給客戶端,該客戶端使用http GET請求該音頻。 如果我注入了GET路線到它接收到的音頻並在HTML音訊源:播放HTML音頻標記的二進制字符串

function working(text) { 
    var downloadURL = 'http://localhost:8080/nlc/synthesize' + 
     '?text=' + encodeURIComponent(text); 

    audio.pause(); 
    audio.src = downloadURL; 
    audio.play(); 

}; 

如果我使用一個HTTP GET調用(在AngularJS),並嘗試注入的響應到HTML音頻SRC它不會玩:

function not_working(text) { 
    $http.get('http://localhost:8080/nlc/synthesize' + '?text=' + encodeURIComponent(text)).then(function(response) { 
     console.log(response); 
     audio.pause(); 
     audio.src = encodeURIComponent(response); 
     audio.play(); 

}; 

響應的日誌顯示有一個二進制字符串JSON在「數據」鍵:

Object {data: "OggS�1�/ڂ OpusHead��]OggS…�xs���������������������������������", status: 200, config: Object, statusText: "OK"} 

有沒有辦法來解碼HTTP GET響應INT o我可以注入音頻src?

+1

我不知道角度,但與XMLHttpRequest,喲你可以將'.responseType'設置爲'「blob」,然後從這個blob響應中創建一個'objectURL'('URL.createObjectURL(this.response)'),你可以通過'src'您的音頻元素。否則,如果您的目標瀏覽器確實支持AudioContextAPI,則可以使用['AudioContext.decodeAudioData()'](https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/decodeAudioData)方法。 – Kaiido

+0

謝謝,你的回答幫了我很多。 – trahloff

回答

0

我終於成功地做了評論此結合它與此代碼:

function working(text) { 
    var url = 'http://localhost:8080/nlc/synthesize'; 
    var req = { 
     method: 'POST', 
     url: url, 
     responseType: 'blob', 
     data: { 
      "text": text 
     }, 
     headers: { 
      'Content-Type': 'application/json', 
     } 
    } 

    $http(req).then(function(response) { 
     console.log(response); 
     audio.pause(); 
     audio.src = URL.createObjectURL(response.data); 
     audio.play(); 
    }) 
}; 
+1

你從哪裏獲取響應處理代碼中的音頻變量? –

0
在http.get

你可以傳遞一個字典可選配置

$http.get(Url, { 
    transformRequest: angular.identity, 
    headers: {'Content-Type': undefined} 
}) 
.success(function(){ 
}) 
.error(function(){ 
}); 

https://docs.angularjs.org/api/ng/service/ $ HTTP

也許你可以用@kaiido的