FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Liberar Objetos II
Estoy con un componente de música q me he bajado, el ACS
Audio Components Suite para ulilizar oggs, la cosa es q quiero cerrar el sonido y liberarlo y me da un error... esto lo hago con 2 botones, uno para crear el objeto y otro para liberarlo. En la ayuda encontré q antes de liberar el objeto había q parar la música si estaba sonando, cosa q hice y sigue fallando. Supongo q no conoceis el componente, pero igual teneis esperiencia con música, yo por lo q veo, no le doy tiempo a q se cierre y por eso falla, ya q si pongo en un botón, parar la música y en otro liberarlo y no los pulso muy rápido, pos no salen problemas... He pensado en poner un sleep, pero no me gusta, aunq igual es la única solución q me queda...aunq igual hay algún método q te diga si el objeto está lista para ser liberado... Un dia después, y más inspirado, he utilizado un evento del componente, OnDone, el cual salta cuando se ha completado una canción y he comprobado q tambien vale si la paras... Entonces he generado este código
Bueno, contador es una variable q se incrementa cada vez q se crea un audio, osea en este caso habría 3, y en el método que os he comentado, se iría decrementando a medida q el método Stop hace efecto.... Lo q no me gusta es el while ese, me parece poco seguro, igual hasta una chapuza. Si hay algún error se me puede quedar bloqueado el programa... Pos eso, algún consejo? Pos eso, gracias por las molestias!!! |
#2
|
||||
|
||||
Hola Oscar!
No tengo experiencia con el componente que mencionas, pero tal vez puedas utilizar Application.ProcessMessages justo antes de liberar el objeto. Con esto detienes la ejecución de la siguiente línea hasta que se libere por completo la cola de mensajes pendientes. No estoy seguro de que vaya a funcionar pero nada se pierde con intentarlo. Un saludo. |
#3
|
|||
|
|||
Lo acabo de probar y no funciona
Si sirve de pista, el componente de audio usa hilos internamente...supongo q ese será el motivo, yo creo q van por ahí los tiros, qdcir, q no le da tiempo a parar la canción antes de liberarlo y por eso casca... |
#4
|
||||
|
||||
Hola,
Cita:
|
#5
|
|||
|
|||
Ummm, creo q me he equivocado al expresarme, el contador lo utilizo para contar las canciones q han empezado a sonar, el problema es q si pongo
Resulta q casca, entonces lo q he hecho es: 1º cuando doy a play, incremento el contador. 2º usando un evento q es OnDone, q salta cuando se ha completado una canción ya sea al pararlo o al finalizar, cuando dicho evento salta, decremento el contador. De tal forma q cuando quiero liberar el objeto Cancion, antes de liberarlo miro si contador es igual a 0, y mientras no lo sea, lo he metido en un bucle q no hace nada. Eso es lo q no me gusta, xq me podría pasar cualquier cosa q produzca un bucle infinito... Quedandome algo asi...(siendo el Objeto Cancion = TAudio).
Pos eso es todo, gracias por las molestias Última edición por OscarG fecha: 07-10-2005 a las 11:40:56. Razón: he puesto mal la etiqueta delphi ¿? |
#6
|
||||
|
||||
Si es un Tipo de datos, debe declararse con la "T" delante ej: TVorbisIn
Si es una variable, se declara sin "T" ej: VorbisEntrar. El problema es que todo tiene delante la "T" y no se sabe si estas accediendo a un tipo de datos o bien a una variable. (más o menos se intuye, pero se pueden cometer errores muy graves al hacerlo de esta forma), te recomiendo, por tu bien , que modifiques el código. Lo que no me queda claro es por qué usas varios VorbisEntrar, VorbisEntrar2, etc, ¿tienes varios ogg cantando al mismo tiempo? Se supone que no, ya que es un reproductor de canciones, por tanto una va detrás de otra; entonces, el evento para decrementar el contador, se puede aprovechar para cambiarle el nombre de archivo al mismo VorbisEntrar, y ponerlo a cantar de nuevo. (sin necesidad de VorbisEntrar2). Pensandolo mejor, quizás te convenga, al menos 2 vorbisEntrar, cuando uno ha finalizado, ya tienes preparado el otro para empezar a cantar la siguiente canción, y así disminuyes la pausa entre canciones, Si estoy equivocado, ya me contarás. |
|
|
|