2016-04-20 3 views
2

Ich habe einen Server, der Ogg-codierte Audiodaten an einen Client bereitstellt, der ihn mit einem http GET anfordert. Wenn ich injizieren die GET-Route in den HTML-Audio-src es das Audio empfängt und spielt sie:Eine binäre Zeichenfolge mit dem HTML-Audio-Tag wiedergeben

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

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

}; 

Wenn ich einen http-GET-Aufruf (in AngularJS) verwenden und versuchen, die Antwort in den HTML-Audio-src zu injizieren es wird es nicht spielen:

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(); 

}; 

Das Protokoll der Antwort auf die ‚Daten‘ eine JSON mit einem Binärkette zeigt Schlüssel:

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

gibt es einen Weg, um die hTTP-GET-Antwort int zu dekodieren o etwas, was ich in die audio src injizieren kann?

+1

Ich weiß nicht über eckig, aber mit XMLHttpRequest, yo Sie können ihren '.responseType' auf' 'blob '' setzen und dann aus dieser Blob-Antwort ('URL.createObjectURL (this.response)') eine 'objectURL' erzeugen, die Sie als' src' übergeben können von Ihrem Audioelement. Wenn Ihre Zielbrowser die AudioContextAPI unterstützen, können Sie andernfalls die Methode ['AudioContext.decodeAudioData()'] (https://developer.mozilla.org/en-US/docs/Web/API/AudioContext/decodeAudioData) verwenden . – Kaiido

+0

Danke, deine Antwort hat mir sehr geholfen. – trahloff

Antwort

0

ich es endlich geschafft, zu tun es mit diesem Code:

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

Woher beziehen Sie die Audio-Variable aus dem Antwort-Code? –

0

in http.get können Sie eine dict mit optionalen Konfigurations passieren

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

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

vielleicht haben Sie dies mit dem Kommentar von @kaiido kombinieren

Verwandte Themen