Ich programmiere eine kleine Music Engine für mein Spiel in C # und XNA, und ein Aspekt davon ist die Möglichkeit, einen Abschnitt aus einem Song zu schleifen. Zum Beispiel hat mein Lied ein Intropart und wenn das Lied das Ende (oder einen anderen bestimmten Punkt) erreicht hat, springt es zurück, wo das Intropart gerade vorbei ist. (A - B - B - B ...)
Jetzt verwende ich IrrKlank, das perfekt und ohne Lücken funktioniert, aber ich habe ein Problem:
Der Punkt, an dem zurückgesprungen werden soll, ist etwas ungenau. Hier ist ein Beispielcode:
public bool Passed(float time)
{
if ( PlayPosition >= time )
return true;
return false;
}
//somewhere else
if( song.Passed( 10.0f ) )
song.JumpTo( 5.0f );
Das Problem ist nun, dass der Song die 10 Sekunden durchläuft, aber einige Millisekunden bis etwa 10.1f spielt und dann auf 5 Sekunden springt. Es ist nicht so dramatisch, aber sehr falsch für meine Bedürfnisse. Ich habe versucht, es so zu beheben:
public bool Passed( float time )
{
if( PlayPosition + 3 * dt >= time && PlayPosition <= time )
return true;
return false;
}
(dt ist die Deltazeit, die seit dem letzten Frame verstrichene Zeit)
Aber ich denke nicht, das ist eine gute Lösung dafür.
Ich hoffe, Sie können mein Problem (und mein Englisch, yay / o /) verstehen und mir helfen :)