设计音频架构
designing an audio architecture
我正在用java设计一个音频架构。我知道我知道,我应该使用c++。。。
不管怎样,我读过Craig Lindley的书《数字音频与java》。他描述了一种拉式体系结构,其中设备连接在链表中,信宿设备从紧接在它之前的设备请求数据。这些设备调用相同的接口方法来从之前的设备获取数据。该方法类似于:
public int getSamples(byte[] data);
我很想看看其他人对此有何看法。c++、java等等。可以在某种程度上详细说明pro-tools、ableton和rational之类的东西的架构。这些系统是否完全依赖于类似于Lindley所描述的"拉式架构",尽管更成熟。
原谅这个问题的宽泛性。
我见过基于推拉的音频架构,它们都有优点和缺点。
在一个基于推送的系统中,每个过滤器都将数据推送到下游过滤器,你需要对推送请求进行定时,这样当声卡准备好接收数据时,你就可以在音频处理单元链的末端获得数据。这通常是以外部时钟的形式出现的,它对图形的泵浦进行计时。DirectShow就是这样工作的。
在基于拉的系统中,您可以使用声卡的I/O请求来驱动图形的泵浦,这可以让您的设备运行计时。在这个系统中,您仍然需要在图形(数据源)开始时进行缓冲。
我建议不要使用基于拉/推的系统,而是使用执行器风格的体系结构。想象一下,您有一组音频处理单元(APU),由AudioGraph对象管理,该对象知道它们是如何连接的。现在,您可以使用声卡的音频回调,将任何音频输入传递给AudioGraph,并让AudioGraph通过每个音频处理单元管理处理数据。这将数据流与I/O请求完全分离,并允许AudioGraph并行处理请求、运行请求以无序处理每个过滤器等。此外,每个APU不需要知道其邻居,它们只在AudioGraph级别"连接在一起"。这是操作系统X上的AudioUnits作品。
- 用c++阅读音频
- 为什么这个音频包络不能通过开关的情况?
- FFMpeg库:如何在音频文件中精确查找
- 需要反转音频步进公式
- 如何在音频处理中使用超能力时间拉伸类
- C++新手,想知道如何使用VS code 2019播放音频文件
- 如何暂停插孔音频客户端
- 如何以编程方式将音频从任何录制设备路由到任何播放设备
- 将音频从浏览器流式传输到WebRTC本机C++应用程序
- 使用IMFSourceReader(Microsoft媒体基金会)进行音频流传输
- 大声音频无法播放
- 让 iaxClient 将音频发送到缓冲区而不是音频设备/从缓冲区获取音频
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 波形音频 - waveOutWrite 发出断断续续的声音
- WASAPI 共享模式:音频引擎预期的振幅是多少?
- 在Win7上,在默认端点上轮询音频会话有时会崩溃
- 媒体基金会:WavSink以比实时消耗率更快的速度处理音频-是否可以实时限制后台处理
- PJSUA在两个或多个不同的音频声卡之间切换
- 当直接渲染到WASAPI时,两个流中的一个流没有音频输出
- FFmpeg av_read_frame从音频流返回数据包