Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales
Autor
|
Tema: seek bar para reproductor de audio (Leído 2,576 veces)
|
CH4ØZ
Desconectado
Mensajes: 105
|
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.
|
|
|
|
|
En línea
|
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: 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.
|
|
|
|
|
En línea
|
Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo. Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
|
|
|
CH4ØZ
Desconectado
Mensajes: 105
|
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" 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???
|
|
|
|
« Última modificación: 30 Septiembre 2009, 01:44 por the_chaoz »
|
En línea
|
no me juzguen si no me conocen
|
|
|
|
seba123neo
|
pone el codigo que tenes para ver lo que estas haciendo...como lo cargas y demas..
|
|
|
|
|
En línea
|
Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo. Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
|
|
|
CH4ØZ
Desconectado
Mensajes: 105
|
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.
|
|
|
|
« Última modificación: 30 Septiembre 2009, 02:43 por the_chaoz »
|
En línea
|
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.
|
|
|
|
|
En línea
|
Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo. Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
|
|
|
CH4ØZ
Desconectado
Mensajes: 105
|
sisi, si yo a ese codigo le saco todo esto: Slider.Max = WMP.currentMedia.duration me anda perfecto pero no entendi eso de acortar el codigo usando matrizes de los controles
|
|
|
|
|
En línea
|
no me juzguen si no me conocen
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.832
I'Love...!¡.
|
sisi, si yo a ese codigo le saco todo esto: 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: 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: ' 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!¡.
|
|
|
|
|
En línea
|
|
|
|
CH4ØZ
Desconectado
Mensajes: 105
|
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???
|
|
|
|
|
En línea
|
no me juzguen si no me conocen
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.832
I'Love...!¡.
|
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: 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!¡.
|
|
|
|
« Última modificación: 30 Septiembre 2009, 06:18 por BlackZeroX »
|
En línea
|
|
|
|
CH4ØZ
Desconectado
Mensajes: 105
|
oks perdon por tantas preguntas y la ignorancia pero en el codigo: mcisendstring("play *.*",0,0,0)que serian los 3 ceros del final?
|
|
|
|
|
En línea
|
no me juzguen si no me conocen
|
|
|
BlackZeroX (Astaroth)
Wiki
Desconectado
Mensajes: 2.832
I'Love...!¡.
|
si no me equivoco: 1.- Devuelve Datos segun el comando 2.- Longitud Maximo de los Datos que se semiten en el 1ro 3.- es un Callback a un proceso si el string lo amerita Te voy a poner un ejemplo de mcisenstrin completoo para ver si lo entiendes mejor: Crea un nuevo proyecto y solo has esto solo nesesitas un formulario y un timer con nombre timer1 cambia la ruta del archivo multimedio Option Explicit Private Declare Function mciGetErrorString Lib "winmm.dll" Alias "mciGetErrorStringA" _ (ByVal dwError As Long, ByVal lpstrBuffer As String, ByVal uLength As Long) As Long Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _ (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long Private Error As Long Private Reproduccion As String Private archivo As String Private TipoArchivo As String Private alias As String Private Sub Form_Load() Timer1.Interval = 100 Timer1.Enabled = True archivo = "E:\Mi música\Slayer\slayer - reign in blood - jesus saves(2).mp3" ' puede ser una imagen, video o musica (video y musica nesesitan los codecs instalados) alias = "music" TipoArchivo = "mpegvideo" ' Esto no importa tanto sea cual sea el tipo lo reproducira xP Error = mciSendString("open " & Chr(34) & archivo & Chr(34) & " type " & TipoArchivo & " alias " & alias & " ", 0, 0, 0) Debug.Print ChecarError Error = mciSendString("play " & alias, 0, 0, 0) ' si es video o imagen puedes espesificar el HDC donde se reproducira icho elemento de lo contrio sera en una ventanilla emergente nueva Debug.Print ChecarError End Sub Public Function ChecarError() As String ChecarError = Space$(255) mciGetErrorString Error, ChecarError, Len(ChecarError) End Function Private Sub Form_Unload(Cancel As Integer) ' All cierra Todo lo que este abierto por mci 'Error = mciSendString("close All", 0, 0, 0) Error = mciSendString("close " & alias, 0, 0, 0) Debug.Print ChecarError End Sub Private Sub Timer1_Timer() Dim Data As String * 128 Error = mciSendString("status " & alias & " mode", Data, 128, 0) Debug.Print ChecarError Reproduccion = Left(Data, 7) If Reproduccion = "playing" Then Caption = "Reproduciendo" Else Caption = "Detenido" End If End Sub P.D.: Si gustas te paso una Dll (InfraMedia.dll Ir al Post) que hace esto y mucho mas!¡, tecnicamente esta dll es la que use para Mi Reproductor de musica, solo que la dll es un compilado externo y en el reproductor esta source code mas no como dll. Dulces Lunas!¡.
|
|
|
|
« Última modificación: 30 Septiembre 2009, 07:35 por BlackZeroX »
|
En línea
|
|
|
|
CH4ØZ
Desconectado
Mensajes: 105
|
oks, gracias igual todavía no pude entender xq no me anda el slider :S me salta error en la misma linea Private Sub WMP_OpenStateChange(ByVal NewState As Long) Slider.Min = 0 Slider.Max = WMP.currentMedia.duration 'linea que tira error :S
End Sub
|
|
|
|
|
En línea
|
no me juzguen si no me conocen
|
|
|
|
seba123neo
|
the_chaoz , te hcie una pregunta anteriormente, proba cargar algo qeu no sea mp3 a ver si anda...porque con algo que no es mp3 a mi ese codigo no me tira error.
|
|
|
|
|
En línea
|
Mucha gente, especialmente la ignorante desea castigarte por decir la verdad, por ser correcto, por ser tú. Nunca te disculpes por ser correcto, o por estar años delante de tu tiempo. Si estas en lo cierto, y lo sabes, que hable tu razón. Incluso si eres una minoria de uno solo, la verdad sigue siendo la verdad. M. Gandhi
|
|
|
CH4ØZ
Desconectado
Mensajes: 105
|
a mi cargando archivos mp3 me anda :S no te falta algun codec??? o algo asi?
|
|
|
|
|
En línea
|
no me juzguen si no me conocen
|
|
|
|
|