ich bastele gerade an der Musik für mein Adventure und wollte dabei verschiedene Versionen eines Musikstückes iMuse mäßig überblenden, wenn man die Räume wechselt oder auch mit einem anderen Charakter spricht. Für alle, die nicht wissen was ich meine: Dabei soll beim Crossfading quasi die Stelle, an der die Musik vor dem Wechseln des Raumes war, beibehalten werden.
Dazu haben alle Versionen exakt die gleiche Länge, damit ich mit GetMP3PosMillis() und SeekMP3PosMillis(...) jeweils die richtigen Stellen anspringen kann.
Allerdings ergibt sich dabei ein Problem, und zwar ist das Überwechseln zwischen den Variationen nicht ganz exakt. Manchmal startet die Version, in die übergegangen wird, ein bisschen zu früh, manchmal ein bisschen zu spät, und manchmal auch ziemlich genau.
Jetzt hab ich ein bisschen rumgesucht und tatsächlich wurde das Problem schon mal im offiziellen Forum von AGS diskutiert. CJ spricht da von größeren Abschnitten, in die ein Musikstück eingeteilt wird und dass man beim Anspringen einer bestimmten Stelle immer an den Anfang des Abschnitts springt.
Meine Theorie: Wenn man ungefähr die Größe dieser Abschnitte wüsste, könnte man AGS sagen, dass bei einem angeforderten Übergang solange gewartet wird, bis man sich genau am Anfang eines Abschnittes befindet und dann erst den Übergang startet.
Entweder ich spinn mir da was zurecht oder es könnte funktionieren.
Allerdings hab ich da ein paar technische Probleme, das hinzubekommen. Der Code, der einfache, unsaubere Übergänge produziert, sieht so aus:
Code: Alles auswählen
int a=GetMP3PosMillis();
if (GetCurrentMusic() == 1) PlayMusic(2);
else PlayMusic(1); // Wenn gerade Variante eins spielt, wird nach Variante 2 gewechselt, sonst umgekehrt.
SeekMP3PosMillis(a);