[tts]文本生成语音-插件处理

1.103.40以上


音频项处理

  • 处理.tts文件中,每一项需要生成的内容
  • 输入项配置,原始项配置,元数据

通常使用第一个参数

      {
            name: '自定义替换',
            priority: 2,
            fn: async (item) => {
              let content = item.generateOptions.audioText ?? item.subtitle.text;
              for (const item of ExtensionConfig.replaceList()) {
                content = content.replaceAll(item.find, item.replace);
              }
              item.generateOptions.audioText = content;
              return item;
            },
          },

连接前处理

  • 每一项生成完成,准备将切片合并为一个文件之前
  • 输入连接配置,比如
[[{"type":"file","filePath":"d:/103conf/pythonAddon/chunk/4de3fef8-0a28-542e-8cad-8872890fb677.wav","subtitle":{"text":"第一句内容"},"speedControl":{}}],[{"type":"file","filePath":"d:/103conf/pythonAddon/chunk/b0a2595a-affc-589b-9475-2945a88e006e.wav","subtitle":{"text":"第二句内容"},"speedControl":{}}]]
{
            name: 'ffmpeg滤镜',
            fn: async (inputList, config) => {
              let workspaceService = input.provider.root.injector.get(input.provider.root.WorkspaceService);
              let execPath = path.join(
                path.resolve(workspaceService.nFolder(), ExtensionConfig.ffmpeg.dir()),
                ExtensionConfig.ffmpeg.execPath()
              );
              let { $ } = await import('execa');
              for (const item of inputList) {
                for (const element of item) {
                  if (element.type === 'file') {
                    let filePath = element.filePath;
                    let outputPath = element.filePath.replace(/\.wav$/, '.af.wav');
                    let commandList = mergeWavAfCommand(ExtensionConfig.ffmpeg.af(), filePath, outputPath);
                    await $({})(execPath, commandList);
                    element.filePath = outputPath;
                  }
                }
              }
              return inputList;
            },
          }

连接后处理

  • 生成完成后,处理整个文件
  • 输入文件路径

注意这个不带.wav因为同时存在.wav,.srt音频和字幕文件,需要自己拼接

  • 暂时没想到好的例子,欢迎反馈
   {
            name: 'test',
            fn: async (input) => {
              return input;
            },
          },

开启

  • 插件只有开启才会自动处理

其他问题

  • 插件目前开发基本处于需要哪些参数,就暴露哪些参数,所以如果有什么不清楚的地方,欢迎反馈