Ir al contenido



Foto

Reproducir audio desde campo LongBlob con MediaPlayer

Play Stream MediaPlayer Campo LongBlob

  • Por favor identifícate para responder
8 respuestas en este tema

#1 Bertifox

Bertifox

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationLa Serena-Chile

Escrito 26 junio 2017 - 04:56

Saludos a todos, les comento que logre grabar un archivo de audio desde el microfono del laptop a un campo LongBlob de MySql.

Ahora requiero reproducir este contenido a través de MediaPlayer, logre pasar este contenido a TMemoryStream o TStream pero no logro asignarlo a mediaplayer para su reproducción.

 

Lo ideal sería reproducirlo directamente desde un stream sin tener que grabarlo a un archivo wav/mp3.

 

Alguien resolvió ya esto?

 

Gracias 


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.286 mensajes
  • LocationArgentina

Escrito 26 junio 2017 - 06:55

La verdad es que tendría que verificar si es que el TMediaPlayer que viene con Delphi tiene, al día de hoy, capacidad de reproducir un Stream. El que venía con D6 no es capaz de soportar stream.

Tanto, o más importante, es que el reproductor tenga la función de reconocer e interpretar el formato adecuadamente al hacer streaming. Esto es porque se necesita determinar el codec a aplicar, y esto depende del formato.

El Streaming básicamente es ir leyendo los bytes a medida que llegan. Y lo primero que se hace es detectar el formato. Sin ello dará lo mismo que le pases cualquier cosa... no podrá reproducirlo.

Necesariamente, de forma directa, o indirecta, el contenido del stream es formateado.

 

Veo más factible tratar de buscar un componente de terceros que haga lo que buscas. Tengo mis serias dudas que haya cambiado mucho el TMediaPlayer que conocí en D6. La primera impresión al verlo en Delphi 10.2 Starter es que no cambió nada.

 

Saludos,


  • 0

#3 Bertifox

Bertifox

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationLa Serena-Chile

Escrito 26 junio 2017 - 10:11

Hola Delphius, estuve buscando y por lo que pude ver MediaPlayer solo reproduce desde un archivo que puede ser mp3 u otros formatos.

 

Ahora debo reproducir el audio no me importa si es desde un archivo mp3, el problema que tengo es que no se como llevar desde el campo LongBlob a audio.mp3, por medio de la instrucción :


delphi
  1. UniQuerylineaMensajeAudio.SaveToFile('c:\micarpeta\mensaje.mp3');

este crea el archivo mp3 con 0 Bytes,

de que otra forma puedo hacerlo? , talvez con TMemoryStream.

 

Saludos


  • 0

#4 Bertifox

Bertifox

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationLa Serena-Chile

Escrito 27 junio 2017 - 07:00

Intente con este codigo :


delphi
  1. procedure TForm1.TimerMensajeAudioTimer(Sender: TObject);
  2. var
  3. sMp3File : String;
  4. blob : tStream;
  5. begin
  6. sMp3File := 'C:\Audio\Mensaje.mp3';
  7. if FileExists(sWaveFile) then
  8. deletefile( sWaveFile );
  9.  
  10. UniQuery1.Close;
  11. UniQuery1.SQL.Text:='select MensajeAudio from audios';
  12. UniQuery1.ExecSQL;
  13. UniQuery1.Open;
  14. blob := UniQuery1.CreateBlobStream(UniQuery1.FieldByName('MensajeAudio'), bmRead);
  15. try
  16. blob.Seek(0, soFromBeginning);
  17.  
  18. with TFileStream.Create(sWaveFile, fmCreate) do
  19. try
  20. CopyFrom(blob, blob.Size)
  21. finally
  22. Free
  23. end;
  24. finally
  25. blob.Free
  26. end;
  27. end;

y sigue grabando el archivo mp3 con 0 Bytes, ya no se me ocurre que pasa, el campo blob tiene cargado el mp3.

 

Saludos


  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 27 junio 2017 - 01:36

TMediaPlayer no soporta Stream, puedes hacer uso de terceros como la librería BASS ó la API PlaySound de Windows un ejemplo de éste último:


delphi
  1. procedure TocarAudio(DBField:TBlobField);
  2. var
  3. b: TBlobStream;
  4. m: TMemoryStream;
  5. begin
  6. b := TBlobStream.Create(DBField, bmRead);
  7. try
  8. m := TMemoryStream.Create;
  9. try
  10. m.CopyFrom(b, b.Size);
  11.  
  12. Win32Check(PlaySound(m.Memory, 0, SND_SYNC or SND_MEMORY));
  13. finally
  14. m.Free
  15. end;
  16. finally
  17. b.Free
  18. end;
  19. end;

Ojo, lo hice al vuelo sin probar.

 

Saludos.


  • 0

#6 Bertifox

Bertifox

    Advanced Member

  • Miembros
  • PipPipPip
  • 108 mensajes
  • LocationLa Serena-Chile

Escrito 27 junio 2017 - 02:33

Gracias enecumene, pero lo necesito para una apps Android, veré algún componente que lo haga.

 

Saludos


  • 0

#7 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 29 junio 2017 - 06:40

Ah, es que como está en el foro de Delphi y no firemoneky ;)


  • 0

#8 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 824 mensajes
  • LocationMisiones, Argentina

Escrito 04 julio 2017 - 07:52

Recién veo este tema y quiero comentar. No se si lo movieron.

En el caso de los blobs lo que corresponde es obtener el valor del blob y convertirlo a un medio viable para su reproducción, no tan directamente.

Es el caso de los JPGs, se almacenan como JPGs, pero no pueden representarse directamente en los controles atados a los datos.

Al menos cuando lo intento debo primero pasarlos a un control que permita su representación. Pero en cambio si lo almaceno como BMP si lo puedo representar directamente.

Corríjame alguien que esté más al tanto si estoy equivocado, pero yo lo hago así con los gráficos.

 

FM es más moderno que la VCL, pero desconozco esa posibilidad.

 

El TMediaPlayer de FM permite la reproducción de MP3, WMA y WAV. Por lo que no debería haber problemas. El asunto es cómo se guardó este contenido en el campo blob.

 

1. Deberías verificar si realmente fue almacenado en la tabla de MySQL, para dar pasos firmes.

2. Conocer el formato la compresión del MP3, quizás no sea soportado por FM.

3. Revisa las propiedades TMedia y TMediaCodecManager, quizás te den algo de "luz".

 

Saludos.


  • 0

#9 cram

cram

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 824 mensajes
  • LocationMisiones, Argentina

Escrito 04 julio 2017 - 07:55

También te recomiendo que leas la ayuda Audio-Video in FireMonkey, que se accede navegando en la ayuda desde un control TMediaPlayer.

 

Saludos


  • 0