0

我想从 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)总是太小。我想是因为这个。

4

1 回答 1

0

用@Mat的宝贵提示:

节点:

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);
}

我会将迭代器删除到一些“通用”解决方案。之所以在这里,是因为我现在知道将发生的迭代次数。

于 2015-07-14T15:59:17.963 回答