Play wav

Estoy realizando una aplicación en la que tengo que trabajar con archivos "wav". No tengo ningún problema en abrir, cerrar, play, pause y stop, del archivo de sonido; pero necesito situarme en un punto concreto de la grabación, y no se como hacerlo. Básicamente, utilizo el formato:
"i= mciSendString ("play voice1", 0&, 0, 0)", sustituyendo el play por pause, stop, etc... Según convenga. Pero lo que necesito es poder oír la grabación en un determinado punto que sería cuatro segundos antes del punto donde estamos ahora. Es decir, al ejecutar la acción, el archivo se reproduce normalmente y, en un momento determinado, retrocedo cuatro segundos en la reproducción y sigo hasta el final.
No se si me he explicado bien. Espero tu respuesta urgentemente. Es muy importante. Me juego mucho.

1 Respuesta

Respuesta
1
La cosa no es tan complicada como parece ...
Antes que nada deberás llevar un control del número de segundos que lleva la reproducción (esto lo controlas con un Timer)
En la sección General (Declarations) del Form creas un contador de segundos, por ejemplo: Dim seg as Long
Agregas un Control Timer al Form, en las Propiedades pones Interval en 1000 y Enabled en False
En el Botón donde inicias la reproducción inicializas seg a cero y activas el Timer:
Private Sub PlayCmd_Click()
seg = 0
Timer1.Enabled = True
i= mciSendString ("play voice1", "", 0, 0)
End Sub
En el evento Timer del Timer incrementas seg:
Private Sub Timer1_Timer()
seg = seg + 1
End Sub
En el evento Click del Botón de regresar envías nuevamente el Command "play" pero le agregas la cláusula "from":
Private Sub Back4Cmd_Click()
Dim rep As Long
If seg > 4 Then
rep = (seg - 4) * 1000
i = mciSendString("play voice1 from " & rep, "", 0, 0)
seg = seg - 4
End If
End Sub
En rep has calculado la posición desde la cual quieres reiniciar la reproducción que será el número actual de segundos menos 4 que es el número de segundos que quieres devolver la reproducción (se debe multiplicar por 1000 porque ese es el intervalo de medición: milésimas de segundo). Al final devuelves el número de segundos para estabecer la nueva posición actual.
Fácil ... :)
Si tienes algún problema me escribes nuevamente SIN FINALIZAR la Pregunta, de lo contrario pues listo.
Suerte !
Rogers R.
Gracias por tu rapidez. Me has sacado de un gran apuro. Aprovechando tu excelente colaboración, ¿cómo podría activar este código pulsando teclas f4-f5, etc...?. Estoy gestionando todo esto desde una base de datos de access 2000 y me encuentro que si hago en un módulo una "public function", no me funciona. ¿como puedo activar una funcion de un modulo si es una private function?, a ver que se te ocurre. Pero de todas maneras muchísimas gracias por tua ayuda. Espero tu respuesta. Repito, gracias mil !
TONI
Debes hacer 2 cosas:
En el evento Load del Form: KeyPreview = True
Y en el Evento KeyDown del Form validas cuál tecla se presionó, por ejemplo:
If KeyCode = vbKeyF1 Then
Command1_Click
End If
Esto haría que si el Usuario presiona la Tecla de Función F1 sucediera como si hubiera hecho click en el CommandButton Command1.
En cuanto a las Funciones si una Function está declarada como Public se puede acceder desde cualquier parte, deberías revisar la estructura de la Función y si se declara como Private sólo será accesible desde el Módulo.
Espero te sirva ...
Suerte !
Rogers R.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas