Ver Mensaje Individual
  #5  
Antiguo 07-10-2005
OscarG OscarG is offline
Miembro
 
Registrado: sep 2005
Posts: 35
Reputación: 0
OscarG Va por buen camino
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
Código Delphi [-]
 Cancion.Stop;
 FreeAndNil(Cancion);
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).

Código Delphi [-]
//Metodo q crea y ejecuta la música
procedure TForm1.Button1Click(Sender: TObject);
begin
TVorbisEntrar:= TVorbisIn.Create(Self);
TVorbisEntrar.FileName:= 'juego.ogg';
TVorbisEntrar.Loop:= false;
TAudio:= TAudioOut.Create(Self);
TAudio.Input:= TVorbisEntrar;
TAudio.OnDone:= AudioOut1Done; //(Self);
TAudio.Run;
Inc(contador);
TVorbisEntrar2:= TVorbisIn.Create(Self);
TVorbisEntrar2.FileName:= 'menu1.ogg';
TVorbisEntrar2.Loop:= false;
TAudio2:= TAudioOut.Create(Self);
TAudio2.Input:= TVorbisEntrar2;
TAudio2.OnDone:= AudioOut1Done;
TAudio2.Run;
Inc(contador);
TVorbisEntrar3:= TVorbisIn.Create(Self);
TVorbisEntrar3.FileName:= 'intro.ogg';
TVorbisEntrar3.Loop:= false;
TAudio3:= TAudioOut.Create(Self);
TAudio3.Input:= TVorbisEntrar3;
TAudio3.OnDone:= AudioOut1Done;
TAudio3.Run;
Inc(contador);
end;
 
//Cierra la aplicación..
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
//Sólo he puesto un asigned para todos pero tendría q ser para cada uno...
if ( Assigned( TAudio ) ) then 
begin
if ( TAudio.Status in [ tosPlaying ] ) then
TAudio.Stop;
if ( TAudio2.Status in [ tosPlaying ] ) then
TAudio2.Stop;
if ( TAudio3.Status in [ tosPlaying ] ) then
TAudio3.Stop;
 
//Esto no me gusta... me parece erroneo aunq funcione
while ( contador > 0 ) do
begin
end;
 
 
FreeAndNil( TVorbisEntrar );
FreeAndNil( TAudio );
FreeAndNil( TVorbisEntrar2 );
FreeAndNil( TAudio2 );
FreeAndNil( TVorbisEntrar3 );
FreeAndNil( TAudio3 );
end;
end;
 
//Salta cuando se ha parado una canción.
procedure TForm1.AudioOut1Done(Sender: TComponent);
begin
Dec(contador);
end;

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 ¿?
Responder Con Cita