我维护一个 C++ SDK,现在需要转换为其他语言(特别是 C# 和 Java)。我正在使用 SWIG 生成包装器代码并成功完成 Java 工作。我现在需要让 C# 工作。
我有一个 C++ 函数(忽略Header函数签名中的对象 - 我已经解决了)
int send(Header header, char *payload);
Run Code Online (Sandbox Code Playgroud)
此外,我有一个directorC++ 类,如下所示:
class Callbacks {
public:
virtual ~Callbacks() { }
virtual void receive(Header header, char *payload) { }
};
Run Code Online (Sandbox Code Playgroud)
这允许我在 Java 和 C# 代码中创建回调。
我需要C# 中的send以下函数签名:receive
int send(Header header, byte[] payload);
Run Code Online (Sandbox Code Playgroud)
和
void receive(Header header, byte[] payload);
Run Code Online (Sandbox Code Playgroud)
SWIG 中的类型映射似乎是可行的方法,因此这是我对 C# 类型映射的尝试:
%module(directors="1") example
%{
#include "example.h"
%}
%feature("director") Callbacks;
%include "arrays_csharp.i" …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使我的java代码(使用eclipse)执行某些功能(如果说了某件事)。我正在使用Sphinx4库,这是我目前拥有的:
我想做的是在它说的那行:
IF (TRUE) someFunction();
Run Code Online (Sandbox Code Playgroud)
如果我的发言是Hello Computer,Hello Jarvis,Good Morning Computer或Good Morning Jarvis,则运行该功能。或者换句话说,如果语音与.gram文件中的“ public <greet>”行匹配,请运行该函数。更具体地说,如果我的讲话符合该语法规则,则返回“ greet”。对不起,如果这没有道理...
这是我的listener.java文件:
package speechRecognition;
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import edu.cmu.sphinx.frontend.util.Microphone;
import edu.cmu.sphinx.recognizer.Recognizer;
import edu.cmu.sphinx.result.Result;
import edu.cmu.sphinx.util.props.ConfigurationManager;
public class Listener {
public void someFunction(){
System.out.println("Did Something");
}
public static void main(String[] args) {
ConfigurationManager cm;
if (args.length > 0) { cm = new ConfigurationManager(args[0]);
} else { cm = new ConfigurationManager(Listener.class.getResource("configurations.config.xml")); }
Recognizer recognizer = (Recognizer) cm.lookup("recognizer");
recognizer.allocate();
Microphone microphone = (Microphone) cm.lookup("microphone"); …Run Code Online (Sandbox Code Playgroud)