我正在用java设计一个音频架构。我知道我知道我应该用c++..。
不管怎样,我已经读过Craig Lindley的书Digital Audio with java。他描述了一种pull体系结构,其中设备以链表形式连接,接收器设备在紧接其之前从设备请求数据。这些设备调用相同的接口方法从设备获取之前的数据。该方法类似于:
public int getSamples(byte[] data);我很有兴趣看看其他人对此的看法。c++,java,什么都行。可以稍微详细说明一些类似pro tools、ableton和reason的架构。这些系统是否依赖于类似于Lindley所描述的"pull架构“,尽管更加成熟。
请原谅这个问题的宽泛性质。
发布于 2012-01-27 18:56:39
我见过基于push和pull的音频架构,它们各有优缺点。
在基于推送的系统中,每个过滤器将数据向下推送到下游过滤器,您需要对推送请求进行一些计时,以便当声卡准备好数据时,在音频处理单元链的末端具有数据。这通常是以外部时钟的形式出现的,它对图形的泵送进行计时。DirectShow是这样工作的。
在基于pull的系统中,您可以使用来自声卡的I/O请求来驱动图形的泵送,从而使时钟由您的设备运行。在这个系统中,您仍然需要在图形(数据源)的开始处进行缓冲。
我建议不要做一个基于pull/push的系统,而是一个executor风格的架构。假设您有一组音频处理单元(APU),这些单元由一个AudioGraph对象管理,谁知道它们是如何连接的。现在,您可以使用来自声卡的音频回调,并将任何音频输入传递到AudioGraph,并让AudioGraph通过每个音频处理单元管理处理数据。这将数据流与I/O请求完全分离,并允许您的应用程序单元( AudioGraph )处理并行处理请求、运行请求以无序处理每个过滤器等。这是OS X上的AudioUnits。
https://stackoverflow.com/questions/8784067
复制相似问题