You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js中Google TextToSpeech API读取TXT逐行文本批量生成WAV的实现方法

批量语音生成实现方案

两个需求都可以直接基于你现有代码改造实现,不需要改动已经跑通的单条生成核心逻辑,适配过程对基础编程能力的要求很低。

前置准备

  • 原有setting.json配置文件无需修改,所有音频编码、音调、语速、语音角色的配置都会被批量流程复用,原文件里硬写的input.text字段内容会被动态替换,不影响运行
  • 新建一个名为words.txt的纯文本文件,每一行写入一条需要合成的词或句子,示例内容参考:
    cat
    dog
    house
    sky
    sun
    

改造后的完整代码

const textToSpeech = require('@google-cloud/text-to-speech');
const fs = require('fs');
const util = require('util');
const projectId = 'forward-dream-295509'
const keyFilename = 'myauth.json'
const client = new textToSpeech.TextToSpeechClient({ projectId, keyFilename });

// 读取全局基础配置
const baseSetting = JSON.parse(fs.readFileSync('setting.json', 'utf-8'));
const writeFile = util.promisify(fs.writeFile);
const readFile = util.promisify(fs.readFile);

async function Text2Speech(singleText, baseConfig) {
  // 动态为当前待合成内容生成独立的请求配置
  const requestConfig = {
    ...baseConfig,
    input: {
      text: singleText
    }
  };
  const [response] = await client.synthesizeSpeech(requestConfig);
  // 过滤文件名中的非法字符,避免写文件失败
  const safeFileName = singleText.replace(/[\\/:*?"<>|]/g, '_');
  await writeFile(`${safeFileName}.wav`, response.audioContent, 'binary');
  console.log(`已生成语音文件: ${safeFileName}.wav`);
}

async function batchGenerate() {
  // 读取待合成内容文本
  const rawContent = await readFile('words.txt', 'utf-8');
  // 拆分换行、清理空白字符、过滤空行
  const textList = rawContent.split('\n')
    .map(line => line.trim())
    .filter(line => line.length > 0);

  console.log(`共读取到 ${textList.length} 条待合成内容,开始批量生成`);
  // 逐条串行处理,避免触发接口频率限制
  for (const singleText of textList) {
    try {
      await Text2Speech(singleText, baseSetting);
    } catch (err) {
      console.error(`生成「${singleText}」的语音失败,错误信息: ${err.message}`);
    }
  }
  console.log('所有批量生成任务处理完成');
}

// 启动批量流程
batchGenerate();

关键改动说明

  • 把原来写死单条文本的逻辑改成动态匹配:每处理一条待合成内容,就临时把这条文本塞到通用配置的input字段里,完全复用你原来已经调试好的语音、音频参数
  • 新增txt文件读取逻辑:按换行拆分内容后自动过滤空行,不需要手动清理文件里的多余空行
  • 增加文件名兼容处理:如果待合成的句子里包含/、?、*这类操作系统不允许出现在文件名里的特殊字符,会自动替换为下划线,避免写文件时报错
  • 采用串行循环调用模式,不一次性发起大量并发请求,最大程度避免触发Google TTS API的调用频率限制,新手使用时不容易出现权限报错
  • 增加单条错误捕获:如果某一条内容生成失败(比如文本太长、临时网络问题),整个流程不会直接中断,会继续处理剩下的内容,同时在控制台打印具体错误方便排查

使用步骤

  1. 保留原有授权文件myauth.json、配置文件setting.json在脚本同目录下
  2. 把所有需要合成的内容按行写入words.txt
  3. 直接运行原Node脚本,就会在脚本目录下生成每一条文本对应的独立wav文件

内容的提问来源于stack exchange,提问作者Koryooo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.23 18:45:05