用于读取音频文件的库

时间:2012-10-16 13:34:21

标签: c++ c mp3 wav audio-processing

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

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

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

6 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

答案 2 :(得分:2)

我会查看libSDL,它有一个音频子系统,专门用于处理ogg,mp3,flac,wav等等。

答案 3 :(得分:1)

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

答案 4 :(得分:1)

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

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

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

此库的更多功能(来自其自己的网站)

  

它具有低级音频库中已知的所有功能   像许多有用的功能,如复杂的流媒体引擎,   可扩展的音频读取,单线程和多线程模式,3d音频   低端硬件仿真,插件系统,多次滚降   模特等等。所有这些都可以通过一个非常简单的API访问。

答案 5 :(得分:0)

GAudio Library也许是你追求的。 它简单,强大,跨平台和可扩展

GAudio的问候世界是这样的:

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();