アップデート:
デバイスがサポートするソースの最大数を決定する方法を見つけることはできませんが、コンテキストがサポートする最大数を決定する方法を見つけたと思います(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;
}
}
これにより、標準のOpenALドライバーを使用してUbuntu10.4で255が返されます。
長い答えはちょっと...
ソフトウェアベースのOpenALドライバーは、通常、無限の数のソースを許可します。まあ、実際には無限ではありませんが、最終的にはCPUまたはRAMのいずれかを最大にします。
ほとんどのハードウェアベースのOpenALドライバーは、ハードウェアにチャネルがある数のソースのみをサポートします。現代では、それは少なくとも16、おそらく32以上ですが、256にもなる可能性があります。おそらくそれ以上をサポートするサウンドカードがありますが、256は私が今まで見た中で最大です。
Windowsでは、DirectSoundベースのドライバーは任意に31(なぜ32ではないのですか?)ソースに制限されています。DirectSoundは非推奨になっているため、これがVistaとWindows7にまだ適用されるかどうかはわかりません。
iPhoneは32のソースをサポートしています。
ソフトウェアでバックアップされたハードウェアベースのドライバーを見たことがあります。つまり、各ソースに、なくなるまでハードウェアチャネルが与えられます。次に、ハードウェアから出荷する前に、ソフトウェアでいくつかのサウンドをミックスします。これにより、可能な限り多くのハードウェアアクセラレーションを使用しながら、無限のソースに近い両方の長所が得られます。
実際には、ハードウェアベースのドライバーを使用している場合は、alGenSourcesが失敗するまでドライバーを作成し続けてください。これはiPhoneでは機能しないと聞きました。alGenSourcesが失敗する前にクラッシュするソフトウェアベースのOpenALドライバーがいくつかあります。
ハードウェアアクセラレーションされたソースの最大数とソースの数をチェックするためのAPIが本当に必要です。多分拡張機能にあります。