fs.createWriteStream到fs.createReadStream

时间:2018-01-05 18:44:54

标签: node.js stream sox

我正在使用node.js模块sox-audio修剪mp3音频以进行流式传输。 从这example -

var SoxCommand = require('sox-audio');

var trimFileAndPipeExample = function(inputFile, startTimeSeconds, endTimeSeconds, outputPipe) {
    var startTimeFormatted = TimeFormat.formatTimeAbsolute(startTimeSeconds);
    var endTimeFormatted = TimeFormat.formatTimeAbsolute(endTimeSeconds);

    var command = SoxCommand()
        .input(inputFile)
        .output(outputPipe)
        .outputFileType('wav')
        .trim(startTimeFormatted, endTimeFormatted)
        .run();
    return command;
}

要分配输出,请使用 - fs.createWriteStream('./output.mp3');

所以

var outputPipe = fs.createWriteStream('./output.mp3');

trimFileAndPipeExample(inputFile, startTime, endTime, outputPipe);

创建输出文件。

我想要做的是获取输出并将其从我收到的请求中导向fs.createReadStream -

var outputPipe = fs.createWriteStream('./test.mp3');

trim(path, startTime, endTime, outputPipe);

outputPipe.on('finish', () => {
    var readStream = fs.createReadStream('./test.mp3');
    readStream.pipe(res);
});

但我不一定要每次都创建文件,而是将数据导向fs.createReadStream

有没有办法重写fs.createWriteStream以便它不需要输出路径而只需要.pipe直接将其添加到fs.createReadStream中?

由于

1 个答案:

答案 0 :(得分:0)

因为Express res已经是可写流,您可以直接将其传递给trimFileAndPipeExample

router.get('/cut', function (req, res, next) {
  var inputFile = './assets/utterance_0.wav';
  var startTime = 1;
  var endTime = 5;
  res.set('Content-Type', 'audio/mpeg');
  trimFileAndPipeExample(inputFile, startTime, endTime, res);
});