一个实时应用的音频/MIDI C++库

15

正如我在另一个帖子中所说的,我正在开发一个与实时图形编程和音频相关的项目(类似于Pure Data、Max/MSP、Reaktor)。

我在互联网上进行了一天的研究,寻找一个良好维护、文档齐全且高度可移植的C++库来进行低级别的音频和MIDI交互,但我仍然无法确定使用哪个库。

我正在考虑使用PortAudio+PortMIDI(PortMedia),但它们缺乏文档(特别是PortMIDI),而且没有官方社区,只有一个邮件列表(我认为论坛社区非常重要!),RTAudioRTMidi库的情况相同(或更糟)。

我也尝试了以下几个库:

  • STK,但我不喜欢它的文件组织方式。
  • Juce,我认为它为我做了太多事情,我只需要一个易于硬件集成的库。
  • OpenAL,我不理解它的架构,它依赖于ASIO/ALSA/CoreAudio...吗?我能访问MIDI端口吗?

所以...我的问题是:你有实时音频/MIDI方面的经验吗?你推荐哪个库给我?

谢谢


1
你可以只考虑音频功能,然后单独实现MIDI。MIDI并不太复杂,而且延迟已经尽可能地低了。 - Brad
OpenAL在多平台方面非常出色。虽然它没有MIDI,但使用一个专门的库来处理MIDI应该不会有问题。 - edA-qa mort-ora-y
FYI,Portaudio社区通过邮件列表非常活跃,并且非常乐于接受反馈和问题。 - Nick Haddad
4个回答

6

我曾经都使用过PortAudio/PortMidi和Juce,并且都取得了很好的效果。目前我正在将一个项目从PortMidi切换到Juce,因为在我的使用中,所有其他应用程序框架的功能非常有用(而且根据我的经验,这是非常可靠的)。结果可能因人而异。


6
我创建了一个名为"Crosstalk"的C++音频库。
Crosstalk是一个实时的C++音频引擎,允许你实时创建和路由音频系统(基本上就是你试图以图形方式实现的东西),而且使用起来非常简单。
下面是播放mp3文件的示例:
XtSystem system;
XtMp3Decoder mp3Decoder;
XtAudioDevice audioDevice;

long md = system.addComponent(&mp3Decoder);
long ad = system.addComponent(&audioDevice);

system.connOutToIn(md,0,ad,0);
system.connOutToIn(md,1,ad,1);

mp3Decoder.loadFile("../05 Tchaikovski-Swan Lake-Scene.mp3");
mp3Decoder.play();

您可以在此处查看API文档和许可细节: http://www.adaptaudio.com/Crosstalk 编辑(01-12-2012): Crosstalk已被开源项目“DSPatch”替代。DSPatch基本上是Crosstalk背后的路由引擎的升级版本,不再仅限于音频处理。 DSPatch允许您创建和路由几乎任何类型的进程链,并且免费用于个人和专有用途 :)

4
我建议您使用openFrameworks:http://www.openframeworks.cc/。它适用于各种媒体、交互等领域,并且具有易于使用和理解的API,文档也相当完善。只需点击上面的链接并了解一下即可。
祝好运,Audiodroid

1
本教程系列中,有一篇关于响应MIDI数据的文章。它还涵盖了其他主题,如合成等。

非常棒的VST/AU开发教程!其实我的问题与另一个主题有关...不管怎样,非常感谢,看起来非常有趣且写得很好! - Kill KRT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接