Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-11-2006
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 22
tarco35 Va por buen camino
Cool Encadenar sonidos????

Saludos a todos... Como puedo reproducir dos sonidos (ficheros waw) de forma consecutiva, o sea, primero uno y cuando termine que reproduzca el otro. Lo he intentado con PlaySound pero el segundo es el unico que se oye...
Gracias por su tiempo y colaboracion...
Responder Con Cita
  #2  
Antiguo 12-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
No dices como lo has intentado con PlaySound, así que voy a suponer que utilizaste el parámetro SND_ASYNC, por eso solo se escucha el segundo sonido. Prueba usando el parámetro SND_SYNC, de esta forma la función PlaySound no termina hasta que el sonido se ha reproducido. Es decir:

Código Delphi [-]
  PlaySound('d:\1.wav',0,SND_FILENAME or SND_SYNC);
  PlaySound('d:\2.wav',0,SND_FILENAME or SND_SYNC);
Responder Con Cita
  #3  
Antiguo 12-11-2006
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 22
tarco35 Va por buen camino
Exclamation

cierto es que el parametro usado es snd_async.. pero no puedo esperar a que snd_sync termine ya que esta funcion la tengo dentro de un cronometro que checa cosas y lanzaria esos sonidos
Responder Con Cita
  #4  
Antiguo 12-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Pensándolo mejor podemos darle otra vuelta de tuerca al código. Estaría bien que el sonido se reproducirá de forma asíncrona al resto del programa, pero manteniendo el orden de reproducción. Así que vamos a utilizar un Thread que se ejecutara el paralelo con el resto de la aplicación, para ello vamos a definir una clase derivada de TThread a la que llamaremos TSound. Esta clase tendrá un método llamado Add que permitirá añadir archivos wav a la lista de reproducción. Por lo demás se comportara como un Thread normal, que podremos pausar y continuar. Vamos con un poco de código:

Código Delphi [-]
type
  TSound = class(TThread)
  private
    FList: TStringList;
    FMutex: THandle;
  protected
    procedure Execute; override;
  public
    constructor Create;
    destructor Destroy; override;
    procedure Add(Path: String);
  end;


uses mmsystem;

{ TSound }

procedure TSound.Add(Path: String);
begin
  WaitForSingleObject(FMutex, INFINITE);
  try
    FList.Add(Path);
  finally
    ReleaseMutex(FMutex);
  end;
end;

constructor TSound.Create;
begin
  FList:= TStringList.Create;
  FMutex:= CreateMutex(nil,FALSE,nil);
  FreeOnTerminate:= TRUE;
  inherited Create(FALSE);
end;

destructor TSound.Destroy;
begin
  FList.Free;
  CloseHandle(FMutex);
  inherited;
end;

procedure TSound.Execute;
var
  Path: String;
begin
  inherited;
  while not Terminated do
  begin
    WaitForSingleObject(FMutex, INFINITE);
    try
      if FList.Count > 0 then
      begin
        Path:= FList[0];
        FList.Delete(0);
      end else
        Path:= '';
    finally
      ReleaseMutex(FMutex);
    end;
    if Path <> '' then
      PlaySound(PChar(Path),0,SND_FILENAME or SND_SYNC)
    else
      Sleep(10);
  end;
end;


Para utilizarlo, tenemos que crearlo y añadirle archivos a la lista de reproducción. Algo así:
Código Delphi [-]
var
  Sound: TSound;

//Para crearlo
Sound:= TSound.Create;

//Para destruirlo
Sound.Terminate;

//Para añadir un sonido
Sound.Add('d:\1.wav');

Como ves este código es sensiblemente mas complejo que el que puse en el mensaje anterior, puedes usar uno u otro dependiendo de las necesidades de tu aplicación.

EDITO: Corregir un error con la propiedad FreeOnTerminate

Última edición por seoane fecha: 12-11-2006 a las 18:20:46.
Responder Con Cita
  #5  
Antiguo 12-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Caramba, parece que te leo el pensamiento
Responder Con Cita
  #6  
Antiguo 12-11-2006
tarco35 tarco35 is offline
Miembro
 
Registrado: sep 2003
Posts: 210
Poder: 22
tarco35 Va por buen camino
Parece que esto es lo que necesito.... lo pruebo y te confirmo... una cosa... todo el primer codigo descrito es para crear una unidad nueva del proyecto no?
Responder Con Cita
  #7  
Antiguo 12-11-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Cita:
Empezado por tarco35
Parece que esto es lo que necesito.... lo pruebo y te confirmo... una cosa... todo el primer codigo descrito es para crear una unidad nueva del proyecto no?
Puedes incluirlo en un unit nueva o dentro de la misma unit. Solo tienes que incluir cada cosa en su sitio, es decir, lo que esta debajo de la clausula type ponerlo debajo de la clausula type de tu unit, lo que esa en la clausula uses en la clausula uses y el resto debajo de la clausula implementation.
Responder Con Cita
  #8  
Antiguo 03-08-2008
mancurnino mancurnino is offline
Miembro
 
Registrado: feb 2008
Posts: 65
Poder: 17
mancurnino Va por buen camino
Alguien puede ayudarme cn sto?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
sonidos midi en delphi JefeNet Varios 4 14-10-2007 20:03:16
Sonidos en Safari (MAC) CHiCoLiTa HTML, Javascript y otros 5 11-10-2006 14:57:36
Como encadenar DropDownList selman .NET 10 30-06-2005 18:22:01
Sonidos con delphi el_enigma1 OOP 2 14-01-2005 00:31:30
Insertar sonidos egm1802 API de Windows 1 23-04-2004 18:05:39


La franja horaria es GMT +2. Ahora son las 15:33:30.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi