Google Cloud Text-to-Speech 读取输出数据文件并通过 Node.js 在媒体播放器中输出语音 API

Google Cloud Text-to-Speech to read output data file and output the speech in media player through Node.js API

我正在尝试使用 Google texttospeech Wavenet 语音创建文本到语音的音频文件。

同时我想让设备扬声器输出语音。

换句话说,在生成 mp3 文件时,设备应输出音频。 我在 audioConfig 中尝试了 effectsProfileId 的各种组合,但似乎没有任何效果

以下代码创建一个 mp3 文件。但是没有音频输出。一切正常,除了在生成 mp3 文件时设备扬声器没有声音。

const textToSpeech = require('@google-cloud/text-to-speech');
const fs = require('fs');
const util = require('util');

const client = new textToSpeech.TextToSpeechClient();

//Some text
const text1 = 'The rain in Spain stays mainly on the plain';

//define path to output mp3 file
const outputFile = './audiofiles/sample1.mp3';

//set environment variable
process.env.GOOGLE_APPLICATION_CREDENTIALS = "./key/runningzebra-7d04161f3149.json";


//define a voice
const voice1 = {
  languageCode:"en-US",
  ssmlGender:"MALE",
  name:"en-US-Wavenet-B"
}

//Define an audioConfig
//This should generate audio output on the device speakers
//But that is not working
const audioConfig1 = {
  effectsProfileId: ["headphone-class-device", "large-automotive-class-device", "telephony-class-application"],
  pitch: -10.0,
  speakingRate: 0.75,
  audioEncoding: "MP3"
}

const input1 = {
  text:text1
}

//Define a request
const request = {
  input:input1, voice:voice1, audioConfig:audioConfig1
}

async function getAudio(request, outputFile) {
    const [response] = await client.synthesizeSpeech(request);
    const writeFile = util.promisify(fs.writeFile);
    await writeFile(outputFile, response.audioContent, 'binary');
    console.log(`Audio content written to file: ${outputFile}`);
}



getAudio(request, outputFile);

有什么建议

无法使用 Cloud Text-to-Speech 进行实时转换 API。因为它提供了一个可播放的音频文件作为输出。但是,您可以在执行代码后下载转换后的音频文件。我已经通过更改您的代码在 Linux 中测试了您的非实时要求,并且我能够读取和播放转换后的音频文件。在执行代码之前,请先安装以下软件包:

  • 通过在终端中执行以下命令来安装 Audacious 包。
sudo apt-get install audacious
  • 通过在终端中执行以下命令安装 play-sound 包。
npm install play-sound

试试下面的代码:

const textToSpeech = require('@google-cloud/text-to-speech');
const fs = require('fs');
const util = require('util');

const client = new textToSpeech.TextToSpeechClient();

//Some text
const text1 = 'The rain in Spain stays mainly on the plain.';

//define path to output mp3 file
const outputFile = 'sample1.mp3';

//set environment variable
//process.env.GOOGLE_APPLICATION_CREDENTIALS = "./Composer/key.json";

//define a voice
const voice1 = {
 languageCode:"en-US",
 ssmlGender:"MALE",
 name:"en-US-Wavenet-B"
}

//Define an audioConfig
//This should generate audio output on the device speakers
//But that is not working
const audioConfig1 = {
 effectsProfileId: ["headphone-class-device", "large-automotive-class-device", "telephony-class-application"],
 pitch: -10.0,
 speakingRate: 0.75,
 audioEncoding: "MP3"
}

const input1 = {
 text:text1
}

//Define a request
const request = {
 input:input1, voice:voice1, audioConfig:audioConfig1
}

async function getAudio(request, outputFile) {
   const [response] = await client.synthesizeSpeech(request);
   const writeFile = util.promisify(fs.writeFile);
   await writeFile(outputFile, response.audioContent, 'binary');
   console.log(`Audio content written to file: ${outputFile}`);
}

getAudio(request, outputFile);


//play-sound is used for to play the audio file
//I have passed “audacious” as a player for play sound. You can also pass other media players into this. 
var player = require('play-sound')({player:"audacious"}) 

player.play(outputFile, function (err) {  
  if (err) throw err;
  console.log("Audio finished");
});