diff --git a/source/funkin/NoteSplash.hx b/source/funkin/NoteSplash.hx
index 64169c48b..3e4d3a3b5 100644
--- a/source/funkin/NoteSplash.hx
+++ b/source/funkin/NoteSplash.hx
@@ -22,6 +22,8 @@ class NoteSplash extends FlxSprite
 
 		setupNoteSplash(x, y, noteData);
 
+		antialiasing = true;
+
 		// alpha = 0.75;
 	}
 
diff --git a/source/funkin/VoicesGroup.hx b/source/funkin/VoicesGroup.hx
index bb9dd419f..ae34bb0c6 100644
--- a/source/funkin/VoicesGroup.hx
+++ b/source/funkin/VoicesGroup.hx
@@ -38,6 +38,31 @@ class VoicesGroup extends FlxTypedGroup<FlxSound>
 		}
 	}
 
+	/**
+	 * Finds the largest deviation from the desired time inside this VoicesGroup.
+	 * 
+	 * @param targetTime	The time to check against.
+	 * 						If none is provided, it checks the time of all members against the first member of this VoicesGroup.
+	 * @return The largest deviation from the target time found.
+	 */
+	public function checkSyncError(?targetTime:Float):Float
+	{
+		var error:Float = 0;
+
+		forEachAlive(function(snd)
+		{
+			if (targetTime == null)
+				targetTime = snd.time;
+			else
+			{
+				var diff:Float = snd.time - targetTime;
+				if (Math.abs(diff) > Math.abs(error))
+					error = diff;
+			}
+		});
+		return error;
+	}
+
 	// prob a better / cleaner way to do all these forEach stuff?
 	public function pause()
 	{
diff --git a/source/funkin/play/PlayState.hx b/source/funkin/play/PlayState.hx
index d06bcb716..fa7a482be 100644
--- a/source/funkin/play/PlayState.hx
+++ b/source/funkin/play/PlayState.hx
@@ -2511,8 +2511,9 @@ class PlayState extends MusicBeatState
 	override function stepHit()
 	{
 		super.stepHit();
+
 		if (Math.abs(FlxG.sound.music.time - (Conductor.songPosition - Conductor.offset)) > 20
-			|| (SONG.needsVoices && Math.abs(vocals.time - (Conductor.songPosition - Conductor.offset)) > 20))
+			|| Math.abs(vocals.checkSyncError(Conductor.songPosition - Conductor.offset)) > 20)
 		{
 			resyncVocals();
 		}