frca
Založen: 28. 07. 2007 Příspěvky: 1558
|
Zaslal: 22. srpen 2008, 15:46:42 Předmět: OpenAL - bug? |
|
|
Zdravím, mám problém s OpenAL. V programu volám fci play_sound (viz níže). Problém je, že někdy zvuk zahraje a někdy ne (méně často). Dělám něco špatně, nebo je bug v aktuální implementaci OpenAL od Creative?
Smysl zdrojáku je v tom, že existuje fronta 20-ti sourců, aby mohlo hrát zároveň až 20 zvuků, při větším počtu prostě vždycky ten nejdříve začlý přestane hrát (v OpenAL to asi jinak řešit nejde, a ani to nevadí, kdyby to fungovalo).
Díky,
frca
EDIT: Asi to bylo kvůli ovladačům zvukovky, protože po nainstalování nových tento problém, jak se zdá, zmizel.
kód: |
const int snd_source_size = 20;
ALuint snd_source[snd_source_size];
int snd_source_i = 0;
void source_params(ALuint source, ALuint buffer, float gain, bool looping = false)
{
const ALfloat sourcePos[] = { 0.0, 0.0, 0.0 };
const ALfloat sourceVel[] = { 0.0, 0.0, 0.0 };
alSourcei (source, AL_BUFFER, buffer );
alSourcef (source, AL_PITCH, 1.0 );
alSourcef (source, AL_GAIN, gain );
alSourcefv(source, AL_POSITION, sourcePos);
alSourcefv(source, AL_VELOCITY, sourceVel);
alSourcei (source, AL_LOOPING, looping );
}
void play_sound(ALuint buffer, float gain)
{
source_params(snd_source[snd_source_i], buffer, gain);
alSourcePlay(snd_source[snd_source_i]);
++snd_source_i;
snd_source_i %= snd_source_size;
} |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 23. srpen 2008, 09:12:49 Předmět: |
|
|
No..je to trochu alchymie, občas se mi zdálo, že to OpenAL dělá všelicos jinak než bych čekal. Co se týče řešení problému, že může hrát jen několik zvuků zaráz: je dobrý zvukům přidělit prioritu (nejlépe vypočíst jim hlasitost podle vzorce, který je uveden v dokumentaci) a podle potřeby jim přidělovat handle. _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|