首页 > 解决方案 > 我保存了从响应中获得的音频文件,但它不播放

问题描述

我正在使用文本转语音 API。在 postman 上,直接调用 API 时,可以在 postman 中播放返回的音频文件。但是当我通过我的节点服务器调用 API 并保存它时,文件不会播放。

我尝试将文件保存在两者中mp3mpeg但都无法播放。

app.post("/", (req, res) => {
  req.on("data", (data, err) => {
    let body = JSON.parse(data);
    body = querystring.stringify(body);
    request(
      {
        headers: {
          "X-NCP-APIGW-API-KEY-ID": "123123",//dummy variable
          "X-NCP-APIGW-API-KEY": "123123",//dummy variable
          "Content-Type": "application/x-www-form-urlencoded"
        },
        uri: "https://naveropenapi.apigw.ntruss.com/voice/v1/tts",
        timeout: 100000,
        method: "POST",
        body
      },
      (err, response, body) => {
        console.log(body);
        if (err) res.status(400).send(err);
        else {
          fs.writeFile("./src/temp/file.mpeg", body, err => {
            if (err) console.log(err);
            res.status(200).send("success");
          });
        }
      }
    );
  });
});

这是邮递员的输入和结果(标题等同于上面的代码):KEY-ID ,clientSecret`

在此处输入图像描述 该代码确实将 a 保存file.mpeg在正确的目录中,但无法播放音频。

下面是console.log(body). 如您所见,有些东西坏了。 在此处输入图像描述

如果我替换body = querystring.stringify(body)let {body} = req,我会收到以下错误:

_http_outgoing.js:595
    throw new ERR_INVALID_ARG_TYPE('first argument',
    ^

TypeError [ERR_INVALID_ARG_TYPE]: The first argument must be one of type string or Buffer. Received type object
    at write_ (_http_outgoing.js:595:11)
    at ClientRequest.write (_http_outgoing.js:567:10)
    at Request.write (C:\Users\Sihoon Kim\Desktop\development\ZEPETO\node_modules\request\request.js:1500:27)
    at end (C:\Users\Sihoon Kim\Desktop\development\ZEPETO\node_modules\request\request.js:549:18)
    at Immediate.<anonymous> (C:\Users\Sihoon Kim\Desktop\development\ZEPETO\node_modules\request\request.js:578:7)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)

标签: node.jsaudiofilesystems

解决方案


推荐阅读