Este post surge a raíz del anterior en el que explicaba como reproducir sonidos en .NET 2.0 (viene muy facilito), ya que un asiduo lector de este blog ha preguntado cómo se harí en versiones anteriores.

La respuesta a esta pregunta es: ¡usando la API de Windows!. Los que llevamos unos cuantos años programando con tecnologías Microsoft (los dinosaurios que usábamos ActiveX y estas cosas) estamos todos muy acostumbrados a usar la API de windows y no nos suena raro. En .NEt se sigue usando para algunas cosas, pero la verdad es que está todo tan mascado que pocas veces suele hacer falta.

En este caso la función clave de la API MessageBeep. Esta función permite reproducir sonidos predefinidos del sistema con sólo pasarle su código numérico. Por tanto lo único que necesitamos para replicar la funcionalidad de la clase que viene con .NET 2.0 es declarar esta función y conocer las constantes. así que una clase similar a la anterior sería la siguiente (código completo):

using System;
using System.Runtime.InteropServices;

public class SystemSound
{
    [DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
    private static extern bool MessageBeep(int type);

    public static void Play(SystemSounds sonido)
    {
        try
        {
          MessageBeep((int) sonido);
        }
        catch{}
    }
    
    public enum SystemSounds
    {
        Beep = 0,
        Question = 0x20,
        Exclamation = 0x30,
        Asterisk = 0x40,
    }
}

¡Listo!.

Ahora para reproducir el sonido que queramos sólo tenemos que escribir:

SystemSound.Play(SystemSounds.Asterisk);

Bastante fácil pero desde luego más complicado que en .NET 2.0.

En Coding4Fun de Microsoft he encontrado un artículo que habla de este tema pero en lugar de usar este método que he empleado yo lee del registro los sonidos asignados y los reproduce (son WAVs). Permite replicar la funcionalidad del panel de control, pero es bastante más complicado. Al que le interese puede leerlo desde aquí: Where Did That Sound Come From?.

Escrito por un humano, no por una IA