用于游戏的跨平台声音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。