Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-06-2012
sbraceras sbraceras is offline
Registrado
NULL
 
Registrado: jun 2012
Posts: 7
Poder: 0
sbraceras Va por buen camino
Lightbulb Reproducir audio en archivo de recursos con TMediaPlayer

Hola! Les comento lo que estoy queriendo hacer y agradecería me confirmen si es la mejor alternativa que existe
Yo tengo archivos de audio (mp3, midi, wav, wma) 'metidos' en el ejecutable usando un archivo de recursos, ya que no quiero cargarlos desde disco porque no quiero que exista la posibilidad de que manipulen esos archivos. Lo que quiero es poder reproducirlos en mi aplicación.

Estuve investigando y una forma muy fácil es usar la función PlaySound de la API de Windows o bien sndPlaySound, pero según pude notar, sólo reproduce wavs! Esto es así?
Entonces como yo quiero reproducir cualquier formato usé el TMediaPlayer que viene en la paleta de componentes y la verdad que reproduce todos los formatos, pero el problema está en que con el TMediaPlayer no puedo cargarle los archivos embebidos en el exe directamente, sino que debo indicar en la property FileName el nombre de archivo que quiero reproducir. En cambio con PlaySound lo logro de una manera muy fácil.
Entonces no me queda otra alternativa que extraer los archivos de audio de mi ejecutable y copiarlos a disco y luego indicar en la property FileName el archivo que quiero reproducir. ¿Estoy haciendo lo mejor que se podría hacer?
Esa es mi inquietud. Muchas gracias de antemano!
Responder Con Cita
  #2  
Antiguo 16-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola sbraceras y bienvenido a Club Delphi

Una opción es usar la función mciSendString.

Ejemplo:
Código Delphi [-]
...
implementation

{$R *.dfm} {$R Recurso.res}

uses MMSystem;

procedure TForm1.FormCreate(Sender: TObject);
var
  RStream: TResourceStream;
  PathAndFile: string;
begin
  PathAndFile:= ExtractFilePath(Application.ExeName) + 'sound.mp3';
  RStream := TResourceStream.Create(HINSTANCE, 'sound', RT_RCDATA);
  try
    RStream.SaveToFile(PathAndFile);
    mciSendString('close media', nil,0, 0);
    mciSendString(PChar('open "' + PathAndFile + '" alias media'), nil, 0, 0);
    mciSendString('play media', nil, 0, 0);
  finally
    RStream.Free;
    DeleteFile(PathAndFile);
  end;
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 18-06-2012
sbraceras sbraceras is offline
Registrado
NULL
 
Registrado: jun 2012
Posts: 7
Poder: 0
sbraceras Va por buen camino
Muchas gracias ecfisa por tu respuesta!

Supongo entonces que no hay otra alternativa para reproducir cualquier tipo de archivo de audio directamente desde los recursos del ejecutable, hay que grabarlos en disco si o si. Eso quería saber.
Por último, si uso esa función de la API (mciSendString) no puedo detectar cuando ha finalizado el sonido? Necesito sí o sí detectar cuando finalizó un sonido para ejecutar un nuevo sonido a continuación (es para guiar al usuario en el uso del sistema mediante audios de ayuda). Quiero ejecutar un audio que dice 'Bienvenido!' y seguido a este, otro audio que dice 'Por favor, presente el ticket en el lector' y así... y los audios pueden venir en diferente formato, pero son todos mp3 o son todos wma o son todos wav).

Por qué recomendaste usar esa función de la API en vez del TMediaPlayer?

Mil gracias de nuevo por tu ayuda!

Saludos!
Responder Con Cita
  #4  
Antiguo 18-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por sbraceras Ver Mensaje
Por qué recomendaste usar esa función de la API en vez del TMediaPlayer?
Hola sbraceras.

En realidad no fué una recomendación sino presentarte una alternativa al uso de TMediaPlayer, pero en ningún caso con la intención de desmerecer el uso de este último.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 18-06-2012
sbraceras sbraceras is offline
Registrado
NULL
 
Registrado: jun 2012
Posts: 7
Poder: 0
sbraceras Va por buen camino
Bueno, muy amable ecfisa!

Respecto a esta pregunta me puedes ayudar por favor? si uso esa función de la API (mciSendString) no puedo detectar cuando ha finalizado el sonido? Necesito sí o sí detectar cuando finalizó un sonido para ejecutar un nuevo sonido a continuación. Se entiende?
Responder Con Cita
  #6  
Antiguo 18-06-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Creo que te puede servir el flag Wait.

Ejemplo:
Código Delphi [-]
  ...
  mciSendString('play media wait', nil, 0, 0);
  ShowMessage('Finalizado');
  ...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 18-06-2012
sbraceras sbraceras is offline
Registrado
NULL
 
Registrado: jun 2012
Posts: 7
Poder: 0
sbraceras Va por buen camino
Muchas gracias!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Reproducir videos seguidamente en TMediaPlayer kolfito Gráficos 7 04-09-2013 07:21:00
error al reproducir con TMEDIAPLAYER D1360666 Varios 0 05-04-2012 20:28:35
Reproducir audio (TMediaPlayer) al momento de entrar a un nuevo Form aquilesbrinko Varios 3 19-11-2009 01:54:41
Reproducir videos en TMediaPlayer El_Perrito Gráficos 3 11-04-2009 15:01:34
TMediaPlayer y CD Audio MaMu OOP 8 12-04-2008 06:57:33


La franja horaria es GMT +2. Ahora son las 23:12:01.


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