2010-10-21 14 views
12

Básicamente, lo que necesito es una forma de acceder a la salida de audio actual y verificar el nivel de sonido, es decir, necesito poder verificar si hay algo reproduciéndose en el dispositivo de audio o no.¿Cómo obtener programáticamente el nivel de audio actual?

No es necesario que compruebe la configuración de volumen, sino el nivel de sonido de la transmisión de audio real.

Lo siento, me estaba preguntando acerca de cómo hacerlo en Windows, en Visual Studio 2008.

@mikerobi: Eso forma parte de mi razonamiento - si se está mostrando en el medidor de volumen del sistema, debe haber ser una llamada al sistema que puede recuperarlo

+0

No entiendo las respuestas negativas, seguramente hay una manera de ver qué audio se está reproduciendo. No sé si será fácil extraer información útil de esa transmisión, pero estos comentarios no apuntan al cartel en la dirección correcta. –

+0

+1, ahora que se menciona la plataforma. A partir de Windows Vista/7, tenemos las [API de Core Audio] (http://msdn.microsoft.com/en-us/library/dd370784%28VS.85%29.aspx), pero ciertamente nunca los usé. Intentemos etiquetar este 'windows-api' y ver a quién dibujamos.:) –

+0

Quizás puedas encontrar algo aquí http://www.dreamincode.net/forums/topic/45693-controlling-sound-volume-in-c%23/#/ – BrunoLM

Respuesta

2

Esta es una buena pregunta. La respuesta, para las aplicaciones de Windows de 32 bits, es enganchar en winmm.dll y otras DLL de control de audio de bajo nivel. En C# Me gustaría crear una clase contenedora que contiene extern prototipos método:

public class MyAudioWrapper 
{ 
    [DllImport("winmm.dll", EntryPoint = "waveOutGetVolume")] 
    public extern void GetWaveVolume(IntPtr devicehandle, out int Volume); 

    ... 
} 

Tenga una mirada en this link para obtener una lista de los métodos de audio de Windows; puede usar el mezclador, o simplemente el controlador de salida de ondas, para configurar el volumen. Lo que quiere usar dictará qué bibliotecas importar. Tendrá que buscar la mejor manera de definir el prototipo y cómo manejar el dispositivo de audio/mezclador.

+1

La mejor respuesta para Vista y más allá es abrir una secuencia de audio en modo loopbacked y capturar desde allí. –

2

Aquí hay un enlace útil para invokations API de Windows, y aquí es exactamente lo que busca:

http://www.pinvoke.net/default.aspx/winmm.waveOutGetVolume


Desde el requisito cambiado y que no necesitan el nivel de audio Sugiero lo siguiente puede ayudar:

Creo que necesita leer lo que se reproduce en la secuencia de salida y mediante el análisis de los datos en algunos algoritmos, es posible que pueda decidir si algo se está reproduciendo o no. Para ello se necesita la API MMDevice

http://msdn.microsoft.com/en-us/library/dd316556(v=VS.85).aspx

Yo no quiero que discorage pero créanme que esto no va a ser fácil de lograr si usted no está familiarizado con el código no administrado.

  • Tienes que completar muchas estructuras en cada invocación.
  • Debe realizar invociones en un orden específico.
  • Alineación de referencias a estructuras.

E incluso si lo logra, no puede anticipar el comportamiento de los resultados del dispositivo. Buena suerte.

Cuestiones relacionadas