我想用wav文件创建一个流,并将其传递给我的NodeJS插件:
var readableStream = fs.createReadStream('random_file.wav');
readableStream.on('data', function(chunk) {
var chunck_to_binary = chunk.toString('what??'); //binary??
var obj1 = addon.store(chunck_to_binary);
console.log('chunck');
console.log(obj1.caract_count);
//console.log(typeof data);
});
然后,当所有文件都已通过。我想将字节转移到Nodejs,只是为了确保所有进程都是正确的。并创建一个副本:
readableStream.on('end', function() {
console.log("loaded");
var data_copy = addon.return_bytes();
fs.writeFile('copy.wav', data_copy, function (err) {
if (err) return console.log(err);
console.log('done!!');
});
});
在插件中我实现了这样的一些:
void store_values(const FunctionCallbackInfo<v8::Value>& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
if (args.Length() < 1) {
isolate->ThrowException(Exception::TypeError(
String::NewFromUtf8(isolate, "Wrong number of arguments")));
return;
}
v8::String::Utf8Value param1(args[0]->ToString());
std::string aux= std::string(*param1); //JS---->C++
//file_in_memory is global
file_in_memory = file_in_memory + aux;
//(..) return byte size of file_in_memory
}
到目前为止,我还没有成功。有什么可能错的?我认为问题是我如何将信息传递给插件。有什么建议吗?
答案 0 :(得分:1)
chunk
是Buffer
,这很好,因为它基本上只是一大块字节。只需按原样传递给您的插件:
var obj1 = addon.store(chunk);
在您的插件中,您可以将其转换为std::string
,如下所示:
std::string aux(node::Buffer::Data(args[0]), node::Buffer::Length(args[0]));