Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   FireMonkey (https://www.clubdelphi.com/foros/forumdisplay.php?f=50)
-   -   Error mediaplayer y sonidos del sistema (https://www.clubdelphi.com/foros/showthread.php?t=92303)

turbopascual5.0 23-09-2017 10:14:52

Error mediaplayer y sonidos del sistema
 
Hola a tod@s

Estoy desarrolando una aplicación para android. El diseño es muy minimalista y no uso botones, pongo una imagen y uso el evento onclick para acceder a las diferentes pantallas de datos.

Quería poner un sonido al arrancar el programa y otro sonido cada vez que pulse una imagen. En un action list he creado un par de acciones, llamadas click y tambor.


Código Delphi [-]
procedure tamborExecute(Sender: TObject);
const
  tosname: array [0..3] of string  = ('Win','OSX','iOS','Android');
begin
  mediaplayer1.Stop; mediaplayer1.Clear;
  if tosname[integer(TOSversion.Platform)]='Android' then begin
    mediaplayer1.FileName:= TPath.GetDocumentsPath + PathDelim + 'tambor.3gp' ;
    if mediaplayer1.State = tmediastate.Stopped then
      mediaplayer1.Play;
    end;
  if tosname[integer(TOSversion.Platform)]='Win' then begin
    mediaplayer1.FileName:= 'C:\Users\Usuario\Documents\Embarcadero\Studio\Projects\sound\tambor.wma' ;
    if mediaplayer1.State = tmediastate.Stopped then
      mediaplayer1.Play;
  end;
end;

procedure clickExecute(Sender: TObject);
const
  tosname: array [0..3] of string  = ('Win','OSX','iOS','Android');
begin
  if tosname[integer(TOSversion.Platform)]='Android' then begin
    mediaplayer1.FileName:= TPath.GetDocumentsPath + PathDelim + 'call.3gp' ;
    if mediaplayer1.State = tmediastate.Stopped then
      mediaplayer1.Play;
  end;
  if tosname[integer(TOSversion.Platform)]='Win' then begin
    mediaplayer1.FileName:= 'C:\Users\Usuario\Documents\Embarcadero\Studio\Projects\sound\call.wma' ;
    if mediaplayer1.State = tmediastate.Stopped then
      mediaplayer1.Play;
  end;
end



En deployment he colocado los ficheros en la ruta .\assets\internal.

Las rutas de win me son indeferentes, el programa nunca va a ser unsado en windows, solo las pongo para poder correr el programa paso a paso y depurar.

Cuando arranco suena , sin problema. La llamada a la acción la hago en el evento formcreate .

A partir de eso aparece un error cíclico. Al correr la acción click tengo un error "Access violation at adress A02D0550, accesing adress 00000000". Al pulsar de nuevo la imagen y correr la acción no da error y el sonido se escucha, corriendo el programa normalmente. Al volver a pulsar otra vez el error y así cíclico.

¿a que se puede deber?

Y una última consulta: Cuando corres una palicación android , como un navegador, al introducir datos se escuchan los "clicks" , esos sonidos no son multimedia.
¿Existe alguna forma de tener sonidos en las pulsaciones de botón, entrada de teclado, etc, que no sea reproduciendo un fichero de sonido con mediaplayer?

Uso Tokio 10.2 y su desesperante lento IDE (i7 , 16 gb ram).


Gracias a tod@s de antemano.

Casimiro Notevi 23-09-2017 11:02:08

No hagas preview hasta que lo guardes por primera vez. Después puedes editarlo y hacer preview cuanto quieras.

Neftali [Germán.Estévez] 26-09-2017 09:07:18

En este caso he corregido los TAG's y he borrado los 2 mensajes sobrantes.
Para las próximas veces, puedes hacer lo que comenta Casimiro.

Neftali [Germán.Estévez] 26-09-2017 09:14:38

Para la primera cuestión te recomiendo que uses algún tipo de Log que te permita saber exactamente en qué parte del programa está fallando. A ver si eso te da más pistas.
Prueba también otro evento tipo OnShow en lugar del OnCreate (sólo por probar).

En cuanto al tema de los sonidos, personalmente no la he utilizado, pero otros compañeros sí, y me han dicho que esta librería funciona muy bien. Se que para el tema de juegos ysimilares se utiliza esta:

http://www.fmxexpress.com/free-game-...ndows-and-osx/

Esta librería extiende el api android.media.SoundPool, mientras que mediaplayer lo hace desde android.media.MediaPlayer, creo que más adecuada para lo que necesitas.


La franja horaria es GMT +2. Ahora son las 22:38:19.

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