我正在尝试将音频流传递给C / C ++ Addon。但首先我想了解并实现一些基本的例子。整个目标是使用stdin和stdout在nodeJS和插件之间管道信息。 在nodejs中,我可以看到带有此代码的标准输出:
var fs = require('fs');
var readableStream = fs.createReadStream('file.txt');
var data = '';
readableStream.on('data', function(chunk) {
data+=chunk;
});
readableStream.on('end', function() {
console.log(data);
});
但是现在,我怎样才能将它传递给c / c ++插件?
答案 0 :(得分:0)
您无法直接将数据从NodeJS传递到C ++。您可以用C ++编写/开发自己的Node插件/模块,它将一些函数暴露给(Node)JS然后将数据传递给这些函数:
var myModule = require('mymodule'); // The Node addon you wrote
myModule.processData(data);
现在,processData
从JS接收数据,它是一个C ++实现,所以你去。
答案 1 :(得分:0)
以下是在Linux中创建本机插件的示例。希望这会有所帮助:
#include <node.h>
using namespace v8;
void foo(const FunctionCallbackInfo<Value>& args) {
// extract the parameter(s)
int value = args[0]->NumberValue();
// do stuff with value.
//optionally, return a value.
args.GetReturnValue().Set(value + 10);
}
void init(Handle<Object> exports) {
NODE_SET_METHOD(exports, "processData", foo);
}
NODE_MODULE(addon, init)
构建:Linux(ia32): g ++ -I./deps/v8/include -I./src -shared -m32 -o mymodule.node mymodule.cc
答案 2 :(得分:0)
假设nodejs脚本:
var addon = require('./build/Debug/addon.node');
var fs = require('fs');
var readableStream = fs.createReadStream('file.txt');
var data = '';
readableStream.on('data', function(chunk) {
data+=chunk;
});
readableStream.on('end', function() {
console.log("loaded");
console.log('addon invocation:', addon.read_stream(data));
});
此脚本可以加载文件信息:
#include <node.h>
#include <iostream>
#include <string>
using namespace v8;
using namespace std;
void read_stream(const FunctionCallbackInfo<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 auxiliar = std::string(*param1); //JS---->C++
}
void Init(Handle<Object> exports) {
NODE_SET_METHOD(exports, "read_stream", read_stream);
}
NODE_MODULE(addon, Init)
在调试&#34;辅助&#34; string将包含&#34; file.txt&#34;的文本。现在是时候尝试使用wav文件了。