![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|
|
#1
|
||||
|
||||
|
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. |
|
#2
|
|||
|
|||
|
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... |
|
#3
|
||||
|
||||
|
Hola,
Cita:
![]() |
|
#4
|
|||
|
|||
|
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 ¿? |
|
#5
|
||||
|
||||
|
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. |
|
#6
|
|||
|
|||
|
Ya lo siento no ser tan claro con mis preguntas y mi código:
El código en si lo hice muy rápido y es sólo para mis pruebas internas, pero tienes razón, no es escusa... Desde q estoy en este foro, me estais dando unas lecciones de humidad y de buena programación, no soy nada .Mi intención es tener varios sonando a la vez, no pensaba q pudiese haber algún problema ya q con otros componentes los he utilizado y iba bien. Sería algo asi como, uno para música de fondo y otros para efectos (es para un juego), normalmente sonaría uno o 2 a la vez, pero tendría varios cargados para q suenen en el momento... Aunq el problema q tengo, también me daría con una sola canción ya q el error sale cuando paro la música y seguidamente destruyo el objeto. venga un saludo a todos ![]() |
|
#7
|
||||
|
||||
|
Cita:
![]() Despues de ver los fuentes del Audio Components Suite, el bucle del contador está bien, Si acaso, metele Application.ProcessMessages y/o Aplication.HandleMessages. Al meter esas lineas, se puede ralentizar el programa mucho, haz pruebas. El AudioOutput debería tener otro evento distinto cuando se hace un Stop explicitamente, de cuando se termina la canción por llegar al final. Sin embargo el componente lo unifica todo en el evento OnDone, (tanto en el ACSOutput como en el TACSThread, así que no tenemos oportunidad de saber por qué se ha parado. Lo único es que no se liberan de forma independiente, sino que ha de esperar a que todos los reproductores se paren, para despues liberarlos todos con los FreeAndNil. No sé, estamos esperando a que llegue el ultimo de la cola, para despues decirles a todos.... 'Lo siento, ya hemos cerrado, vuelvan ustedes mañana', ¿me entiendes?; quizás por eso sería conveniente usar un evento AudioOutputDone distinto para cada uno de ellos. Inconveniente: tener una variable booleana "LiberarComponente" para saber en ese evento si debemos liberar el componenete o no. Dicha variable permanece siempre a falso, y se pone a True en el FormClose. Como ves se complica mucho para hacer lo mismo, así que : "diosito que me quede como estoy" .saludos |
|
#8
|
||||
|
||||
|
Cita:
|
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
|