是否有API允许您定义底层声音硬件允许的最大OpenAL"源"数?
在互联网上搜索,我找到了两条建议:
第二项建议甚至被FreeSL采用.
那么,是否有一个通用的API来定义支持的同时"声音"的数量?
感谢您的时间,
法案
def*_*ode 11
更新:
我找不到一种方法来确定设备支持的最大源数量,但我想我已经找到了如何确定上下文支持的最大值(ALC_MONO_SOURCES).接下来,上下文支持与其父设备相同的数字.
//error checking omitted for brevity
ALCdevice* device = alcOpenDevice(NULL);
ALCcontext* context = alcCreateContext(device,NULL);
ALCint size;
alcGetIntegerv( device, ALC_ATTRIBUTES_SIZE, 1, &size);
std::vector<ALCint> attrs(size);
alcGetIntegerv( device, ALC_ALL_ATTRIBUTES, size, &attrs[0] );
for(size_t i=0; i<attrs.size(); ++i)
{
if( attrs[i] == ALC_MONO_SOURCES )
{
std::cout << "max mono sources: " << attrs[i+1] << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
这使用库存OpenAL驱动程序在Ubuntu 10.4上返回255.
答案很长很好...
基于软件的OpenAL驱动程序通常允许无限多个源.好吧,不是真的无限,最终你最终会最大化CPU或RAM.
大多数基于硬件的OpenAL驱动程序仅支持与硬件具有通道一样多的源.现代至少16,可能是32或更多,但可以多达256.可能声卡支持更多,但256是我曾经看过的最大.
在Windows DirectSound驱动程序上任意限制为31(为什么不是32?)源.DirectSound已被弃用,因此我不知道这是否仍然适用于Vista和Windows 7.
iPhone支持32个来源.
我见过一个基于硬件的驱动程序,它是软件支持的.这意味着它将为每个源提供硬件通道,直到它们用完为止.然后,它会将一些声音混合在软件中,然后再将其从硬件中运出.这提供了两个世界中最好的,接近无限来源,同时仍然使用尽可能多的硬件加速.
实际上,如果您使用的是基于硬件的驱动程序,只需继续创建它们,直到alGenSources失败.我听说这在iPhone上不起作用.有一些基于软件的OpenAL驱动程序会在alGenSources失败之前崩溃.
确实应该有一个API来检查源的最大数量和硬件加速的源数量.也许在扩展中.
你能源的数量创建通过alGenSources()具有无关的允许同时播放源的数量.
在iPad 4(我测试的唯一设备)上,您可以同时播放的最大语音数为32.如果您尝试播放第33个声音,则会收到错误alSourcePlay()
AL ERROR:-1 - AL_INVALID(一般错误)
声音没有播放.但是源可以存在,它可以移动,并为其设置各种设置.只有在其他32个播放声音中的一个完成播放之后才能播放.
我已经在iPad 4上成功创建了多达2048个源,只需使用循环.这并不意味着我可以同时播放 2048个声音.
所以我的答案是:自己测试硬件平台和代码 - 最大同时SFX.
| 归档时间: |
|
| 查看次数: |
7251 次 |
| 最近记录: |