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

时间:2015-03-07 18:43:55

标签: javascript node.js macos audio

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

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

问题是,我不是node.js开发人员,也不知道如何进行更改,如果可能的话。我正在尝试将应用程序语音化,以便视力不佳的用户可以在他们的LAN上运行TTS服务器时使用它。我的项目需要.wav输出。

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

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

2 个答案:

答案 0 :(得分:1)

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

say "Hello world" -o hello.aiff

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

答案 1 :(得分:1)

您要查找的代码位于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会产生以下错误。

  

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

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

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