Eingeladene Sounddaten im Dialog nacheinander abspielen

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

  • Eingeladene Sounddaten im Dialog nacheinander abspielen

    Ich habe folgendes Problem:
    Für ein Adventuregame benötige ich mehrere Dialoge. Da die meisten Sprachsätze nur einmal verwendet werden, und es sich um etwa 5000 solcher Sprachdateien handelt, lasse ich die benötigte Sounddatei im Spiel dynamisch einladen. Dabei enthält jede Sprachdatei den Text, den eine Person während eines Dialoges spricht, solange, bis der andere Gesprächspartner an der Reihe ist. Jedesmal, wenn der Gesprächspartner wechselt, wird also eine neue Datei eingeladen.
    Während eine Spachdatei abgespielt wird, bewegen die Charaktere ihre Münder. Ist der nächste Charakter mit Sprechen an der Reihe, bleibt der eine still, und der andere bewegt den Mund.
    Damit das Programm weiß, wann die Mundbewegungen stoppen sollen, muss es wissen, wann die Sounddatei fertig ist. 'Und genau hier liegt nun mein Problem.
    Verwende ich im Programm integrierte Sounds, so kann man bequem über audio_sound_is_playing(snd_id) erfragen, ob der Sound noch spielt.
    Ich lade die Sounds über einen Buffer ins Programm. In etwa so:

    Quellcode

    1. globalvar global.buffer_for_sound_file = buffer_load(filename);
    2. snd_id = audio_create_buffer_sound(global.buffer_for_sound_file, buffer_s16, 44100, 0, buffer_get_size(global.buffer_for_sound_files), audio_mono);


    Das funktioniert wie gewünscht. Über snd_id kann ich danach den Sound abspielen.

    Quellcode

    1. audio_sound_play(snd_id);


    Was aber nicht funktioniert, ist die Abfrage, ob der Sound noch immer spielt.

    Bei audio_sound_is_playing(snd_id) bekomme ich immer eine negative Rückmeldung.

    Kann mir jemand hier weiterhelfen? Gibt es vielleicht auch andere Möglichkeiten, um zu erfahren, wann die Sounddatei beendet ist, um mit der nächsten zu beginnen, bzw. den Charakter bildlich verstummen zu lassen?
  • Ich bin mir nicht genau sicher, aber hole dir mal die ID beim abspeichern:

    GML-Quellcode

    1. play_id = audio_sound_play(snd_id);


    Lädst du eigentlich jedes mal den Buffer neu rein? Das macht den Ram-Speicher ordentlich voll.

    Sonst ist das mit der einen Zeile, um den Sound zu laden nicht so gut. Benutze am besten das komplette Skript, welches ich dir in einem anderem Thema gegeben habe. (Hab grad nur Link von meiner Seite mit dem Skript).
    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
  • Hallo Husi012,

    vielen Dank nochmal für deinen Programmcode zum Einladen der Sounds. :) Es scheint dort leider ein Problem zu geben. Mit der angegebenen Länge funktioniert es nicht. Es wird zwar eine Datei geladen aber nicht abgespielt. Das muss an der angegebenen Länge liegen. verändere ich diese auf z.B. 10000, dann wird ein Teil des Sounds abgespielt.

    Quellcode

    1. var buff = buffer_load(argument0);
    2. buffer_seek(buff, buffer_seek_start, 12+10);
    3. var format = buffer_peek(buff, 20,buffer_u16);
    4. if (format == 1)
    5. format = buffer_s16;
    6. else
    7. format = buffer_u8;
    8. var channels = buffer_read(buff, buffer_u16)-1;
    9. var sample_rate = buffer_read(buff, buffer_u32);
    10. var sample_length = (buffer_get_size(buff)-44)/buffer_peek(buff, 4, buffer_u32);
    11. var snd_id = audio_create_buffer_sound(buff, format, sample_rate, 44, sample_length, channels);
    12. return snd_id;
    Alles anzeigen


    Weißt du, was dort falsch ist? ich muss gestehen, dass ich den Programmcode nicht 100% nachvollziehen kann und ihn daher praktisch 1zu1 übernommen habe.
  • Hmm..
    Ich schau dann nochmal über den Code.
    Hättest ja nur was sagen müssen ^^
    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
  • Sorry, ich habe den ganzen Programmcode erst jetzt ausprobiert. Habe ihn als .txt zwar sofort kopiert und abgespeichert aber leider noch nicht eingebunden. :/
    Ich möchte immer gerne Programmcode genau nachvollziehen können, ehe ich ihn verwende. Und das kann ich momentan bei deinem nicht, was mich furchtbar über mich selber ärgert.

    Danke für deine Unterstützung :thumbup:

    Die Abfrage mit audio_sound_is_palying funktioniert nun aber, nachdem ich als sound_id audio_paly_sound(snd_id) genommen habe. :thumbsup: