seek bar para reproductor de audio

Iniciado por CH4ØZ, 30 Septiembre 2009, 00:47 AM

0 Miembros y 1 Visitante están viendo este tema.

CH4ØZ

hola les comento que estoy haciendo un reproductor de audio utilizando Windows Media Player (WMP) ya que me provee de visualizaciones y es mas facil de usar, pero los botones, comandos, etc. los diseño yo y al diseñar la seek bar con un slider no encontre la forma de conectarla al WMP :S
Mi idea era hacer una seek bar como la del reproductor, es decir si uno hace click en X lugar la cancion se adelante hasta el mismo y que avanze a medida q el tema se reproduce, gracias.
no me juzguen si no me conocen

seba123neo

Hola , tenes que enganchar la propiedad .Value del slider con la propiedad .Controls.currentPosition del windows media, aca te dejo un codigo asi nomas lo hice fijate si te sirve:

Código (vb) [Seleccionar]
Private Sub Slider1_Change()
    WindowsMediaPlayer1.Controls.currentPosition = Slider1.Value
End Sub

Private Sub Slider1_Scroll()
    Call Slider1_Change
End Sub

Private Sub WindowsMediaPlayer1_OpenStateChange(ByVal NewState As Long)
    Slider1.Min = 0
    Slider1.Max = WindowsMediaPlayer1.currentMedia.duration
End Sub


el slider cambia los valores segun la duraccion total del video y si moves el slider te mueve el video..

saludos.

La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

CH4ØZ

#2
primero q nada gracias por la respuesta porque me sirvio
pero no entiendo por que salta un error "Variable de tipo Object o la variale del bloque With no está establecida"

Código (vb) [Seleccionar]
Slider1.Max = WindowsMediaPlayer1.currentMedia.duration

el error aparece cuando yo cargo el archivo de musica.
podria ser que el error sea producido ya que este evento ocurre antes que el archivo este completamente cargado???

no me juzguen si no me conocen

seba123neo

pone el codigo que tenes para ver lo que estas haciendo...como lo cargas y demas..
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

CH4ØZ

#4
Código (vb) [Seleccionar]
Dim var As Integer
Dim vol As Integer

Private Sub Form_load()

Me.Caption = "Chaoz Player"
WMP.uiMode = "none"
MV.ForeColor = &HE0E0E0
MV.BackColor = &HE0E0E0
WMP.settings.volume = 100

End Sub

Private Sub Image1_Click()

If Image1.BorderStyle = 0 Then
Image1.BorderStyle = 1
End If

WMP.Controls.previous
WMP.Controls.play

Timer1.Enabled = True

End Sub

Private Sub Image10_Click()

If Image10.BorderStyle = 0 Then
Image10.BorderStyle = 1
End If

WMP.settings.volume = vol

Timer1.Enabled = True

End Sub

Private Sub Image11_Click()

If Image11.BorderStyle = 0 Then
Image11.BorderStyle = 1
End If

WMP.fullScreen = True

Timer1.Enabled = True

End Sub

Private Sub Image2_Click()

If Image2.BorderStyle = 0 Then
Image2.BorderStyle = 1
End If

WMP.Controls.play

Timer1.Enabled = True

End Sub

Private Sub Image3_Click()

If Image3.BorderStyle = 0 Then
Image3.BorderStyle = 1
End If

WMP.Controls.Next

Timer1.Enabled = True

End Sub

Private Sub Image4_Click()

If Image4.BorderStyle = 0 Then
Image4.BorderStyle = 1
End If

WMP.Controls.stop

Timer1.Enabled = True

End Sub

Private Sub Image5_Click()

If Image5.BorderStyle = 0 Then
Image5.BorderStyle = 1
End If

On Error Resume Next
CommonDialog1.Filter = "Todos los Archivos|*.mp3;*.mid;*.wav| Archivos MP3 (*.mp3)|*.mp3| Archivos MIDI (*.mid)|*.mid| Archivos de audio de Windows (*.wav)|*.wav"
CommonDialog1.ShowOpen

WMP.URL = CommonDialog1.FileName

WMP.Controls.stop

Label1.Caption = CommonDialog1.FileTitle

End Sub

Private Sub Image6_Click()

