Warsztat - Programowanie gier

Lipiec 30, 2010, 17:35:05 *
Witamy, Gość. Zaloguj się, lub zarejestruj proszę.

Zaloguj się podając nazwę użytkownika, hasło i długość sesji
Aktualności: Warsztat, Regulamin forum, #warsztat, Wiki, FAQ, NoPaste, Mapa
 
   Strona główna   Pomoc Szukaj Zaloguj się Rejestracja  
Strony: 1 [2]
  Drukuj  
Autor Wątek: Pytanie o dekodowanie muzyki.  (Przeczytany 1448 razy)
.c41x
Jr. Member
**

wiadomości: 94



Zobacz profil WWW
« Odpowiedz #15 : Sierpień 28, 2009, 01:34:39 »

soku11 - jesli to ma byc szybkie to chyba lepiej dekodowac z ramu skompresowany (ktory w calosci zajmuje malo). musisz znalesc kompromis: albo ladujesz caly plik zdekompresowany do ramu i zgadzasz sie na duze zuzycie pamieci i dluzszy czas przygotowania, albo ladujesz do ramu skompresowany i dekompresujesz po kawalku i zgadzasz sie na narzut zwiazany z dekodowaniem w locie i masz wiecej wolnej pamieci. zadna z metod nie jest lepsza od drugiej - zalezy od zastosowania.
Cytuj
Za to streamowanie 3MB pliku mp3 z dysku zamiast wczytania go w całości jest już mimo wszystko dość dziwnym pomysłem. Smiley
ja tego nie powiedzialem...
Cytuj
Jasne, obecnie chyba każde intro 4k z dźwiękiem na starcie generuje w pamięci WAV z kompletnym podkładem muzycznym (tak jest najoszczędniej z rozmiarem kodu). Smiley
to jest forum o gamedev wiec pod tym katem pisze. dema to nie sa normalne programy Smiley w grze takie cos wg. mnie nie przejdzie i im mniej zajetej pamieci tym lepiej (zwlaszcza na dzwieki) im krotsze czasy ladowania zasobow tym lepiej. streamowanie jest do odtwarzania dluzszych dzwiekow niz pojedyncze efekty ktore najlepiej jak sie mieszcza w jednym buforze, a tak zazwyczaj jest.
Zapisane
Dab
Member2000
*******

wiadomości: 2999


wiadomości: 2963


Zobacz profil WWW
« Odpowiedz #16 : Sierpień 28, 2009, 02:03:40 »

Streamowanie mp3 z dysku jest bez sensu, natomiast trzymanie w pamięci 4MB z mp3 i dekodowanie jej na bieżąco jest jak najbardziej OK -- OpenAL + libvorbis tak działa.
Zapisane

soku11
Sr. Member
****

wiadomości: 451


Zobacz profil
« Odpowiedz #17 : Sierpień 28, 2009, 02:11:14 »

Jak pisałem - zostawię to już tak jak jest. Gdyby na testowej platformie coś się muliło, to wtedy wczytam plik do pamięci i będę go dekodował. To jedynie zamiana funkcji na feed'ującą oraz dodanie wczytania pliku do pamięci.

Pozdrawiam.
Zapisane
bies
Sr. Member
****

wiadomości: 383


Zobacz profil
« Odpowiedz #18 : Sierpień 28, 2009, 02:24:52 »

bies - mozesz podac argument dlaczego nie ma sensu? dlaczego wg. mnie ma: male zuzycie pamieci, wystarczajaca predkosc, zuzywa mala ilosc buforow (nie ma ich nieskonczenie wiele). dysk nie ma sie gdzie wykazac, musi zaladowac w kazdej opcji te same dane.
Primo pamięć: jeśli przy strumieniowaniu z dysku zajęte jest 1MB a przy odczycie całości 5MB to jest to pięciokrotny wzrost zajętości pamięci. A czy coś jest ,,mało'' lub ,,dużo'' to zależy od zastosowania (moje G1 ma tylko 192MB pamięci na system i ew. grę)

Secundo: wystarczająca prędkość. Jeśli jest wystarczająca to OK. Ale jeśli opóźnienie wynikające z odczytania całości na starcie jest niedopuszczalne?

Tertio: mała liczba buforów. Pewnie jest nad tym łatwiej zapanować. Ale rozwiązanie które opisał Soku11 to też nie jest jakaś ,,rocket science''. Poza tym mała liczba buforów (tj. np 4 do 200) w bardzo niewielkim stopniu przekłada się na wydajność i zajętość pamięci (196 wskaźników w systemie na x86 to 784 bajty).

Quatro: dysk właśnie nie musi się wykazać. Bo odtwarzanie na niego poczeka. W przypadku strumieniowania dysk musi nadążyć z podawaniem danych do karty (dodając dekodowanie po drodze).
Zapisane
.c41x
Jr. Member
**

wiadomości: 94



Zobacz profil WWW
« Odpowiedz #19 : Sierpień 28, 2009, 03:43:50 »

bies:
'primo': jesli chodzi o odtwarzacze muzyki to strumieniowanie z dysku jest ok, ale jesli o gry chodzi to nie, wyjatkiem moga byc jakies baardzo dlugie utwory (kilkudziesiecio minutowe co najmniej) ktore nie beda sie miescic nawet skompresowane w ramie. ale to sie chyba nie zdarza w profesjonalnych produkcjach...

'secundo': to byl mój argument. dekodowanie w locie nie bedzie powodowac opoznienia na starcie tak duzego jak 'pre-dekodowanie'.

