Estoy escribiendo un programa de consola que usa DirectSound API para representar algunos datos de audio. Me encontré con un problema curioso al seguir el DirectSound Programming Guide (from Microsoft). De acuerdo con la documentation:¿Cómo proporcionar un HWND a DirectSound SetCooperativeLevel en un programa de consola?
Después de crear un objeto de dispositivo, debe establecer el nivel de cooperación para el dispositivo utilizando el método IDirectSound8::SetCooperativeLevel. A menos que haga esto, no se escucharán sonidos.
El problema es que estoy escribiendo un programa de consola, y SetCooperativeLevel
requiere un HWND como primer argumento. No tengo ningún HWND para tratar en el programa de la consola. Intenté proporcionar un puntero nulo pero falló con un código de error DSERR_INVALIDPARAM
.
¿Qué valor de HWND se debe proporcionar a IDirectSound8::SetCooperativeLevel
en un programa de consola? La parte de audio del programa se planea construir como una biblioteca compartida, por lo que tiene poco o ningún conocimiento del programa "exterior".
¡Gracias por cualquier consejo!
Nota: Sé que hay una solución algo mejor para simplemente renderizar audio, como usar SDL, OpenAL, SFML (basado en OpenAL), pero para mi proyecto actual se impone DirectSound.
Editar: He encontrado un message de un ingeniero de Microsoft que elimina las dudas sobre el uso de la ventana del escritorio o la ventana de la consola como un HWND para SetCooperativeLevel
al crear tampones GLOBAL_FOCUS.
Como usted ha dicho, el foco de entrada no debe interferir cuando la prestación de audio. Intenté inocentemente proporcionar el HWND devuelto por 'GetDesktopWindow()' a 'SetCooperativeLevel', y parece funcionar. Sin embargo, no sé si tiene inconvenientes en comparación con el uso de un identificador de ventana oculto ... – overcoder
Pasar un HWND que no controlas parece una muy mala idea. Es una de esas cosas que probablemente funcionará bien, hasta el día en que tu código termine siendo analizado a diario o "lo viejo y nuevo". – snemarch
@overcoder, estaría preocupado por lo que sucede si otro programa decide hacer lo mismo ... – bdonlan