Detalles útiles de PyQt6: controlar tecla mantenida con isAutoRepeat, reproducir audio con QMediaPlayer y QSoundEffect, y por qué el código cambia entre versiones de PyQt.
Por qué el _path_ absoluto: PyQt necesita la ruta completa para reproducir el sonido. Se construye dinámicamente con os.path.abspath, de modo que funcione en cualquier computador sin escribir la ruta a mano.
El formato MP3 usa compresión con pérdida y puede mostrar en consola el warning Could not update timestamps for skipped samples. Para este curso, puedes ignorarlo. En Windows, además, evita rutas muy profundas: un path absoluto de más de 260 caracteres puede fallar por una limitación del sistema operativo.
A diferencia de QMediaPlayer, QSoundEffect no requiere un QAudioOutput, y permite consultar isPlaying() para evitar reiniciar un sonido que ya está sonando.
Regla simple para elegir: usa QMediaPlayer para .mp3 (música más larga) y QSoundEffect para .wav (efectos cortos). QSoundEffect es más liviano de configurar.
Esto ocurre porque, de una versión a otra, los creadores de una librería pueden alterar sus clases y métodos. Es aplicable a cualquier librería y cualquier lenguaje: si cambias de versión en el futuro, revisa con cuidado que los códigos sigan funcionando.
Cambiar la versión de una librería no es gratis: las APIs evolucionan. Antes de migrar (por ejemplo de PyQt5 a PyQt6), revisa qué clases y métodos cambiaron y prueba que todo siga funcionando.