2011-08-17 27 views
5

Tengo un programa escrito en Delphi XE que reproduce un archivo WAV utilizando TMediaPlayer. El programa se ejecuta en la bandeja del sistema en una computadora con Windows 7. El programa espera a que un evento active la reproducción del archivo wav. Si estoy conectado en la computadora, el wav funciona bien. Pero si bloqueo el terminal de la computadora (o me conecto a través de Escritorio remoto), el archivo wav no se reproduce a través del altavoz de la computadora. Sé que el evento se está desencadenando porque todo el otro código en el controlador de eventos funciona bien; es solo que no puedes escuchar el archivo wav. He codificado el volumen al máximo nivel, así que sé que no es un problema de volumen. ¿Windows 7 tiene algo que impide que los sonidos lleguen a través del altavoz si nadie está actualmente conectado a la computadora? Si esa limitación existe, ¿hay alguna forma de evitarla?Sonido de salida a través del altavoz cuando no está conectado

+1

¿Tiene el mismo problema si solo usa la API de PlaySound Windows estándar? – Brad

+0

Sí, el mismo problema ocurre con PlaySound. También he intentado usar Speech API y tengo el mismo problema. Es como si la tarjeta de sonido no emitiera nada a menos que haya iniciado sesión directamente en la computadora. –

+0

Sé con certeza que un programa en ejecución puede reproducir sonido con la función PlaySound API incluso cuando la consola está bloqueada. No estoy familiarizado con Delphi, pero ¿está seguro de haber llamado directamente a la API de Win32? Si ayuda, cuando bloquea su computadora, lo que se muestra en la pantalla es en realidad una sesión diferente. Lo mismo con Remote Desktop ... es una sesión diferente. – Brad

Respuesta

3

Como sugiere Brad, use PlaySound() en lugar de TMediaPlayer. Funciona bien cuando la máquina está 'bloqueada'. Sin embargo, no estoy seguro si funciona sobre una conexión de escritorio remota.

Para confirmar esto, he creado una nueva aplicación, poner un TTimer en el formulario, establezca la propiedad Interval a 20000 y poner este código en el OnTimer evento:

procedure TForm13.Timer1Timer(Sender: TObject); 
begin 
    PlaySound('c:\windows\media\tada.wav', 0, SND_ASYNC or SND_FILENAME); 
end; 

Entonces me encontré con él, cerró la consola (con WindowsL), y esperó 20 segundos. El sonido se reprodujo con éxito.

+2

Al trabajar sobre una conexión de escritorio remota, debe configurar la conexión para reproducir el sonido localmente en lugar de hacerlo en la máquina remota. Lo sé porque tuve que recordarles a mis colegas que reubiquen su sonido cuando estaban trabajando desde casa ... –

+2

@Marjan, +1 en el comentario, y por no recurrir a cortadores de alambre. Estoy seguro de que fue tentador. –

+0

@Chris: :-) sí, fue ... –

Cuestiones relacionadas