Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设计音频架构_Java_C++_Design Patterns_Audio_Architecture - Fatal编程技术网

Java 设计音频架构

Java 设计音频架构,java,c++,design-patterns,audio,architecture,Java,C++,Design Patterns,Audio,Architecture,我正在用java设计一个音频架构。我知道,我应该用C++…… 无论如何,我读过克雷格·林德利的书《java数字音频》。他描述了一种拉式体系结构,其中设备以链表的形式连接,而接收器设备在其之前立即从设备请求数据。设备调用相同的接口方法以从之前的设备获取数据。该方法类似于: public int getSamples(byte[] data); 我很想知道其他人对此有何看法。C++,java,随便什么。可以对pro tools、ableton和reason等的体系结构进行详细阐述。这些系统是否完全

我正在用java设计一个音频架构。我知道,我应该用C++…… 无论如何,我读过克雷格·林德利的书《java数字音频》。他描述了一种拉式体系结构,其中设备以链表的形式连接,而接收器设备在其之前立即从设备请求数据。设备调用相同的接口方法以从之前的设备获取数据。该方法类似于:

public int getSamples(byte[] data);
我很想知道其他人对此有何看法。C++,java,随便什么。可以对pro tools、ableton和reason等的体系结构进行详细阐述。这些系统是否完全依赖于类似于Lindley所描述的“拉动式体系结构”,尽管更为成熟


请原谅这个问题的广泛性质。

我见过基于推拉的音频架构,它们都有优点和缺点

在基于推送的系统中,每个过滤器将数据推送到下游过滤器,您需要一些定时推送请求的概念,以便在声卡准备好数据时,您的音频处理单元链的末端有数据。这通常以一个外部时钟的形式出现,它为图形的泵送计时。就是这样

在基于pull的系统中,您可以使用声卡的I/O请求来驱动图形的泵送,从而让设备运行时钟。在这个系统中,在图形(数据源)的开头仍然需要缓冲


我建议不要做基于拉/推的系统,而是执行器式的体系结构。假设您有一组音频处理单元(APU),它们由一个AudioGraph对象管理,谁知道它们是如何连接的。现在,您可以使用声卡的音频回调,将任何音频输入传递到您的听力图,并让听力图通过每个音频处理单元管理处理数据。这将数据流与I/O请求完全分离,并允许您的音频图并行处理请求、运行请求以无序处理每个过滤器等。此外,每个APU不需要知道其邻居,它们仅在音频图级别“连接在一起”。这是在OS X上运行的。

为了记录,CoreAudio使用了拉模型,AudioUnit图主要抽象了音频单元链接在一起的方式以及它们的调用顺序