我开始使用Java绘制插件,比如使用贝塞尔曲线的连接器,但只是视觉效果。
然后我开始想知道如何使用输入和输出来制作某种模块化的东西。但是,我对如何实施它的决定感到非常困惑。让我们举个例如模块化合成器或Pure Data / MaxMSP概念,其中有模块,任何模块都有属性,输入和输出。
我想知道您是否知道我应该使用哪些关键字来搜索要阅读的内容。我需要一些关于这种界面的基本例子或抽象概念。有没有适合这个想法的设计模式?
答案 0 :(得分:-1)
由于您要求提供关键字实时设计模式,过度OOP通常是实时应用程序的性能瓶颈,因为所有对象(我猜多态性到一些)程度)增加开销。
为什么要实时申请?您提供的图表看起来非常复杂, 您可以多次并行处理传入数据,将其拆分,合并等等。
图中的每个节点都会添加不同的效果并进行不同的计算,其中一些计算可能需要比其他计算更长的时间 - 这导致结论,为了获得统一的数据(声音),您必须保持数据同步。这不是一件轻而易举的事。
我猜其他一些关键词是:声音处理,过滤器。或者你可以问那些在该领域工作的公司。
抛开时间敏感性,我构建了一个小OOP示例, 也许这样的方法足以应对不那么复杂的场景
public class ConnectionCable implements Runnable, Closeable {
private final InputLine in;
private final OutputLine out;
public ConnectionCable(InputLine in, OutputLine out) {
this.in = in;
this.out = out;
// cable connects open lines and closes them upon connection
if (in.isOpen() && out.isOpen()) {
in.close();
out.close();
}
}
@Override
public void run() {
byte[] data = new byte[1024];
// cable connects output line to input line
while (out.read(data) > 0)
in.write(data);
}
@Override
public void close() throws IOException {
in.open();
out.open();
}
}
interface Line {
void open();
void close();
boolean isOpen();
boolean isClosed();
}
interface InputLine extends Line {
int write(byte[] data);
}
interface OutputLine extends Line {
int read(byte[] data);
}