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
[-]
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; 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;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
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;
while ( contador > 0 ) do
begin
end;
FreeAndNil( TVorbisEntrar );
FreeAndNil( TAudio );
FreeAndNil( TVorbisEntrar2 );
FreeAndNil( TAudio2 );
FreeAndNil( TVorbisEntrar3 );
FreeAndNil( TAudio3 );
end;
end;
procedure TForm1.AudioOut1Done(Sender: TComponent);
begin
Dec(contador);
end;
Pos eso es todo, gracias por las molestias