音频/MIDI c++库的一个实时应用程序

Audio/MIDI C++ library for a real-time application

本文关键字:一个 实时 应用程序 MIDI c++ 音频      更新时间:2023-10-16

正如我已经在另一个线程中说过的,我正在研究一个与音频实时图形编程相关的项目(如Pure Data, Max/MSP, Reaktor)。

我做了一天的研究在互联网上,寻找一个好的(维护,良好的文档和高度可移植的)c++库与音频和MIDI的低级交互,但我仍然不能决定一个库。

我正在考虑PortAudio+PortMIDI (PortMedia),但它们缺乏文档(尤其是PortMIDI),没有官方社区,只是一个邮件列表(我认为论坛社区非常重要!),RTAudio和RTMidi库的情况相同(或最糟糕)。

我也试着:

  • STK,我不喜欢它的文件组织。
  • juice,我认为它为我做的太多了,我只需要一个简单的硬件集成
  • OpenAL,我不了解它的架构,它依赖于ASIO/ALSA/CoreAudio…我可以访问MIDI端口吗?

所以…我的问题是:你有实时音频/MIDI的经验吗?你推荐我去哪个图书馆?

谢谢

我使用了PortAudio/PortMidi和Juce,两者都取得了很好的效果。我正在将一个项目从PortMidi切换到Juce,因为对我来说,所有其他应用程序框架的东西都非常有用(根据我的经验,它是坚如磐石的)。YMMV .

我创建了一个名为"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允许您创建和路由几乎可以想象的任何类型的过程链,并且免费用于个人和专有用途:)

我还推荐openframeworks: http://www.openframeworks.cc/它适用于各种媒体,交互,…它有一个非常容易使用/理解的API,它也有很好的文档。点击上面的链接去看看吧。

祝你好运,Audiodroid

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