mise à jour:
Je ne peux pas trouver un moyen de déterminer quel est le nombre maximum de sources d'un appareil prend en charge, mais je pense que je J'ai trouvé comment déterminer le maximum de support d'un contexte (ALC_MONO_SOURCES
). Il s'ensuit qu'un contexte prend en charge le même numéro que son périphérique parent.
//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;
}
}
Cela renvoie 255 sur Ubuntu 10.4 en utilisant le pilote de stock OpenAL.
La réponse longue est bien un peu ...
pilotes OpenAL à base de logiciels permettent généralement un nombre infini de sources. Eh bien, pas vraiment infini, vous finirez par perdre le CPU ou la RAM.
La plupart des pilotes OpenAL basés sur le matériel prennent uniquement en charge autant de sources que le matériel a des canaux. Moderne, c'est au moins 16, probablement 32 ou plus, mais peut aller jusqu'à 256. Il y a probablement des cartes son qui supportent plus mais 256 est la plus grande que j'ai jamais regardée.
Sous Windows Les pilotes basés sur DirectSound sont arbitrairement limités à 31 sources (pourquoi pas 32?). DirectSound a été déprécié, donc je ne sais pas si cela s'applique encore à Vista et Windows 7.
L'iPhone prend en charge 32 sources.
J'ai vu un pilote basé sur le matériel qui a été sauvegardé par logiciel. Ce qui signifie qu'il donnerait à chaque source un canal matériel jusqu'à ce qu'ils soient épuisés. Ensuite, il serait mélanger certains des sons dans le logiciel avant de l'expédier sur le matériel. Cela donne le meilleur des deux mondes, près de sources infinies, tout en utilisant le plus possible l'accélération matérielle.
En pratique, si vous utilisez un pilote matériel, continuez à les créer jusqu'à ce que alGenSources échoue. J'ai entendu dire que cela ne fonctionne pas sur l'iPhone. Il y a quelques pilotes OpenAL basés sur un logiciel qui vont planter avant qu'AlGenSources échoue.
Il devrait vraiment y avoir une API pour vérifier le nombre maximum de sources et le nombre de sources accélérées matériellement. Peut-être qu'il y a dans les extensions.
Est-ce que OpenAL ne fournit pas autant de sources que nécessaire, événement s'il sera rendu par soft? Le contexte OpenAL n'a qu'un indice (donné au moment de la création) sur le nombre de sources que votre application peut avoir. Je pense que vous devriez laisser cela configurable par besoin de performance. – Arpegius