【问题标题】:fs.createReadStream('b.mp3') reduce latencyfs.createReadStream('b.mp3') 减少延迟
【发布时间】:2018-04-10 04:50:27
【问题描述】:

我正在玩触发声音的事件(500 毫秒长),因此我使用lame 库。

var lame = require('lame');
var fs = require('fs');
var Speaker = require('speaker');

while(listening) {
    if(eventIsFired) {
        fs.createReadStream('b.mp3')
            .pipe(new lame.Decoder)
            .pipe(new Speaker);
    }
}

有没有办法预加载流/文件,所以我不需要在每个事件上都加载它?它实际上阻止了我的整个 while 循环并使其异步不起作用。如何减少延迟并提高效率?

【问题讨论】:

    标签: node.js latency lame nodejs-stream


    【解决方案1】:

    您可以将 mp3 文件缓存到 buffer,然后在需要时将该 buffer 转换为可读流。

    var lame = require('lame');
    var fs = require('fs');
    var Speaker = require('speaker');
    var Readable = require('stream').Readable;
    
    var mp3Buffer = fs.readFileSync('b.mp3');
    
    while(listening) {
        if(eventIsFired) {
            bufferToReadableStream(mp3Buffer)
                .pipe(new lame.Decoder)
                .pipe(new Speaker);
        }
    }
    
    function bufferToReadableStream(buffer) {
        let stream = new Readable();
        stream.push(buffer);
        stream.push(null);
        return stream;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-08-10
      • 1970-01-01
      • 2019-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      • 2018-03-01
      相关资源
      最近更新 更多