Issue #19987: Re-write test_alias_fallback in test_winsound to have two
acceptable outcomes: success or RuntimeError.  Without being able to
actually hear whether a sound was played, either one could be right, but
any other error would be a failure.
diff --git a/Lib/test/test_winsound.py b/Lib/test/test_winsound.py
index 6d8649a..4208fe7 100644
--- a/Lib/test/test_winsound.py
+++ b/Lib/test/test_winsound.py
@@ -159,14 +159,15 @@
             )
 
     def test_alias_fallback(self):
-        if _have_soundcard():
+        # In the absense of the ability to tell if a sound was actually
+        # played, this test has two acceptable outcomes: success (no error,
+        # sound was theoretically played; although as issue #19987 shows
+        # a box without a soundcard can "succeed") or RuntimeError.  Any
+        # other error is a failure.
+        try:
             winsound.PlaySound('!"$%&/(#+*', winsound.SND_ALIAS)
-        else:
-            self.assertRaises(
-                RuntimeError,
-                winsound.PlaySound,
-                '!"$%&/(#+*', winsound.SND_ALIAS
-            )
+        except RuntimeError:
+            pass
 
     def test_alias_nofallback(self):
         if _have_soundcard():
diff --git a/Misc/NEWS b/Misc/NEWS
index 44ec6f1..5a921c9 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -101,7 +101,7 @@
 
 - Issue #19928: Implemented a test for repr() of cell objects.
 
-- Issue #19595: Re-enabled a long-disabled test in test_winsound.
+- Issue #19595, #19987: Re-enabled a long-disabled test in test_winsound.
 
 - Issue #19588: Fixed tests in test_random that were silently skipped most
   of the time.  Patch by Julian Gindi.