【发布时间】:2015-06-02 21:06:04
【问题描述】:
我正在尝试使用 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 的新手(以及整个无类型语言的东西)所以这是我分配的问题吗?
【问题讨论】:
标签: javascript audio types web-audio-api