elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  OpenAL no me abre el dispositivo elegido
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: OpenAL no me abre el dispositivo elegido  (Leído 846 veces)
Desiresportal

Desconectado Desconectado

Mensajes: 57


Ver Perfil
OpenAL no me abre el dispositivo elegido
« en: 8 Marzo 2019, 05:23 am »

Muy buenas a todos.

Estoy teniendo un problemilla tecnico con un programa (mas bien libreria) que estoy haciendo. Intento poder elegir los altavoces (o auriculares) por los que emito los sonidos.

OpenAL puede abrir el dispositivo de salida por defecto cuando se lo pido a él usando "alcGetString(NULL, ALC_DEFAULT_DEVICE_SPECIFIER)". Sin embargo, cuando obtengo el nombre del dispositivo con WinAPI y se lo paso a OpenAL para que abra ese, no lo hace.

¿Porque? No lo sé. Solo sé que el dispositivo por defecto OpenAL dice llamarlo como "Generic Hardware".

Os pongo un codigo de ejemplo para que veais el proceso que sigo y me digais como hacer que OpenAL me saque el sonido por el dispositivo de salida que elija yo.

Código:

#include <windows.h>
#include <AL/al.h>
#include <AL/alc.h>
#include <iostream>
using namespace std;

int main() {
int speakerID = 0;

WAVEOUTCAPSA outCaps;
waveOutGetDevCaps(speakerID, &outCaps, sizeof(WAVEOUTCAPSA));

ALCdevice speaker = alcOpenDevice(outCaps.szPname);

if (speaker == NULL) {
cout << "No se ha podido abrir el dispositivo de salida indicado." << endl;
}

return 0;
}


Sé que la funcion "waveOutGetDevCaps()" me devuelve un nombre supuestamente valido porque es el mismo que me da un programa de karaoke.

Ademas, ya tengo desarrollada la parte del uso del microfono y funciona correctamente usando el mismo procedimiento pero con sus respectivas funciones.

¿Que hago mal? ¿Tengo que incluir alguna DLL para que el programa funcione correctamente? (Por ahora solo uso "OpenAL.dll" y "wrap_oal.dll".) ¿Estar usando un ordenador portatil puede ser un problema? (Lo digo por el uso de altavoces u auriculares.)

Un saludo y gracias de antemano.


En línea

BloodSharp


Desconectado Desconectado

Mensajes: 630


Crianosfera 5 in comming!!!


Ver Perfil
Re: OpenAL no me abre el dispositivo elegido
« Respuesta #1 en: 8 Marzo 2019, 07:59 am »

Código
  1. int speakerID = 0;

¿Que hago mal? ¿Tengo que incluir alguna DLL para que el programa funcione correctamente?

Cita de: msdn
MMRESULT waveOutGetDevCaps(
   UINT_PTR      uDeviceID,
   LPWAVEOUTCAPS pwoc,
   UINT          cbwoc
);

uDeviceID
Identifier of the waveform-audio output device. It can be either a device identifier or a handle of an open waveform-audio output device.

Calculo que necesitás primero un Id o handler válido aunque según la documentación permita cero, te recomendaría mejor buscar un handler distinto de cero...


B#


En línea



Desiresportal

Desconectado Desconectado

Mensajes: 57


Ver Perfil
Re: OpenAL no me abre el dispositivo elegido
« Respuesta #2 en: 8 Marzo 2019, 17:32 pm »

¿Un handler valido? ¿Como obtengo eso?

¿Un poco de codigo de ayuda para entenderlo mejor?

En realidad uso el siguiente codigo para obtener la cantidad de dispositivos disponibles y uso un bucle por el cual obtengo los nombres de cada dispositivo.

Código:

int cantidad = waveOutGetNumDevices();
WAVEOUTCAPS tempOutCaps;
for (int a=0; a<cantidad; a++) {
waveOutGetDevCaps(a, &tempOutCaps, sizeof(WAVEOUTCAPS));
cout << "Nombre: " << tempOutCaps.szPname << endl;
}


Tambien puedo sacar las caracteristicas de cada dispositivo, pero me lo ahorro porque no me sirve de mucho para mis propositos.

(Todo el codigo que estoy poniendo es a modo de ejemplo y mantiene el orden de las operaciones realizadas. Mi codigo es mas extenso y por eso no me pongo a copiarlo a mano.)

Gracias.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines