我正在使用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中?
由于
答案 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);
});