diff --git a/aegisub/src/audio_display.cpp b/aegisub/src/audio_display.cpp
index 1516114678a0ae66d8fcfc3091bbff1b5f31bcdd..39f27a818d178670c8a56409879d41fc04373f9f 100644
--- a/aegisub/src/audio_display.cpp
+++ b/aegisub/src/audio_display.cpp
@@ -1010,11 +1010,23 @@ void AudioDisplay::OnMouseEvent(wxMouseEvent& event)
 	if (event.IsButton())
 		SetFocus();
 
+	const int mouse_x = event.GetPosition().x;
+
+	// Scroll the display after a mouse-up near one of the edges
+	if ((event.LeftUp() || event.RightUp()) && OPT_GET("Audio/Auto/Scroll")->GetBool())
+	{
+		const int width = GetClientSize().GetWidth();
+		if (mouse_x < width / 20) {
+			ScrollBy(-width / 3);
+		}
+		else if (width - mouse_x < width / 20) {
+			ScrollBy(width / 3);
+		}
+	}
+
 	if (ForwardMouseEvent(event))
 		return;
 
-	const int mouse_x = event.GetPosition().x;
-
 	if (event.MiddleIsDown())
 	{
 		context->videoController->JumpToTime(TimeFromRelativeX(mouse_x), agi::vfr::EXACT);