我試圖從http請求中得到一個數組緩衝區,這個請求明確地說是一個數組緩衝區。然而,我沒有設法做到這一點,關於這個問題的文件是相當稀缺的。Http,你如何處理角度2中的非文本響應?
let headers = new Headers({'Content-Type': "audio/mpeg"});
let options = new RequestOptions({responseType: ResponseContentType.ArrayBuffer, headers: headers });
this.http.get("http://localhost:4200/piano/A4.mp3")
.subscribe((response)=> this.play(response));
但我無法設法從響應中獲取數組緩衝區。控制檯中的響應主體無法識別,因此我認爲它必須是正確的格式。此外,響應的內容類型確實是「音頻/ mpeg」。
編輯:這裏是未來的讀者
play(arrBf) {
this.audioContext.decodeAudioData(arrBf, (buffer) => {
let source = this.audioContext.createBufferSource();
source.buffer = buffer;
source.connect(this.audioContext.destination);
source.start(0);
});
}
loadSounds(){
let options = new RequestOptions({responseType: ResponseContentType.ArrayBuffer});
this.http.get("http://localhost:4200/assets/piano/A4.mp3", options)
.map(r => r.arrayBuffer())
.subscribe((d)=> { this.play(d)});
}
,並定義構造函數或smtg音頻方面的一些工作代碼:
constructor(private http:Http) {
let AudioContext_ = AudioContext || webkitAudioContext;
this.audioContext = new AudioContext_();
}
你嘗試沒有括號'新的Blob(response.blob(),{type:'audio/mpeg'})'? – PierreDuc
但是如果你做了response.blob(),你爲什麼要把它放在一個新的Blob調用中?也許你可以使用'response.arrayBuffer()'來啓動blob – PierreDuc
讓我把它製作成答案:) – PierreDuc