使用语音 CLI 运行批处理操作

使用语音服务时执行的常见任务就是批处理操作。 本文将介绍如何使用语音 CLI 将语音批处理为文本(语音识别)以及将文本批处理为语音(语音合成)。 具体来说,你将学习如何:

  • 在音频文件目录上运行批处理语音识别
  • 循环访问 .tsv 文件来运行批处理语音合成

将语音批处理为文本(语音识别)

语音服务通常用于从音频文件中识别语音。 本例将介绍如何使用语音 CLI 循环访问目录来捕获每个 .wav 文件的识别输出内容。 --files 标志用于指向存储音频文件的目录,通配符 *.wav 用于指示语音 CLI 在每个带有扩展名 .wav 的文件上运行识别功能。 每个识别文件的输出以制表符分隔的值的形式写入 speech_output.tsv

注意

--threads 参数也可以在下一部分中用于 spx synthesize 命令,可用线程将取决于 CPU 及其当前负载百分比。

spx recognize --files C:\your_wav_file_dir\*.wav --output file C:\output_dir\speech_output.tsv --threads 10

以下是输出文件结构的示例。

audio.input.id	recognizer.session.started.sessionid	recognizer.recognized.result.text
sample_1	07baa2f8d9fd4fbcb9faea451ce05475	A sample wave file.
sample_2	8f9b378f6d0b42f99522f1173492f013	Sample text synthesized.

将文本批处理为语音(语音合成)

运行批处理文本转语音的最简单方法是创建一个新的 .tsv(制表符分隔值)文件,并使用语音 CLI 中的 --foreach 命令。 可使用你喜欢的文本编辑器来创建一个 .tsv 文件;在本例中,让我们将它命名为 text_synthesis.tsv

重要

复制此文本文件的内容时,请确保文件在文件位置与文本之间放置一个制表符(不带空格)。 有时,在从此示例复制内容时,制表符会转换为空格,这会导致 spx 命令在运行时失败。

audio.output	text
C:\batch_wav_output\wav_1.wav	Sample text to synthesize.
C:\batch_wav_output\wav_2.wav	Using the Speech CLI to run batch-synthesis.
C:\batch_wav_output\wav_3.wav	Some more text to test capabilities.

接下来,运行命令以指向 text_synthesis.tsv,对每个 text 字段执行合成,然后将结果作为 .wav 文件写入相应的 audio.output 路径中。

spx synthesize --foreach in @C:\your\path\to\text_synthesis.tsv

此命令等效于对 .tsv 文件中的每个记录运行 spx synthesize --text "Sample text to synthesize" --audio output C:\batch_wav_output\wav_1.wav

请注意以下几点:

  • 列标题 audio.outputtext 分别对应于命令行参数 --audio output--text。 由多个部分组成的命令行参数(如 --audio output)应在文件中格式化,不带空格、无前导短划线且使用句点分隔字符串,例如 audio.output。 使用此模式,可将任何其他现有命令行参数作为其他列添加到文件中。
  • 以这种方式格式化文件时,不需要将其他参数传递到 --foreach
  • 请确保通过选项卡将 .tsv 中的每个值分隔开。

但是,如果你具有如下例所示的 .tsv 文件(其列标头与命令行参数不匹配):

wav_path    str_text
C:\batch_wav_output\wav_1.wav	Sample text to synthesize.
C:\batch_wav_output\wav_2.wav	Using the Speech CLI to run batch-synthesis.
C:\batch_wav_output\wav_3.wav	Some more text to test capabilities.

可以在 --foreach 调用中使用以下语法将这些字段名称替代为正确的参数。 此命令进行与以前相同的调用。

spx synthesize --foreach audio.output;text in @C:\your\path\to\text_synthesis.tsv

后续步骤