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

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

本文关键字:wav mp4 输出 node js 代码 修改      更新时间:2023-09-26

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

节点tts文本到语音合成器(OSX)

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

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

请注意,该服务器可以通过mac上的内置扬声器发送音频,或作为对Restful API请求的响应。我只对通过Rest API将实际音频文件作为.wav获取感兴趣。

您要查找的代码位于lib/ttsapi.jsgenerate方法中。以下是该方法的摘录。

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);

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

查找类型的文件扩展名失败:typ?

但是,这可以使用--data-format参数来解决。您需要修改代码才能执行如下命令。

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

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

say "Hello world" -o hello.aiff

详见man say