Skocz do zawartości

Odtwarzanie muzyki z katalogu


Rekomendowane odpowiedzi

Hej

 

Chciabym odtwarzać dźwieki z katalogu "muza" dołączonego do gry ( będzie tam bardzo dużo dźwięków/głosów i nie mieszczą mi sie one jak pakuje je do gry w sound).

Ponizej przykładowy kod, który myślałem, że zadziała:

 

i=show_message_ext (" Graj ","kruk","muzyka2","muzyka3")

if i =1 {if file_exists(muza/kruk.wav) sound_play(muza/kruk.wav)}
if i=2 {if file_exists(muza/muzyka2.wav) sound_play(muza/muzyka2.wav)}
if i=3 {if file_exists(muza/muzyka3.wav) sound_play(muza/muzyka3.wav)}

show_message("koniec")
game_end()

 

macie jakieś pomysły ?

 

Odnośnik do komentarza
Udostępnij na innych stronach

21 minut temu, adam014 napisał:

sound_play działa tylko na referencje zasobu a nie na plik :) Więc albo dodasz sobie pliki przez sound_add i potem je odtworzysz albo zrobisz odtwarzanie z dysku jakąś dllką :) 

 

 

i=show_message_ext (" Graj ","kruk","muzyka2","muzyka3")

if i =1 {m=sound_add(muzyka/kruk.wav,0,0) sound_play(m)}

 

unknown variable !

 

nie wiem jak to rozgryźć :(

-------------------------------

 

 

Masz dostęp do jakichś extensions odtwarzaczy plików muzycznych ?

ale na gm.8 :D 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Godzinę temu, adam014 napisał:

Ja używałem Castera od TeeGee. http://moacube.com/resources/caster-multi-platform-ogg-extension-for-gamemaker/

Jak ładujesz pliki z folderu z grą to używaj working_directory :)

 

if i =1 {m=sound_add(working_directory+"\kruk.wav",0,0) sound_play(m)}

 działa ! :)

--------

sprawdze jeszcze później tego castera

Odnośnik do komentarza
Udostępnij na innych stronach

Nie wiem jaka jest idea ładowania plików, ale ja bym je dodał przed załadowaniem gry w pierwszym roomie i potem się odwoływał do jakiejś zmiennej globalnej, bo w takim ifie to będzie za każdym razem wczytywany pliczek. Jak chcesz w locie to lepiej dllką, GM ładuje cały plik do pamięci i będziesz miał freeza zanim wczyta, a tak odtwarzanie będzie asynchroniczne ;) 

Odnośnik do komentarza
Udostępnij na innych stronach

10 minut temu, adam014 napisał:

Nie wiem jaka jest idea ładowania plików, ale ja bym je dodał przed załadowaniem gry w pierwszym roomie i potem się odwoływał do jakiejś zmiennej globalnej, bo w takim ifie to będzie za każdym razem wczytywany pliczek. Jak chcesz w locie to lepiej dllką, GM ładuje cały plik do pamięci i będziesz miał freeza zanim wczyta, a tak odtwarzanie będzie asynchroniczne ;) 

Stworzyłem małego rpg-a ,ala Gothic :P są w nim postacie , mają sporo do powiedzenia więc  będą przemawiać XD,

dlatego potrzeba ładowania plików. Pozostanie chyba if ze względu na ilość plików , a będą to w miare krótkie zdania :) 

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Nie piszesz nic o usuwaniu po pobraniu dźwięków, więc zakładam, że tego nie robisz, więc załadowanie wszystkich plików w projekcie gry na start dałoby ten sam efekt. Co więcej, tak mi coś wygląda, że w ten sposób który tutaj pokazałeś, niektóre dźwięki załadujesz ponownie pod nowym ID i będą zamulać niepotrzebnie RAM :) pamiętaj o zwalnianiu zasobów.

Odnośnik do komentarza
Udostępnij na innych stronach

5 godzin temu, gnysek napisał:

Nie piszesz nic o usuwaniu po pobraniu dźwięków, więc zakładam, że tego nie robisz, więc załadowanie wszystkich plików w projekcie gry na start dałoby ten sam efekt. Co więcej, tak mi coś wygląda, że w ten sposób który tutaj pokazałeś, niektóre dźwięki załadujesz ponownie pod nowym ID i będą zamulać niepotrzebnie RAM :) pamiętaj o zwalnianiu zasobów.

jak to zwalniać ?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...
Dnia 15.03.2021 o 16:49, gnysek napisał:

sound_delete po odtworzeniu :)

 

Pojawił sie pewien problem z sound_delete ,poniewaz nie odtwarza niektórych dżwieków.

przykladowy kod:

 

wiadomosc=choose(0,1,2,3,4,5,6,7,8,9)
if wiadomosc=0 { m=sound_add(working_directory+"\gra\1.wav",0,0) sound_play(m) show_message("1")
sound_stop(m) sound_delete(m)}
if wiadomosc=1 { m=sound_add(working_directory+"\gra\2.wav",0,0) sound_play(m)show_message("2")
sound_stop(m) sound_delete(m)}

itd..

 

czasem nie odtwarza w ogóle dzwięku 7 i 5, w podobnych kodach tez niektóre dzwieki nie są odtwarzane

a niektóre dłuższe pod koniec odtwarzania lekko sie przytną..

 

Gdy sound_delete zamieniłem na sound_discard problem jakby wstępnie zniknął

z czego bierze się ten błąd ?

 

czy sound_delete() potrzebuje jakiegos czasu by opróżnić pamięć?

 

Odnośnik do komentarza
Udostępnij na innych stronach

24 minuty temu, gnysek napisał:

A co ma kasowanie do odtwarzania? Jak się nie odtwarzają, to może nie są prawdziwymi wav.

Właśnie w tym problem, ze dzwięki to prawdziwe wavy.

Odkąd zacząłem stosować odtwarzanie dzwięków z zastosowaniem sound_add(),które po odtworzeniu są gumowane sound_delete()

niektóre nie grają.. i to jest jakby losowo, gdy podopisuje coś w kodzie... 

Zastanawiałem się, czy komputer nie potrzebuje więcej czasu na wyczyszczenie dzwieku z ramu jakąs komendą typu (nic nie rób przez jeden takt)

ewentualnie czy moja karta muzyczna nie wyrabia..

  

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Jest jakaś taka funkcja sound_is_playing albo podobna i sprawdź z jej pomocą czy się załączył.

Popatrz też na audio_create_stream to chyba obecnie lepsza funkcja. Jak siądę do PC spróbuję popatrzeć na problem, z telefonu ciężko.

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ę
  • Ostatnio przeglądający   0 użytkowników

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