fs.createWriteStream 至 fs.createReadStream

fs.createWriteStream to fs.createReadStream

我正在使用 node.js 模块 sox-audio 到 trim 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 就可以了?

谢谢

因为Expressres已经是Writable Stream了,你可以直接传给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);
});