'tertio': twierdzisz ze 2 bufory to malo, 3 to max? nie ma to nic wspolnego z rozmiarami wskaznikow.

'quatro': pisalem juz: chcesz odtworzyc caly plik np. mp3/ogg/whatever to musisz go calego przeczytac. jak piszesz ze 'dysk musi nadazyc z podawaniem danych do karty' - tak. ale nie jesli masz go calego w ramie, skad odczyt do dekompresji jest szybszy.

soku11:
masz na mysli bufory sprzetowe (te 20)? czy dane wav w ram? ja caly czas pisze o buforach sprzetowych. jesli uzywasz jednego to napewno to jest przyczyna zarywania dzwieku. moze wrzuce funkcje z mojego kodu. to jest funkcja ktora przeladowuje bufory i odgrywa dzwiek, uzywam ja zapetlona w watku przy odtwarzaniu:
Kod:
bool AudioSample::update_buffers()
{
// jesli jakis bufor zakonczyl grac, to go usuwa z kolejki
// i laduje ponownie do niego nowe dane  umieszcza go na koncu
// kolejki. funkcja zwraca true jesli dodano nowy element do
// kolejki, jesli nie - zwraca false. jesli nie ma bufora ktory
// skonczyl grac zwraca true
int buff_processed; // ile zostalo juz przetworzonych w kolejce (buforow)
bool active=true;
alGetSourcei(m_source,AL_BUFFERS_PROCESSED,&buff_processed);
// m_source to zrodlo dzwieku

while(buff_processed--) // przejdzie przez wszystkie odegrane bufory
{
ALuint buffer;
// wyjmuje bufor z kolejki (zwraca ktory wlasnie usunal)
alSourceUnqueueBuffers(m_source,1,&buffer);
// laduje nowe dane do tegu usunietego bufora
active=setup_buffer(buffer); // laduje do bufora buffer - tego pustego
// i umieszcza go w kolejce (na koniec)
alSourceQueueBuffers(m_source,1,&buffer);
}
return active;
}
« Ostatnia zmiana: Sierpień 28, 2009, 10:44:09 wysłane przez .c41x » Zapisane
cybek
SuperHero Member
******

wiadomości: 1111


Zobacz profil WWW
« Odpowiedz #20 : Sierpień 28, 2009, 11:42:20 »

4MB to tyle, co nic. Na konsolach jeszcze bym się zgodził, ale na PC to nie jest gra warta świeczki.
Powiedz to programistom demosceny Wink
Zapisane

Krzysiek K.
Member2000
*******

wiadomości: 9810



Zobacz profil
« Odpowiedz #21 : Sierpień 28, 2009, 12:22:58 »

Powiedz to programistom demosceny Wink
Źle trafiłeś. W przypadku demosceny dodatkowe 4MB ramu każdy scenowiec zaallokuje bez mrugnięcia okiem. Wink
Zapisane

Aktualne zajęcie: Szkoła DJKurs DJ
cybek
SuperHero Member
******

wiadomości: 1111


Zobacz profil WWW
« Odpowiedz #22 : Sierpień 28, 2009, 12:25:48 »

Powiedz to programistom demosceny Wink
Źle trafiłeś. W przypadku demosceny dodatkowe 4MB ramu każdy scenowiec zaallokuje bez mrugnięcia okiem. Wink
Nawet jeśli demo ma zajmować 2kB? :>
Zapisane

.c41x
Jr. Member
**

wiadomości: 94



Zobacz profil WWW
« Odpowiedz #23 : Sierpień 28, 2009, 12:36:32 »

te 2 kb to zajmuje sam program, nie ile moze zuzyc ramu Wink
Zapisane
Krzysiek K.
Member2000
*******

wiadomości: 9810



Zobacz profil
« Odpowiedz #24 : Sierpień 28, 2009, 12:52:41 »

Cytuj
Nawet jeśli demo ma zajmować 2kB? :>
Jasne. Typowe intra 4kB potrafią zużywać 100-200MB ramu, bo to nic nie kosztuje, a często oszczędza rozmiar.
Zapisane

Aktualne zajęcie: Szkoła DJKurs DJ
cybek
SuperHero Member
******

wiadomości: 1111


Zobacz profil WWW
« Odpowiedz #25 : Sierpień 28, 2009, 12:58:57 »

Cytuj
Nawet jeśli demo ma zajmować 2kB? :>
Jasne. Typowe intra 4kB potrafią zużywać 100-200MB ramu, bo to nic nie kosztuje, a często oszczędza rozmiar.
Ahh, moja wina, zapomniałem że niekoniecznie im więcej ramu program zabiera tym więcej zajmuje xD To ja sie nie odzywam już ;p
Zapisane

misioslaw
Hero Member
*****

wiadomości: 641



Zobacz profil WWW
« Odpowiedz #26 : Sierpień 28, 2009, 13:07:22 »

4MB to tyle, co nic. Na konsolach jeszcze bym się zgodził, ale na PC to nie jest gra warta świeczki.
Tak, na szczęście nie każdy myśli tak jak ty i 4GB RAMu jeszcze wystarcza do większości zastosowań.

chcesz odtworzyc caly plik np. mp3/ogg/whatever to musisz go calego przeczytac.
Ale niekoniecznie na raz. Każdy szanujący się odtwarzacz ładuje dane porcjami.

« Ostatnia zmiana: Sierpień 28, 2009, 13:09:25 wysłane przez misioslaw » Zapisane
Strony: 1 [2]
  Drukuj  
 
Skocz do:  

Hosting: Polska Strefa - Ogłoszenia
Powered by SMF 1.1.7 | SMF © 2006, Simple Machines LLC