修改此 node.js 代码以输出 .wav 而不是 .mp4?

Modify this node.js code to output .wav instead of .mp4?

我正在尝试修改以下代码以输出 .wav 而不是 .mp4:

node-tts text to speech synthsizer, (OS X)

问题是,我不是 node.js 开发人员,不知道如何进行更改,甚至不知道是否可能。我正在尝试对一个应用程序进行演讲,以便视障用户可以使用它,如果他们是 运行 局域网上的 TTS 服务器。我的项目需要 .wav 输出。

谁能告诉我这是否可行,如果可行,请指出在代码中实际生成音频文件的位置?据推测,这段代码使用 Mac 的内置语音合成器来创建音频文件,并且这段代码只是将它传送给调用客户端。

请注意,此服务器可以通过 mac 上的内置扬声器传送音频或作为对 Restful API 请求的响应。我只对通过 Rest API.

将实际音频文件作为 .wav 文件感兴趣

该服务器的核心确实只是调用 /usr/bin/say。看起来该命令不支持输出为 .wav 文件,但它确实支持许多其他格式;尝试:

say "Hello world" -o hello.aiff

有关详细信息,请参阅 man say

您要查找的代码在 the generate method of lib/ttsapi.js 中。这是该方法的摘录。

var $this = this,
    command  = '/usr/bin/say',
    options = {
        "cwd": "/tmp/",
        "env": {
            "ENV":"development"
        },
        "customFds":[-1, -1, -1]
    },
    args = [
        '-o', filename,
        '-v', voice,
        text
    ],
    output = '';

if (debug) util.log('|tts|generating|voice='+voice+'|format='+this.format+'|text='+text);
var child = spawn(command, args, options);

这里我们可以看到它使用的是 OS X 上的内置 say command-line utility,它位于 /usr/bin/say 下。应该可以修改参数以生成 WAV 文件,但有点棘手。无论出于何种原因,与 say 命令的文档建议相反,指定 --file-format=WAVE 会产生以下错误。

Looking up file extensions for type failed: typ?

然而,这可以使用 --data-format 参数解决。您将需要修改代码以执行如下命令。

say -o "testing123.wav" --data-format=LEF32@22050 "testing 123"