Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Seccionar Con Directx

Iniciado por sebastianarroyo, 15 de Septiembre de 2005, 12:49:47 AM

« anterior - próximo »

sebastianarroyo

 Che , se me desvirtuo la pregunta !!!
No estoy preguntando si se puede utilizar los mp3.
Estoy preguntando si se puede escuchar un archivo mp3 o wav en otra placa que no sea la predeterminada.
Yo estoy haciendo una aplicacion en visual basic.
Nesecitaria algun ejemplo ne directx, DLL o algun OCX.-
Gracias !!

AK47

 Lo que tienes que hacer es enumerar los dispositivos presentes en el equipo sobre el que se ejecuta el programa y dejar al usuario que seleccione el que el desee. Mirate la funcion EnumerateDevices o algo asin ;)

Ray

 Recapitulación para iniciar DirectSound en cualquier placa, (en principio solo WAV):

1) Guardamos en una lista los dispositivos y los mostramos en un ListBox

2) Seleccionamos el dispositivo, o lo que es lo mismo... un indice.

3) Creamos DirectSound pasando el Guid del dispositivo que corresponde al indice

Suponiendo que selecciono el 2º dispositivo de la lista, el índice sería el 1 puesto que el primero es 0.

en C++ lo crearía así:


DirectSoundCreate( &Guid[1], &lpDirectSound, NULL);


en VB no tengo ni idea pero debe ser más o menos:


DirectSoundCreate DDEnum.GetGuid(1) , DirectSound, Nothing


si quiero iniciar el septimo dispositivo, le paso DDEnum.GetGuid(6)

sebastianarroyo

 te parece que te pase el codigo que tengo para reproducir y asi lo ves. ???


Ray

 Como quieras, aunque bastaría con ver solo la parte donde inicias DirectSound.

Si puedes ponlo aquí mismo, no creo que sea muy largo.

usa el botón CODE entre el comienzo y final del código para verlo mejor.

sebastianarroyo

 
Option Explicit

'//DirectShow Objects
   Private DSAudio  As IBasicAudio         'Basic Audio Objectt
   Private DSEvent As IMediaEvent        'MediaEvent Object
   Private DSControl As IMediaControl    'MediaControl Object
   Private DSPosition As IMediaPosition 'MediaPosition Object
 




Public Function TerminateEngine() As Boolean
On Error GoTo BailOut:

   If ObjPtr(DSControl) > 0 Then
       DSControl.Stop
   End If
               
   If ObjPtr(DSAudio) Then Set DSAudio = Nothing
   If ObjPtr(DSEvent) Then Set DSEvent = Nothing
   If ObjPtr(DSControl) Then Set DSControl = Nothing
   If ObjPtr(DSPosition) Then Set DSPosition = Nothing
               
   TerminateEngine = True
   Exit Function
BailOut:
   TerminateEngine = False
   Debug.Print "ERROR: modDirectShow.TerminateEngine()"
   Debug.Print "     ", Err.Number, Err.Description
End Function


Public Function LoadMP3(FileName As String) As Boolean
On Error GoTo BailOut:

   '//0. Solo Variables
   
   '//1. Destruye Casos Inexistentes
       If Not (TerminateEngine() = True) Then GoTo BailOut:
       
   '//2. Filtro grafico del archivo
       Set DSControl = New FilgraphManager
       Call DSControl.RenderFile(FileName)
   
   '//3. Sistema el objeto básico de audio
       Set DSAudio = DSControl
       DSAudio.Volume = 0
       DSAudio.Balance = 0
   
   '//4. Sistema el acontecimiento de medios de comunicación y objetos de posición
       Set DSEvent = DSControl
       Set DSPosition = DSControl
       If ObjPtr(DSPosition) Then DSPosition.Rate = 1#
       DSPosition.CurrentPosition = 0
       
   
   '//5. Fin

   LoadMP3 = True
   Exit Function
BailOut:
   LoadMP3 = False
   Debug.Print "ERROR: modDirectShow.LoadMP3()"
   Debug.Print "     ", Err.Number, Err.Description
End Function


Esto esta denro del modulo.
el el form tengo las llamadas y solamente esto en el load
[/CODE]
 ScrlBalance_Change
   ScrlSpeed_Change
   ScrlVolume_Change

[CODE]


Ray

 En que quedamos, ¿DirectSound o DirectShow?

No se si lo podrás hacer en VB porque creo que tiene limitaciones en DirectX, te digo como creo que es en C++, más no puedo ya decirte porque encima no controlo el VB ni el DirectShow.

La función CreateClassEnumerator que pertenece a dshow sirve para crear un enumerador para las diferentes categorías de dispositivos.

su uso:
Using the System Device Enumerator

[EX3]

 
Cita de: "Ray"En que quedamos, ¿DirectSound o DirectShow?
Ya lo comento al principio creo recordar:
Cita de: "sebastianarroyo"Nesecito reproducir archivos mp3 y wav con directx.
en estos momentos estoy utilizando directshow
Cita de: "Ray"No se si lo podrás hacer en VB porque creo que tiene limitaciones en DirectX, te digo como creo que es en C++, más no puedo ya decirte porque encima no controlo el VB ni el DirectShow.
Me temo que asi es. DirectShow esta muy limitado en VB (el unico componente de DirectX capado en VB), no se puede por ejemplo pasar un video a una textura de D3D o superficie de DD, cosa que me interesaba para mi proyecto <_<

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

sebastianarroyo

 ok, gracias por los comentarios.
Ahora mi pregunta es la siguiente, alguien de ustedes que maneje C ++, no me pueden hacer un reproductro para poder reproducir los mp3 y wav.

(ejemplo) Podria ser que la placa la pueda seleccionar desde un INI.
yo luego lo ejecutaria desde afuera.

Elreproductor.exe Misonido.mp3

Gracias !!!
Sebastian.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.