node.js - Google Cloud Text-to-Speech 通过 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
- 通过在终端中执行以下命令来安装播放声音包。
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");
});
推荐阅读
- winapi - 进程运行时如何在记事本中单击“菜单”?
- c - 如何在c中malloc一个表?
- python - pandas填写log数据中没有记录的日期
- sql - SAP DBTech JDBC:[257]:sql 语法错误:“:OT”附近的语法不正确
- laravel-8 - Laravel 8 SQLSTATE [42S02]:找不到基表或视图:1146 表 'dummydb.users' 不存在
- mysql - 如何在 MySQL 中显示一个表中的所有行并从另一个表中计数
- python - python数据框并用不均匀的时间序列绘制
- hibernate - 如何在 JPA 中使用规范进行左连接、分组、计数和 IN 子句?
- keras - 如何将 decode_batch_predictions() 方法添加到 Keras Captcha OCR 模型中?
- java - Spring Boot 说没有可用的名为“entityManagerFactory”的bean