Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   27 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
  • 0
Cruel_boy

zastosowanie delta time przy loopowaniu muzyki

Pytanie

Cruel_boy    0

loopuje muzyke loop pointem uzywajac funkcji związanych z pozycją dźwięku (ponieważ dalej nie ma na to osobnej funkcji w gm)

 

create:

GML
musicvar = audio_play_sound(music,9999,0);

 

looppoint=3,090;

 

step:

GML
musicpos = audio_sound_get_track_position(musicvar);

 

if musicpos >= audio_sound_length(musicvar)

{

audio_sound_set_track_position(musicvar,looppoint);

}

 

muzyka nie loopuje się (loopuje sie gdy wszystkie księżyce, planety i gwiazdy ułożą się w jednej linii), chyba że przy warunku if odejme z dwie klatki od audio_sound_length, wtedy jest większa szansa na to że warunek zajdzie, jednak loop najczęściej wskoczy za wcześnie

 

w takim razie - jak w ten kod wplecić delta_time dla zwiększonej dokładności? (albo może jakoś inaczej to zrobić żeby muzyka loopowała się z jak najmniejszą dziurą)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

8 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
Ignatus    13

Pewnie chodzi o coś innego bo odpowiedź moja jest zbyt oczyswista ale:

 

 

GML
audio_play_sound(index, priority, loop);

 

Przecież ostatnia zmienna odpowiada za loop a Ty ustawiłeś tam na stałe 0

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Cruel_boy    0
Pewnie chodzi o coś innego bo odpowiedź moja jest zbyt oczyswista ale:

 

 

GML
audio_play_sound(index, priority, loop);

 

Przecież ostatnia zmienna odpowiada za loop a Ty ustawiłeś tam na stałe 0

 

ta zmienna odpowiada za loop od samego początku. gdybym ustawił na 1, muzyka zamiast całkowicie sie zatrzymywać, po prostu rozpoczęła by sie znowu od początku a nie od wyznaczonego przeze mnie loop pointa.

 

edit: wymarzoną funkcją byłoby coś w stylu:

 

GML
audio_sound_set_loop_point(index,looppoint)

 

i jej odpowiednik get. działałaby ze zmienną loops i byłoby cacy.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Ignatus    13

A w jakich okolicznościach to jest używane? Postać się zbliża do źródła muzyki czy coś w tym stylu?

 

Nie dałoby rady wstawić tą 1 przy loop i robić stop-start music?

 

Przykład z manuala

 

GML
if !global.SFX

{

audio_stop_sound(snd_Waterfall);

}

else

{

audio_play_sound_at(snd_Waterfall, x, y, 0, 100, 300, 1, true, 1);

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Cruel_boy    0
A w jakich okolicznościach to jest używane? Postać się zbliża do źródła muzyki czy coś w tym stylu?

 

Nie dałoby rady wstawić tą 1 przy loop i robić stop-start music?

 

Przykład z manuala

 

GML
if !global.SFX

{

audio_stop_sound(snd_Waterfall);

}

else

{

audio_play_sound_at(snd_Waterfall, x, y, 0, 100, 300, 1, true, 1);

}

 

hm, chyba sie nie rozumiemy. nie chodzi mi o zadna postac, rowniez nie chodzi mi o odtwarzanie dzwieku w jakiejs pozycji. muzyka jest w osobnym obiekcie kontrolerze, ktory po prostu ma wlaczyc muzyke przy starcie w roomie. po prostu background music. jedyne co chce osiągnąć to aby nie było żadnej luki w loopie lub żeby w ogóle loop zaszedł jeśli chce aby muzyka loopowała się NIE od początku, ale od danego momentu. kod w pierwszym poście działałby gdyby nie sprawdzał co klatke warunku if lecz co mikrosekunde.

 

edit: wczoraj zrobilem maly programik obrazujacy problem i rowniez solucja z ktorej nie jestem do konca zadowolny:

 

https://dl.dropboxusercontent.com/u/2648819...msoundissue.exe

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Danielus    0

Jako workaround możesz podzielić plik na 2. Najpierw odtwarzasz ten do którego już nie chcesz wracać i potem włączasz ten który już normalnie w całości się loopuje

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Cruel_boy    0
Jako workaround możesz podzielić plik na 2. Najpierw odtwarzasz ten do którego już nie chcesz wracać i potem włączasz ten który już normalnie w całości się loopuje

 

obecnie uzywam tej metody, jest ona nieco lepsza od przedstawionej wcześniej, jednak wymaga tych dwóch plików i dalej opiera się na sprawdzaniu czy powinno przejść do drugiego pliku co klatke a nie częściej, co skutkuje w słyszalnej przerwie między pierwszym a drugim plikiem. nie wspominając ze gra nie zawsze ma idealnie stałe fps

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
I am vader    25

Nie wskakuje w odpowiednim momencie bo czas stepu nie pokrywa sie z dokladna milisekunda w ktorej dany kawalek powinien sie zaczac badz skonczyc.

Najlepiej zebys wycial loopowane audio do bufera i zrobil audio_queue do ktorego dodajesz zawartosc tego bufera. Niestety nie ma funkcji, albo takowe gdzieś zgubiłem, które pozwoliłyby to zrobić wewnąrz GM'a, wiec jedynym wyjsciem jest trzymanie pliku dzwiekowego jako included file w formacie .wav. Jak bedzie mi sie chcialo dam w edicie lub nastepnej odpowiedzi kod, ale nie obiecuje bo juz mi sie nie chce :v

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
Cruel_boy    0
Nie wskakuje w odpowiednim momencie bo czas stepu nie pokrywa sie z dokladna milisekunda w ktorej dany kawalek powinien sie zaczac badz skonczyc.

Najlepiej zebys wycial loopowane audio do bufera i zrobil audio_queue do ktorego dodajesz zawartosc tego bufera. Niestety nie ma funkcji, albo takowe gdzieś zgubiłem, które pozwoliłyby to zrobić wewnąrz GM'a, wiec jedynym wyjsciem jest trzymanie pliku dzwiekowego jako included file w formacie .wav. Jak bedzie mi sie chcialo dam w edicie lub nastepnej odpowiedzi kod, ale nie obiecuje bo juz mi sie nie chce :v

 

nie mialem styczności z bufferami i po przeczytaniu w dokumentacji na czym polegają pewnie nadziałbym sobie dużo memory leaków albo innych kłopotów. patrząc na to wszystko denerwuje mnie ze nie ma na to jakiejs prostej funkcji...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×