javascript - Web Audio- 从服务器到客户端的流文件

标签 javascript audio types web-audio-api

我正在尝试使用 BinaryJS 将音频从包含音频文件的服务器流式传输到客户端。我的代码受到这个问题中代码的启发:Playing PCM stream from Web Audio API on Node.js

这是我的服务器代码:

// create a BinaryServer using BinaryJS
var BinaryServer = require('binaryjs').BinaryServer;
// gotta be able to access the filesystem
var fs = require('fs');

// create our server listening on a specific port
var server = BinaryServer({port: 8080});

// do this when a client makes a request
server.on('connection', function(client){
    // get the audio file
    var file = fs.createReadStream(__dirname + '/JDillaLife.mp3');

    // convert to int16
    var len = file.length;
    var buf = new Int16Array(len);

    while(len--){
        buf[len] = data[len]*0xFFFF;
    }

    var Stream = client.send();
    Stream.write(buf.buffer);

    console.log("Server contacted and file sent");
});
console.log('Server running on port 8080');

还有我的客户端代码:

var Speaker = require('speaker');
var speaker = new Speaker({
    channels: 2,
    bitDepth: 32,
    sampleRate: 44100,
    signed: true
});

var BinaryClient = require('binaryjs').BinaryClient;
var client = BinaryClient('http://localhost:8080');
client.on('stream', function(stream, meta){
    stream.on('data', function(data){
        speaker.write(data);
    });
});

这是一个非常粗略的草稿,我几乎可以肯定它不会马上很好地播放,但现在它在我运行时抛出一个错误,似乎与 var buf = new Int16Array 这行有关(len);,我不确定为什么会这样。它说存在“类型错误”,但我不确定为什么在将新对象分配给空变量时会发生这种情况。我是 JS 的新手(以及整个非类型化语言),所以这是我分配的问题吗?

最佳答案

我认为这里的问题是您正在访问 file.length,而 file 是一个 Stream 对象,我认为它没有 length 属性。所以你所做的基本上是在说

 new Int16Array(undefined);

因此出现类型错误。

fs.createReadStream 记录在这里; https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options

您可以使用 Stream 对象使用 stream.read(256) 读取 block 中的数据,如此处所述; https://nodejs.org/api/stream.html#stream_readable_read_size

希望这能为您提供足够的指导!

关于javascript - Web Audio- 从服务器到客户端的流文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30606580/

相关文章:

javascript - 每 x 页面加载一次触发 javascript,例如,每第三页

javascript - 如何使用Inputmask更改电话号码格式?

python - Python/mypy 中 NamedTuple 和 TypedDict 的主要区别是什么

recursion - OCaml 中的递归类型?

scala - 为什么在Scala中类型检查和类型转换被认为是较差的样式?

javascript - 当鼠标移到绝对定位的侄子文本上时,悬停效果在图像上丢失

javascript - 创建 React 应用程序 : Adding scss

c# - 场景统一变化时,两个游戏对象之间保持链接

javascript - p5.sound在手机上声音失真了吗?

ios - 使用 AVAudioPLayer 播放音频片段时出现故障