用于游戏的跨平台声音API?

是否只有声音的API?

Allegro或SDL等API为我的需求提供了太多。 我只需要一个可以执行以下操作的库:

InitSound(); Sound *door = LoadSound("door.wav"); PlaySound(door,volume); 

如果它可以支持Vorbis或MP3等压缩格式,那也会很棒。

我是SFML库的忠实粉丝。 它确实提供了额外的图形和网络function,但与此问题相关的是它还具有整洁的音频包。

音频function包括:

  • 尽可能使用硬件加速
  • 可以加载和保存标准声音格式: Ogg , WAV , FLAC , AIFF , Au , RAW ,paf, 8SVX ,NIST,VOC, IRCAM , W64 , MAT4 ,MAT5 PVF , HTK , SDS ,AVR, SD2 , 核心音频格式 ,WVE ,MPC2K, RF64
  • 可以直接从内存中的文件加载所有音频资源
  • 3D声音空间化
  • 轻松捕获音频的界面
  • 有效管理内存,因此您不必担心资源生命周期或存储
  • 支持大文件的流媒体; 您甚至可以为任何来源编写自定义流媒体类(网络,……)
  • 支持多声道格式(单声道,立体声,4.0,5.1,6.1,7.1)

网站: http : //www.sfml-dev.org/

使用PortAudio 。 它是一种便携式跨平台音频API。

如果您习惯使用OpenGL,那么您可能想尝试OpenAL ?

API与OpenGL非常相似,所以你应该有宾至如归的感觉。

我非常喜欢SFML ,它是用C ++编写的,遵循大多数良好API设计规则( RAII等)。

如果您更喜欢更“类C”的库,则需要提及SDL 。

SDL_sound使用起来非常简单,并为您处理解码。 如果您使用OpenAL ,则必须自己进行解码(最后我使用它,无论如何)。 不过,我实际上更喜欢OpenAL用于游戏。

您可能希望了解Kowalski项目 ,这是一个面向游戏和类似交互式应用程序的跨平台音频API。 它是在zlib许可下发布的。

如果您正在寻找专业的跨平台声音设计API和创作应用程序,请查看Audiokinetic Wwise 。 它可以做的不仅仅是播放声音。 它具有效果,复杂的声音逻辑系统,声音分层,分析,交互式音乐工具等…它提供Ogg Vorbis和MP3支持,并且它是免费的非商业项目。

虽然它只对非商业应用程序免费,但Bass实际上很容易实现。

用法示例:

 // initialize device at 44kHz if (!BASS_Init(-1,44100,0,0,NULL)) { printf("Can't initialize device"); return 0; } HSAMPLE sample; HCHANNEL channel; // load from disk if( sample = BASS_SampleLoad(FALSE,"foo.wav",0,0,1,BASS_SAMPLE_OVER_POS) ) { // get playable channel channel = BASS_SampleGetChannel( sample,FALSE); // play BASS_ChannelPlay(channel,TRUE); // wait for playback to finish while( BASS_ChannelIsActive( channel ) ) Sleep(100); BASS_SampleFree(sample); } // cleanup BASS_Free(); 

考虑libsoundio 。 它不支持压缩或编解码器,但它确实提供了强大的跨平台声音API。 它可能对您的需求有点低; 您正在寻找的库可能建立在libsoundio之上。

我知道这是一个古老的问题,但现在有人磕磕绊绊地想看看FMOD

您可以使用低级API开始简单,然后根据需要使用更强大的function(和FMOD Studio)。

这是播放声音的文档 ,它引用了API中的示例:

此示例显示如何简单地加载和播放多个声音,这是FMOD的最简单用法。

我将这个低级API用于我开发的跨平台(Mac,Windows)Space Invaders克隆,发现它非常有用!

试试libao http://www.xiph.org/ao/ – 它非常简单并支持各种平台。 我成功地尝试了覆盆子pi。