.[ ČeskéHry.cz ].
OpenAL :: Chyba při pohybu okna
Jdi na stránku 1, 2  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Hudba / Zvuk
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ň

PříspěvekZaslal: 25. květen 2013, 17:03:41    Předmět: OpenAL :: Chyba při pohybu okna Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Ladis



Založen: 18. 09. 2007
Příspěvky: 1536
Bydliště: u Prahy

PříspěvekZaslal: 25. květen 2013, 17:15:18    Předmět: Odpovědět s citátem

Tak ho přestaň držet Smile 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 25. květen 2013, 17:21:49    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 25. květen 2013, 18:00:27    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 25. květen 2013, 18:17:08    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 25. květen 2013, 18:36:09    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 25. květen 2013, 18:43:50    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 26. květen 2013, 07:34:05    Předmět: Odpovědět s citátem

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é. Very Happy
Ale zase tak abych nezbořil 20 zvuky paměť. Very Happy
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 26. květen 2013, 11:40:10    Předmět: Odpovědět s citátem

VODA napsal:
nou napsal:
velkost bufferu je podla toho aku latenciu chces mat.

Co nejmenší, to je jasné. Very Happy
Ale zase tak abych nezbořil 20 zvuky paměť. Very Happy

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 26. květen 2013, 11:54:37    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
nou



Založen: 28. 07. 2007
Příspěvky: 1047

PříspěvekZaslal: 26. květen 2013, 12:34:53    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
VODA



Založen: 29. 07. 2007
Příspěvky: 1721
Bydliště: Plzeň

PříspěvekZaslal: 26. květen 2013, 12:46:55    Předmět: Odpovědět s citátem

Navíc to ještě streamuji z paměti... Very Happy
_________________
Opravdovost se pojí s trýzní...
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 27. květen 2013, 10:07:40    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Spytihněv



Založen: 05. 04. 2011
Příspěvky: 547
Bydliště: Praha

PříspěvekZaslal: 27. květen 2013, 11:05:16    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
]semo[



Založen: 29. 07. 2007
Příspěvky: 1526
Bydliště: Telč

PříspěvekZaslal: 27. květen 2013, 11:06:33    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> Hudba / Zvuk Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2  Další
Strana 1 z 2

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna