我想从Node.js(在插件中)收到一个wav流。它实现如下:
readableStream.on('data', function(chunk) {
var obj1 = addon.buffering(chunk);//my addon
});
但是现在我想缓冲这些信息,并创建原始wav的副本。到目前为止,我无法用字节填充新文件。
void buffering(const FunctionCallbackInfo<v8::Value>& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
Local<Object> bufferObj = args[0]->ToObject();
char *buf = node::Buffer::Data(bufferObj);
if (i == 0){ fp = fopen("copy.wav", "wb"); i++;}
fwrite(buf, 1, sizeof(buf), fp);
fflush(fp);
if (i == 3){ fclose(fp); }
i++;
Local<String> devolve = String::NewFromUtf8(isolate, "buffering_success");//C++--->JS
args.GetReturnValue().Set(devolve);
}
我不明白为什么,但sizeof(buf)
总是太小。我想是因为那个。
答案 0 :(得分:0)
带着@Mat的宝贵意见:
的NodeJS:
readableStream.on('data', function(chunk) {
console.log(chunk);
var size = chunk.length;//<---Size of chunk, thanks Matt
console.log(size);
var obj1 = addon.buffering(chunk,size);
console.log('pass chunk');
});
附加组件:
void buffering(const FunctionCallbackInfo<v8::Value>& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
int size = args[1]->NumberValue();
Local<Object> bufferObj = args[0]->ToObject();
char *buf = node::Buffer::Data(bufferObj);
if (i == 0){ fp = fopen("copy.wav", "wb"); i++;}
fwrite(buf, 1, size, fp);
fflush(fp);
if (i == 3){ fclose(fp); }
i++;
Local<String> devolve = String::NewFromUtf8(isolate,"buffering_sucess");//C++--->JS
args.GetReturnValue().Set(devolve);
}
我将删除迭代器,一些“通用”解决方案。这是因为我现在将发生迭代次数。