Javascript Google文本到语音-从txt文件的各行加载文本

Javascript Google文本到语音-从txt文件的各行加载文本,javascript,node.js,json,text-to-speech,google-text-to-speech,Javascript,Node.js,Json,Text To Speech,Google Text To Speech,我正在Node.js中使用Google TextToSpeech API从文本生成语音。我能够得到一个输出文件,其名称与为演讲生成的文本相同。然而,我需要稍微调整一下。我希望我能同时生成多个文件。重点是,例如,我有5个单词(或句子)要生成,例如猫、狗、房子、天空、太阳。我想将它们分别生成一个单独的文件:cat.wav、dog.wav等 我还希望应用程序能够从*.txt文件中读取这些单词(每个单词/句子位于*.txt文件的单独一行) 有这种可能性吗?下面我将粘贴我正在使用的*.js文件代码和*.j

我正在Node.js中使用Google TextToSpeech API从文本生成语音。我能够得到一个输出文件,其名称与为演讲生成的文本相同。然而,我需要稍微调整一下。我希望我能同时生成多个文件。重点是,例如,我有5个单词(或句子)要生成,例如猫、狗、房子、天空、太阳。我想将它们分别生成一个单独的文件:cat.wav、dog.wav等

我还希望应用程序能够从*.txt文件中读取这些单词(每个单词/句子位于*.txt文件的单独一行)

有这种可能性吗?下面我将粘贴我正在使用的*.js文件代码和*.json文件代码

*.js

*.json

{
  "audioConfig": {
    "audioEncoding": "LINEAR16",
    "pitch": -2,
    "speakingRate": 1
  },
  "input": {
    "text": "Text to Speech" 
  },
  "voice": {
    "languageCode": "en-US",
    "name": "en-US-Wavenet-D"
  }
}
我不太擅长编程。我在google上找到了一个关于如何实现这一点的教程,并对其进行了轻微修改,使保存的文件名与生成的文本相同

我将非常感谢你的帮助。
Arek

现在开始-我还没有测试过它,但这应该说明如何读取文本文件,将其拆分为每一行,然后以设置的并发性在其上运行tts。它使用p-any和filenamifynpm包,您需要将这些包添加到您的项目中。请注意,谷歌可能有API节流或速率限制,我没有考虑到这里-可以考虑使用P-油门库,如果这是一个问题。
//https://www.npmjs.com/package/p-map
const pMap=require('p-map');
// https://github.com/sindresorhus/filenamify
const filenamify=require('filenamify');
const textToSpeech=require('@googlecloud/text-to-speech');
常数fs=要求('fs');
const path=require('path');
const projectId='forward-dream-295509'
const keyFilename='myauth.json'
const client=new textToSpeech.TextToSpeechClient({projectId,keyFilename});
const rawSettings=fs.readFileSync('setting.json',{encoding:'utf8'});
//所有请求的基础数据(语音等)
const yourSetting=JSON.parse(rawSettings);
//wav文件将放在哪里
const outputDirectory=';
异步函数Text2Speech(text,outputPath){
//包括settings.json中的设置,但更改文本输入
常量请求={
…你的背景,
输入:{text}
};
const[response]=等待客户端合成语音(请求);
等待fs.promises.writeFile(outputPath,response.audioContent,'binary');
log(`写入文件的音频内容:${text}=${outputPath}`);
//不是很必要,但如果你愿意,你可以退货
返回响应;
}
//处理一行文本-写入文件并报告结果(成功/错误)
异步函数processLine(文本、索引){
//基于文本输入创建输出路径(使用库确保文件名安全)
const outputPath=path.join(outputDirectory,filenamify(text)+'.wav');
常数结果={
文本,
行号:索引,
路径:outputPath,
isSuccess:null,
错误:null
};
试一试{
const response=wait Text2Speech(文本,outputPath);
result.issucess=true;
}捕获(错误){
warn(`Failed:${text}`,error);
result.issucess=false;
result.error=错误;
}
返回结果;
}
异步函数processInputFile(文件路径,并发=3){
const rawText=fs.readFileSync(文件路径,{encoding:'utf8'});
常量行=原始文本
//每行分成一项
.split(/[\r\n]+/)
//删除周围的空白
.map(s=>s.trim())
//删除空行
.过滤器(布尔值);
const results=await pMap(行、进程行、{concurrency});
console.log('Done!');
控制台.表格(结果);
}
//创建示例文本文件
const sampleText=`Hello World
猫
狗
另一行文字`;
fs.writeFileSync('./my text lines.txt',sampleText);
//处理文本文件中的每一行,每次3行
processInputFile('./my text lines.txt',3);

谢谢!我正在尝试运行它,但我确实收到了一个错误。调试控制台显示:未捕获错误[ERR\u REQUIRE\u ESM]:必须使用导入加载ES模块:c:\Users\…\node\u modules\p-map\index.js我安装了这两个软件包。前进的步伐…最新版本为。删除软件包(
npm uninstall p-map
),然后安装旧版本(
npm install p-map@4
)取而代之。谢谢你帮了我的忙。无论如何,还有一个问题:失败:dog[Error:enoint:没有这样的文件或目录,打开'C:\Users\AAA\Desktop\t3s\UsersAAADesktop 3s\dog.wav']{errno:-4058,code:'enoint',syscall:'open',path:'C:\\Users\\AAA\\Desktop\\t3s\\UsersAAADesktop\t3s\\dog.wav'}不要忘记跳出斜杠(
\
),或者使用unix风格(
/
)相反-看起来像
UsersAAADesktop
应该是
Users\\AAADesktop
。无论如何,这与此代码无关-您遇到了新问题。祝您好运!现在可以用了,谢谢!!!
{
  "audioConfig": {
    "audioEncoding": "LINEAR16",
    "pitch": -2,
    "speakingRate": 1
  },
  "input": {
    "text": "Text to Speech" 
  },
  "voice": {
    "languageCode": "en-US",
    "name": "en-US-Wavenet-D"
  }
}