Skocz do zawartości

Dźwięk po dźwięku


Cannon Fodder
 Udostępnij

Przejdź do rozwiązania Rozwiązane przez art22pl,

Rekomendowane odpowiedzi

Zależnie od sytuacji, rozwiązań jest kilka. Ja np. do odtwarzania muzyki w tle wykorzystywałem kolejki. 

 

// ------------ CREATE ------------ //
sounds = ds_queue_create(); //Stwórz kolejke z utworami
mediaplayer = noone; //Stwórz odtwarzacz tej kolejki

ds_queue_enqueue(sounds, Sound1, Sound2); //Przypisz dźwięki do kolejki



// ------------ STEP ------------ //

//jeśli mediaplayer nie odtwarza muzyki oraz kolejka posiada elementów więcej niż zero
if(!audio_is_playing(mediaplayer) and ds_queue_size(sounds)>0)
{
	//przypisz mediaplayer dźwięk i jednocześnie usuń go z kolejki
	mediaplayer = ds_queue_dequeue(sounds);
	
	//odtwórz przypisany dźwięk
	audio_play_sound(mediaplayer, true, false);
}


// (Opcjonalnie) 
// jeśli kolejka odegra wszystkie przypisane dźwięki, przypisz jej nowe
if(ds_queue_size(sounds) == 0)
{
	ds_queue_enqueue(sounds, Sound3, Sound4); //Przypisz dźwięki do kolejki	
}



// ------------ DESTROY ------------ //

//Zwolnij pamięć gdy obiekt zostanie zniszczony
ds_queue_destroy(sounds);

 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Rozwiązanie

Jeśli chodzi o 8.1 to kodem :

 

dla create

sound_start = 0

 

dla wydarzenia z odtworzeniem 1 dźwięku np. kolizja

sound_play(nazwa_odtwarzanego)
sound_start = 1

 

dla np. step

if sound_start = 1 and sound_isplaying(nazwa_odtwarzanego) = false 
{
sound_play(nazwa_kolejnego)
sound_start=0
}
Odnośnik do komentarza
Udostępnij na innych stronach

OK, stworzyłem coś takiego, ale nie działa to tak do końca jakbym chciał bo dźwięk drugi jest odtwarzany po pierwszym ze słyszalnym opóźnieniem

 Ktoś wie jak to poprawić?

CREATE

sound_start = 0
start = 0
x=1

STEP

if( keyboard_check_pressed( vk_space )) {sound_play(sound0) sound_start = 1}
if sound_start = 1 and sound_isplaying(sound0) = 1 x=2
if x=2 and !sound_isplaying(sound0) {sound_play(sound1) x=0}

 

sound1.gmk

Odnośnik do komentarza
Udostępnij na innych stronach

Kod na pierwszy rzut oka wygląda dobrze. Dwie sprawy: 

1) Prawdopodobnie twój pierwszy dźwięk po prostu ma cisze na końcu i pomimo, że nic nie słychać to on wciąż jest odtwarzany - dlatego słyszysz to opóźnienie. Albo w drugą stronę, twój drugi dźwięk ma cisze na samym początku. Możesz swój plik dźwiękowy wrzucić w darmowy program Audacity i zobaczyć długość utworu i jaka jest jego "budowa".
image.png.8bc7004502556bd3c2700b2c45285c6f.png

 


2) Z tego co pamiętam game maker nie potrafi odtwarzać dwóch dźwięków mp3 na raz. Jedynie w formacie ogg i wav jest taka możliwość. Aczkolwiek to nie powinno być problemem akurat w tej konkretnej sytuacji, napisałem to tak żebyś wiedział na przyszłość. 

Ps: 
=  przypisuje wartość do zmiennej
==  porównuje wartości (stosowane w if'ach)
Wiem, że tak czy siak będzie działać ale fajnie wyuczyć się dobrego nawyku :P

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy
17 godzin temu, SimianVirus7 napisał:

Jedynie w formacie ogg i wav jest taka możliwość

Mówimy  8.1, on chyba .ogg nie potrafi odtworzyć i tutaj może być faktycznie problem. Obawiam się, że poza .wav przerwa będzie słyszalna. Plus jest taki, że .wav w zipie zajmuje niewiele więcej niż .mp3, minus taki, że jednak wciąż więcej i do pełnych piosenek się zupełnie nie nadaje.

Odnośnik do komentarza
Udostępnij na innych stronach

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

Jedynie 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ę poniżej.

Zaloguj się
 Udostępnij

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...