If Image6.BorderStyle = 0 Then
Image6.BorderStyle = 1
End If

WMP.Controls.pause

Timer1.Enabled = True

End Sub

Private Sub Image7_Click()

If Image7.BorderStyle = 0 Then
Image7.BorderStyle = 1
End If

Timer1.Enabled = True

End Sub

Private Sub Image7_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Image7.BorderStyle = 0 Then
Image7.BorderStyle = 1
End If

WMP.Controls.fastForward

End Sub

Private Sub Image7_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

WMP.Controls.play

End Sub

Private Sub Image8_Click()

If Image8.BorderStyle = 0 Then
Image8.BorderStyle = 1
End If

Timer1.Enabled = True

End Sub

Private Sub Image8_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)

If Image8.BorderStyle = 0 Then
Image8.BorderStyle = 1
End If

WMP.Controls.fastReverse

End Sub

Private Sub Image8_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

WMP.Controls.play

End Sub

Private Sub Image9_Click()

If Image9.BorderStyle = 0 Then
Image9.BorderStyle = 1
End If

vol = WMP.settings.volume
WMP.settings.volume = 0

Timer1.Enabled = True

End Sub

Private Sub MV_ValueChanged()

MV.Value = vol
WMP.settings.volume = MV.Value

End Sub

Private Sub Timer1_Timer()

If Image1.BorderStyle = 1 Then
Image1.BorderStyle = 0
End If

If Image2.BorderStyle = 1 Then
Image2.BorderStyle = 0
End If

If Image3.BorderStyle = 1 Then
Image3.BorderStyle = 0
End If

If Image4.BorderStyle = 1 Then
Image4.BorderStyle = 0
End If

If Image5.BorderStyle = 1 Then
Image5.BorderStyle = 0
End If

If Image6.BorderStyle = 1 Then
Image6.BorderStyle = 0
End If

If Image7.BorderStyle = 1 Then
Image7.BorderStyle = 0
End If

If Image8.BorderStyle = 1 Then
Image8.BorderStyle = 0
End If

If Image9.BorderStyle = 1 Then
Image9.BorderStyle = 0
End If

If Image10.BorderStyle = 1 Then
Image10.BorderStyle = 0
End If

If Image11.BorderStyle = 1 Then
Image11.BorderStyle = 0
End If

Timer1.Enabled = False


End Sub

Private Sub Timer2_Timer()

If Label1.Left = -4500 Then
Label1.Left = 3000
Else
   If Not Label1.Caption = "" Then
   Label1.Left = Label1.Left - 10
   End If
End If

If WMP.settings.volume = 0 Then
Image10.Visible = True
Image9.Visible = False
Else
Image10.Visible = False
Image9.Visible = True
End If

End Sub

Private Sub Slider_Change()

WMP.Controls.currentPosition = Slider.Value

End Sub

Private Sub Slider_Scroll()

Call Slider_Change

End Sub

Private Sub WMP_OpenStateChange(ByVal NewState As Long)

Slider.Min = 0

Slider.Max = WMP.currentMedia.duration

End Sub



WMP = WindowsMediaPlayer1
Slider= Slider1

y perdon si hay cosas que esten hechas de una forma por ahi ineficiente o desprolija pero fue la forma mediante la cual logre hacer lo que queria.

PD: se aceptan sujerencias para mejorar el codigo

PD2: lo que pense que podia causar el error (comentario anterior) no es xq cambie de lugar la sentencia, para que se iniciara mucho despues de cargado el archivo y sigue sucediendo lo mismo.
no me juzguen si no me conocen

seba123neo

el codigo se puede acortar muchismo usando matriz de controles de imagenes para los controles....pregunta ¿ a vos te anda reproducir un mp3 ? porque a mi no me anda y tira el error que comentas, pero si cargo un video o un .wav que no sea mp3 me anda bien, no puedo reproducir mp3 con el windows media dice que me falta un codec...

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

CH4ØZ

sisi, si yo a ese codigo le saco todo esto:
Código (vb) [Seleccionar]
Slider.Max = WMP.currentMedia.duration
me anda perfecto
pero no entendi eso de acortar el codigo usando matrizes de los controles
no me juzguen si no me conocen

BlackZeroX

