9

我想在线/现场处理音频,我不断地从音频文件中读取音频样本,处理这些(例如应用一些效果),并将处理后的样本转发到像声卡这样的音频输出设备。输入文件具有常见的格式,例如 wav、mp3,甚至可能是 ogg。

是否有类似于 libav/ffmpeg 的用于音频文件的库,可以简化读取各种音频格式并为我提供源源不断的原始音频样本流?还是为每种格式使用单独的库的最佳解决方案?这些库应该是 c/c++ 和跨平台兼容(Mac、Win、Linux、ARM)。

编辑感谢所有答案。我评估了所有库并得出结论,最好还是坚持使用 libav/ffmpeg,因为大多数库都需要 ffmpeg 作为后端。

4

6 回答 6

3

我可以推荐RtAudioPortAudio用于跨平台音频 I/O。对于音频解码,您可能需要查看libsndfilelibaudiodecoder

于 2012-10-16T13:56:36.817 回答
3

退房朱斯。它是一个大型库,用于开发音乐软件的 VST 音频插件。里面有很多你不需要的东西,但我认为你可以只挑选音频部分来包含在你的构建中。AudioFormatReader及其关联的类可以做文件读取,也有输出到声卡的类。还有很多其他的音频处理工具。它是 GPL 许可的,跨平台的,并且他们声称支持实验性的 Android。我还没有将它用于项目,但我正在等待灵感!

于 2012-10-16T13:54:21.500 回答
2

我会检查libSDL,它有一个音频子系统,专为执行此类操作而构建,并处理 ogg、mp3、flac、wav 等。

于 2012-10-16T14:02:36.543 回答
1

LibVLC 可以做到这一点。libvlc 支持最多样化的音频(和视频)格式。它是一个 C/C++ 跨平台库。它还应该支持 Arm 代码生成。

于 2012-10-16T13:46:24.457 回答
1

您可以使用irrKlang库。我已经将它用于我的游戏。这是一个非常简单的库,例如播放一些文件“somefile.mp3”,你只需要编写

engine->play2D("somefile.mp3", true);

这个库也是跨平台的。并适用于 C++、C# 和所有 .NET 语言。

该库的更多功能(来自其自己的站点)

它具有低级音频库中已知的所有功能以及许多有用的功能,例如复杂的流引擎、可扩展的音频读取、单线程和多线程模式、低端硬件的 3D 音频仿真、插件系统、多个滚降模型等等. 所有这些都可以通过一个极其简单的 API 来访问。

于 2012-10-19T09:02:25.913 回答
0

GAudio Library可能是您所追求的。它简单、强大、跨平台和可扩展

GAudio的hello world是这样的:

gaudio_init("addons");

const char* filename = "..\\media\\trek12.wav";

gsource* source = gaudio_source_create_from_file(filename,FALSE);
if(source == NULL)
{   
    printf("load file:%s error!\n",filename);
    printf("bad source.\nerror code:%d.\n",gaudio_error_get());
    gaudio_deinit();
    return -1;
}

printf("play filename:%s\n",filename);

gaudio_source_play(source,FALSE);

printf("\nplaying, press any key to quit.\n");
getch();

gaudio_source_stop(source);
gaudio_source_destroy(source);

gaudio_deinit();
于 2013-11-07T13:41:45.343 回答