我正在使用一个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?
谢谢
发布于 2018-01-06 16:40:58
因为Express已经是一个可写的流,所以您可以直接将其传递给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);
});https://stackoverflow.com/questions/48119527
复制相似问题