簡體   English   中英

在Node.js中解析Watson TTS HTTP響應

[英]Parsing Watson TTS HTTP response in nodejs

由於IBM更改了Watson的身份驗證方法,因此我們試圖在代碼中實現該方法,但是我們無法使用其SDK或原始Websocket從TTS服務接收任何數據。

唯一可行的就是在HTTP API,它返回像一個響應 它不是有效的json,也不是緩沖區。

我們已經在nodejs SDK中打開了一個問題 ,但是現在我們想使用HTTP API。

這是獲得類似響應的方法:

let requestPromise = require('request-promise-native');
let fs = require("fs")

let postData = {
    "grant_type":"urn:ibm:params:oauth:grant-type:apikey",
    "apikey":"<api_key>"
};

let opts = {
    uri : "https://iam.bluemix.net/identity/token",
    headers : {
        "Content-Type": "application/x-www-form-urlencoded",
        "Accept": "application/json"
    },
    method: "POST",
    form: postData
}

requestPromise(opts).then((body)=>{
    let token = JSON.parse(body).access_token;

    let postData = {
        "text": 'Hello world',
        "accept": 'audio/mp3',
        "voice": 'en-US_AllisonVoice'
    };

    let opts = {
        uri : "https://gateway-syd.watsonplatform.net/text-to-speech/api/v1/synthesize",
        headers : {
            "Content-Type": "application/json",
            "Accept": "application/json",
            // "Accept": "audio/mp3",
            'Content-Length' : Buffer.byteLength(JSON.stringify(postData)),
            "Authorization": "Bearer "+token
        },
        method: "POST",
        json: postData
    }

    requestPromise(opts).then((body)=>{
        let chunkStream = fs.createWriteStream('./audio.mp3')
        let buf = Buffer.from(body, 'base64')
        chunkStream.write(buf)
    }).catch((err)=>{
        if (err) throw err;
    })
}).catch((err)=>{
    if (err) throw err;
})

我們不知道如何處理該響應,並將其作為base64緩沖區保存到mp3中,產生損壞的音頻文件,如果您將響應直接保存到該文件或將Accept標頭更改為audio/mp3 我們甚至嘗試通過mp3val運行音頻文件,該文件解決了許多類似的問題,但是那也不起作用。

您可以使用官方節點api獲得結果:

npm install --save watson-developer-cloud

在那之后

var TextToSpeechV1 = require('watson-developer-cloud/text-to-speech/v1');
var fs = require('fs');

var textToSpeech = new TextToSpeechV1({
  iam_apikey: 'API_KEY',
  url: 'https://gateway-syd.watsonplatform.net/text-to-speech/api/'
});

var synthesizeParams = {
  text: 'How are you doing?',
  accept: 'audio/wav',
  voice: 'en-US_AllisonVoice'
};


textToSpeech.synthesize(synthesizeParams, function (err, audio) {
  if (err) {
    // do something
    console.log('failure');
    return;
  }

  fs.writeFileSync('result-audio.wav', audio);
  console.log('scuccess');
  });

請注意,將其包裝到TextToSpeechV1更改鏈接,因為/ v1 / synthesize隱式調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM