播放带有 HTML 音频标签的二进制字符串

tra*_*off 6 html javascript audio http angularjs

我有一个服务器,它向使用 http GET 请求它的客户端提供 ogg 编码的音频。如果我将 GET 路由注入 HTML 音频 src,它会接收音频并播放它:

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

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

};
Run Code Online (Sandbox Code Playgroud)

如果我使用 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();

};
Run Code Online (Sandbox Code Playgroud)

响应日志显示一个 JSON,在 'data' 键处有一个二进制字符串:

Object {data: "OggS?1?/? OpusHead??]OggS…?xs?????????????????????????????????", status: 200, config: Object, statusText: "OK"}
Run Code Online (Sandbox Code Playgroud)

有没有办法将 http GET 响应解码为我可以注入音频 src 的内容?

tra*_*off 4

我终于成功地用这段代码做到了:

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();
    })
};
Run Code Online (Sandbox Code Playgroud)

  • 您从响应处理代码中的哪里获取音频变量? (3认同)