Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 25. květen 2013, 17:03:41 Předmět: OpenAL :: Chyba při pohybu okna |
|
|
Zdravím,
snažím se postupně konečně dodělat Sollertia engine, ale nemohu vyřešit jeden problém týkající se zvuků.
Streamuji ogg z paměti. Nic neobvyklého.
Když ale přidržím okno za lištu, tak se po čase přestane zvuk přehrávat. Divné ale je, že se dál streamuje, ale OpenAL ho už nepřehraje. Jako kdyby se něco podělalo na OpenAL.
Možná že je to nějaká kravina u mě, ale třeba se někdo s něčím podobným setkal.
Dík moc. _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
Ladis
Založen: 18. 09. 2007 Příspěvky: 1536 Bydliště: u Prahy
|
Zaslal: 25. květen 2013, 17:15:18 Předmět: |
|
|
Tak ho přestaň držet Pokud to bude zas normálně pokračovat, tak vyřešeno. Kolik lidí drží okno za lištu? _________________ Award-winning game developer |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 25. květen 2013, 17:21:49 Předmět: |
|
|
To je ten problém, máš zapnutý okení režim, budeš si chtít okno posunout jinam a když ho budeš držet moc dlouho, tak se Ti přstane natrvalo přehrávat zvuk...to je ten problém...zvuk pak už nepokračuje v přehrávání, ale streamuje se... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 25. květen 2013, 18:00:27 Předmět: |
|
|
Jo, takže jsem musel udělat to, že jsem před voláním funkce alSourceUnqueueBuffers musel zavolat alSourceStop, a po jeho volání opět zase zavolat alSourcePlay.
Přestalo to zlobit, jen to teď každou chvíli praská, jak se zvuk při streamování zastaví...nechápu... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 25. květen 2013, 18:17:08 Předmět: |
|
|
Ok, tak jsem to vyřešil. Pro streamování jednoho zvuku využívám 3 buffery. Nemělo by se stávat, že se musí bufferovat do všech třech najednou (na začátku), když ale udělám tu opičárnu s přesunem okna, tak je třeba je znovu naplnit...
Když tedy detekuji, že jsou zpracované všechny 3 buffery, je třeba zastavit zdroj zvuku, nabufferovat a pokračovat...
To funguje...
Něco takového:
kód: |
alGetSourcei(soundSource, AL_BUFFERS_PROCESSED, &processed);
if (processed == AIRY_AUDIO_BUFFER_COUNT)
{
restart = true;
}
if (restart) { alSourceStop(soundSource); }
while(processed--)
{
UnInt buff;
alSourceUnqueueBuffers(soundSource, 1, &buff);
iState = streamIt(buff);
if (!iState)
{
alSourceQueueBuffers(soundSource, 1, &buff);
}
}
if (restart) { alSourcePlay(soundSource); } |
_________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 25. květen 2013, 18:36:09 Předmět: |
|
|
Jak myslíte, že je vhodné volit velikost jednoho bufferu. Momentálně tam mám nastaveno něco kolem 260kB a jsou tři pro jeden zvuk. Říkám si jestli to není hodně...ale zas nechci aby se tak často streamovalo... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 25. květen 2013, 18:43:50 Předmět: |
|
|
odhadujem ze ti pri drzani okna pozastavi event loop a teda prestanes posielat buffery do OpenAL. a ked dojdu buffery v queue tak IIRC sa zdroj nastavy na STOPED takze ho musis znova spustit.
velkost bufferu je podla toho aku latenciu chces mat. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 26. květen 2013, 07:34:05 Předmět: |
|
|
nou napsal: |
odhadujem ze ti pri drzani okna pozastavi event loop a teda prestanes posielat buffery do OpenAL. a ked dojdu buffery v queue tak IIRC sa zdroj nastavy na STOPED takze ho musis znova spustit. |
Jj, už jsem na to také přišel. Škoda, že jsem to nevěděl dřív, mohl jsem si ušetřit dlouhosáhlé debugování a přepisování poloviny streameru...
nou napsal: |
velkost bufferu je podla toho aku latenciu chces mat. |
Co nejmenší, to je jasné.
Ale zase tak abych nezbořil 20 zvuky paměť. _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
Mem
Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 26. květen 2013, 11:40:10 Předmět: |
|
|
VODA napsal: |
nou napsal: |
velkost bufferu je podla toho aku latenciu chces mat. |
Co nejmenší, to je jasné.
Ale zase tak abych nezbořil 20 zvuky paměť. |
Jsi asi nepochopil noua, pokud jsem to správně pochopil, tak má na mysli přímou úměru mezi velikostí bufferu a latencí, tj. čím menší buffer, tím menší latence (slyší ten zvuk hned), jen si musíš pohlídat nějakou minimální velikost, aby to při streamování stíhalo a zvuk se nesekal |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 26. květen 2013, 11:54:37 Předmět: |
|
|
Je jasné, že chci mít co nejmenší zpoždění a jak si sám řekl, je třeba nějaká minimální velikost aby se zvuk nesekal. Takže mě zajímala nějaká rozumná hranice.
A tím zbořením paměti jsem to trochu přestřelil, protože s aktuálním nastavením bufferů je pro 20 jednotlivých zvuků potřeba asi 12MB, kdo dneska nemá na RAMce přebytečných 12MB? (200 kB cca 1 buffer * 3 buffery na zvuk = 600 KB * 20 zvuků/zdrojů = 12MB).
Takže asi pohoda.
Reálné zpoždění je velice malé. _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
nou
Založen: 28. 07. 2007 Příspěvky: 1047
|
Zaslal: 26. květen 2013, 12:34:53 Předmět: |
|
|
tak tato latencia zohrava ulohu hlavne ak to naozaj streamujes napriklad zo siete. pri prehravani zo suboru to az tak nehraje rolu ale je rozdiel ci musi CPU dekodovat sekundu zvuku kym zacne prehravat alebo len 10ms. _________________ Najjednoduchšie chyby sa najtažšie hľadajú. |
|
Návrat nahoru |
|
|
VODA
Založen: 29. 07. 2007 Příspěvky: 1721 Bydliště: Plzeň
|
Zaslal: 26. květen 2013, 12:46:55 Předmět: |
|
|
Navíc to ještě streamuji z paměti... _________________ Opravdovost se pojí s trýzní... |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 27. květen 2013, 10:07:40 Předmět: |
|
|
Taky streamuju ogg z paměti. Používám 3 buffery po 32 kB. Měly by stačit i 2. Ogg dekoduju v jiném vlákně a problém s lištou okna (ale i zásekama při loadingu) je vyřešen. Kdyby tě zajímalo něco víc (třeba k synchronizaci), dej vědět.
Ještě k velikosti bufferu a latenci:
podle kvality zvuků, co používáš, si vypočítej, kolik sekund zvuku ten buffer pojme. Podle mě, by měl bejt tak velkej, aby vydržel aspoň několik frejmů při nízkým fps. Pár stovek ms by mohlo stačit.
S tou latencí bych to neviděl tak černě. Jde prostě jen o to, jak rychle se ti to oggčko dekoduje. Pokud to používáš pro hudbu a ambient, tak je myslím putna, jestli začne hrát o několik ms pozdějc. Ale to zvaž.
Pro obyčejné zvuky ve hře (bouchnutí dveřma, kroky, atd...) bych streamování nedoporučil. Bude to jen blbě navazovat, dekodovat již dekodované (kroky), a td. Klidně použij ogg, ale je lepší ho dekodovat při loadingu.
..zvukový engine s ogg a OpenAL jsem dělal do různých her v různých obměnách 4x a vždycky fungoval :-) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Spytihněv
Založen: 05. 04. 2011 Příspěvky: 547 Bydliště: Praha
|
Zaslal: 27. květen 2013, 11:05:16 Předmět: |
|
|
V Aquadelicu se hudba při chycení okna zasekne, ale jen v menu a v doku, během samotného hraní ne. |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1526 Bydliště: Telč
|
Zaslal: 27. květen 2013, 11:06:33 Předmět: |
|
|
Spytihněv: jo, tam sem to ještě moc neřešil (asi tak, jak psal Ladis :) ) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
|