Avatar
Lukáš Vámoš:21. července 10:12

Ahoj,
při zobrazení modálního dialogu se má přehrát jeden zvuk synchronně a po jeho skončení se má přesunout focus na ListBox, který slouží jako zvukové menu ve hře pro nevidomé. Menu po té přehraje zvuk s popisem první položky v menu. Ale v jádru jde jen o ty dva po sobě přehrávané zvuky.

Zkusil jsem: Mám třídu SoundMachine, která spravuje jednotlivé zvuky, dále pak třídu SoundItem, která spravuje jeden zvuk. Můj poslední pokus vypadal následovně:
metoda SoundItem.PlaySync uloží do SoundMachine handle synchronního zvuku a spustí přehrávání.
Metoda SoundItem.Play zkontroluje, je-li aktivní nějaký synchronní zvuk. Pokud ano, nastaví callback, který po skočení prvního zvuku přehraje nový zvuk. A nefunguje to!

public void Play()
{
int oldHandle = )SoundMachine­.LastSyncSoundHan­dle;
if (oldHandle == -1 && BASS_ChannelI­sActive(oldHan­dle) != BASSActive.BAS­S_ACTIVE_PLAY­ING) // žádný synchronní zvuk
BASS_ChannelPla­y(_handle, true);přehraj okamžitě
else // počkej na dokončení zvuku
{
// vytvoř delegáta
SYNCPROC p = new SYNCPROC((handle, channel, data, user) =>
{
SoundMachine.Las­tSyncSoundHan­dle = -1;
smaž číslo starého zvuku
BASS_ChannelPla­y(_handle, true); // přehraj nový
};

Bass.BASS_Chan­nelSetSync(ol­dHandle, BASSSync.BASS_SYN­C_END, 0, p, (IntPtr)0); // nastav callback
}if
}
fnc

Chci docílit: Chci, aby se přehrál jeden konkrétní zvuk, a teprve po jeho skončení se má přehrát druhý zvuk.

 
Odpovědět 21. července 10:12
Avatar
Lukáš Vámoš:21. července 13:02

Vyřešeno!
Jednoduše jsem použil uspání vlákna na dobu trvání zvuku.

 
Nahoru Odpovědět 21. července 13:02
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.