Cita de: the_chaoz en 30 Septiembre 2009, 05:21 AM
sisi, si yo a ese codigo le saco todo esto:
Código (vb) [Seleccionar]
Slider.Max = WMP.currentMedia.duration
me anda perfecto
pero no entendi eso de acortar el codigo usando matrizes de los controles


las matrices de controles son controles con el mismo NOMBRe pero con un identificadar unico llamado index de tipo entero

un ejemplo es este

1.- Crea un control X (que no sea linea u otro no tienen dichas opciones)
2.- Copea ese control con el comando copiar y pegalo nuevamente, te aparece un mensaje que te dice si deseas crear una serie de controles tipo matriz responde que si
    Alternativa, un poco mas laboriosa: puede dibujar otro control, hubica en propiedades la propiedad index y ponle un Cero 0 y en el otro control ponle 1 y cambiale su nombre al del control con matriz Cero
3.- entra en el codigo fuente de uno de los dos controles, es decir dale doble click a uno de los dos para ir al proceso determinado, escribe lo siguiente:

Código (vb) [Seleccionar]


Select case index
case 0
  msgbox "Objecto con matriz Cero"
case 1
  inputbox "Holaaaaa matriz uno","Holaaaaa matriz uno","Holaaaaa matriz uno"
case 2
  debug.printf "Holaaaaa matriz dos"
etc
case else
  msgbox "Este mensaje JAmas deberia aparecer almenos que se modifique la cantidad de controles con matriz y este sea mayor a 3 objetos"
end select ' No recuerdo si si es end select con esto que me meti a C++ ya no recuerdo bien xP



los objetos con arreglo, matriz... que al dado caso tienen un mismo nombre pero diferente indexaciòn (index) comparten el mismo PROCESO y por obvias razones el mismo NOMBRE y deben ser del MISMO TIPO es decir matriz de textbox, command buton o inclusive clases (que al dado caso todo control seria una clase).

La particularidad de los procesos con matriz es que tienen una opcion o variante llamada index de tipo entero y los otro NO

Ejemplo:

Código (vb) [Seleccionar]


' proceso de un objeto SIN MATRIZ
private sub text1_click()
end sub
'proceso de un objeto Matrizado, TODOS los objetos con el mismo nombre usaran este proceso y cada objeto serà identificado por index
private sub text1_click(index as integer)
end sub



P.D.: No tenia nada que hacer asi que me parecio buena idea explicarte esto xP

Dulces Lunas!¡.
The Dark Shadow is my passion.

CH4ØZ

gracias x la respuesta voy a tratar de aplicarla a ese codigo
pregunta:
las matrices hacen que el programa use menos recursos, corra mas rapido o algo asi, o simplemente es para simplificar el codigo???
no me juzguen si no me conocen

BlackZeroX

#9
Cita de: the_chaoz en 30 Septiembre 2009, 05:44 AM
gracias x la respuesta voy a tratar de aplicarla a ese codigo
pregunta:
las matrices hacen que el programa use menos recursos, corra mas rapido o algo asi, o simplemente es para simplificar el codigo???

Solopor mencionarte algo que se me paso:

Las matrizes son contigus y los controles independientes No
Es decir contiguas en memoria una tras otra
El usar matrices Disminuye las lineas de programaciòn y algo que debe tener el programador en cuenta es que menor sea la cantidad de lineas mucho mejor
El usarmatrices disminuye el peso del programa final y por consiguiente usa menos memoria por si solo (Exepto cuando carga archivos externos a el ejecutable final como por ejemplo juegos como el Need for speed que carga los objetos como archivos de musica de archivos externos a el exe del juego)

En rendimiento si hay algo pero en tu programa esto la verdad no importa ya que tu programa es solo una manejador del windows media player el cual realisa todo el trabajo, en otros aspectos si mejora todo

P.D. usa MCISendString, MCIExecute  o MCICommand para reproducir multimedios

Ejemplo SUPER Basico:

Código (vb) [Seleccionar]

mcisendstring("play c:\musica.mp3",0,0,0)


Se puede usar un alias para manipular el multimedio pero es cosa que desees usar el mci en lugar del WMP

MciSendStringm MCIcommand y MCIExecute  son APIS de windows como Optativa mciGetErrorString

Dulces Lunas!¡.
The Dark Shadow is my passion.