Externe Sounds laden

  • Win

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Ich habe gerade von Gamemaker auf Studio gewechselt und stelle mir nun die selbe Frage. In meinem Spiel gibt es bis zu 5000 Sound Dateien. Kann ich sie während des Spieles extern nach Bedarf laden? Wenn ja, wie? Der Befehl sound_add existiert ja nun nicht mehr.

    Bei den Sounddateien handelt es sich um gesprochenen Text. Das Spiel arbeitet viel mit Sprachdialogen von denen nicht alle von Begin an geladen werden sollten.
  • Ich schreib dir mal kurz ein Skript.
    Bin aber zu faul den zu testen, also kann sein, dass er nicht unbedingt funktioniert. Meld dich dann einfach nochmal

    audio_add(fname)

    GML-Quellcode

    1. ///audio_add(fname)
    2. if (!file_exists(argument0)){
    3. show_error("audio_add: File '"+argument0+"' doesn't exists!",false);
    4. return -1;
    5. }
    6. var buff = buffer_load(argument0);
    7. var format = buffer_peek(buff, 20,buffer_u16);
    8. if (format == 1)
    9. format = buffer_s16;
    10. else
    11. format = buffer_u8;
    12. var channels = buffer_peek(buff, 22,buffer_u16)-1;
    13. var sample_rate = buffer_peek(buff, 24,buffer_u32);
    14. var sample_length =(buffer_get_size(buff)-44-2);
    15. var snd_id = audio_create_buffer_sound(buff, format, sample_rate, 44, sample_length, channels);
    16. if (snd_id < 0)
    17. show_debug_message("Sound konnte nicht geladen werden! Error:"+string(snd_id));
    18. return snd_id;
    Alles anzeigen

    Ich hab grad auch nur halb Ahnung davon. Sample Rate und so hab ich schon vorgegeben. Ich weiß nicht ob die Werte so stimmen, aber es kann ja nochmal jemand anderes drüber gucken ^^.
    Soweit ich weiß untersützt das so *.wav

    Edit: So ich hoffe das geht jetzt...
    Edit2: Ich teste jetzt. Etwas falsch läuft es noch
    Edit3: Es geht endlich
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe

    Dieser Beitrag wurde bereits 13 mal editiert, zuletzt von Husi012 ()

  • Vielen Dank für die schnelle Antwort. Ich habe den Code gleich getestet. Nach Anfangsschwierigkeiten hat es tatsächlich funktioniert!
    Es kam zuvor zu folgenden Problemen:

    Zunächst sagte mir das Programm, dass nur buffer_s16 und buffer_u8 unterstützt wird. Danach meckerte das Programm, weil der Buffer zu früh gelöscht wurde.


    Cannot delete buffer, it's in use
    at gml_Script_load_sound (line 8) - buffer_delete(buff);



    Auf jeden Fall spielte der Sound ab, nachdem ich die Zeile buffer_delete() entfernt hatte. Da muss ich dann noch dran arbeiten, dass der Buffer zur richtigen Zeit wieder gelöscht wird. Das wichtigste ist aber: es funktioniert!

    Vielen Dank!
  • oh ja hab mich verschrieben. mach mal statt buffer_u16 buffer_s16. Ich bearbeite es gleich auch noch schnell in meinem beitrag.
    Ach stimmt vergess ich immer. buffer_delete sollte man da nicht verwenden. Der löscht sich soweit ich weiß nach dem abspielen selber
    Sry
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Dein Code ist ja mal richtig schlampig geschrieben. Nagut wer sich den Bytecaos anhören möchte von dem Header der kann es verwenden. Es wäre aber wirklich besser wenn man den Header auslesen würde und dann die Attribute entsprechend setzt.
    buffer_delete wird dann aufgerufen, wenn der Sound nicht mehr benötigt wird. Solange er benötigt wird, muss der Computer wissen was er abspielt.

    Abgesehen davon gibt es dafür jetzt die Audio Groups. Dort kann man die Sounds je nach Bedarf in selbst bestimmten Gruppen laden oder freigeben.

  • @Chris987
    Wie gesagt, ich hab vom Header keine Ahnung und hätte mir das ganze noch auf englisch anlesen müssen.
    Kann ich aber mal machen ^^
    War so klar, dass ich echt viel kacke geleistet habe und jemand was dazu sagen würde xD

    Edit: ich werde jetzt gleich den Code verbessern und alle sind glücklich :D

    Edit2: audio_add(fname)

    GML-Quellcode

    1. ///audio_add(fname)
    2. if (!file_exists(argument0)){
    3. show_error("audio_add: File '"+argument0+"' doesn't exists!",false);
    4. return -1;
    5. }
    6. var buff = buffer_load(argument0);
    7. var format = buffer_peek(buff, 20,buffer_u16);
    8. if (format == 1)
    9. format = buffer_s16;
    10. else
    11. format = buffer_u8;
    12. var channels = buffer_peek(buff, 22,buffer_u16)-1;
    13. var sample_rate = buffer_peek(buff, 24,buffer_u32);
    14. var sample_length =(buffer_get_size(buff)-44-2);
    15. var snd_id = audio_create_buffer_sound(buff, format, sample_rate, 44, sample_length, channels);
    16. if (snd_id < 0)
    17. show_debug_message("Sound konnte nicht geladen werden! Error:"+string(snd_id));
    18. return snd_id;
    Alles anzeigen


    Edit: So jetzt gehts :D
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe

    Dieser Beitrag wurde bereits 13 mal editiert, zuletzt von Husi012 ()

  • Benutzer online 1

    1 Besucher