IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants FMX Delphi Discussion :

[D10.4] TMediaPlayer ne se positionne pas correctement sur le fichier audio sous Android


Sujet :

Composants FMX Delphi

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut [D10.4] TMediaPlayer ne se positionne pas correctement sur le fichier audio sous Android
    Bonjour,

    J'utilise Delphi 10.4 pour créer un simple lecteur de livre audio.
    J'ai un fichier audio mp3. Dans mon application, je souhaite que TMediaPlayer lise une phrase à une position précise dans le ficher mp3,
    par exemple à partir de 00:01:12.256 à 00:01:15.734 secondes, les 100 nanosecondes sont prise en compte.
    Je règle MediaPlayer.CurrentTime à 00:01:12.256, lance MediaPlayer.Play,
    et l'arrêt via Timer de 50 ms je fais un stop quant le MediaPlayer.CurrentTime atteint 00:01:15.734

    Pour un fichier audio mp3 de 3 minutes, j'ai environ 60 plages précises à positionner.

    Mon problème est que, si je position MediaPlayer.CurrentTime à 00 : ?? : ?? . ???
    la lecture ne se fait pas correctement à cette position j'ai un décalage de 500 à 1100 ms.

    Si je me position au début sur certains fichiers audio, la lecture se fait plus au moins correct,
    mais si je me position vers la fin du fichier audio j'ai un décalage.

    Sur d'autres fichiers audio j'ai le décalage au début du fichier,
    la différence de ces temps n'est pas constant et n'est pas linéaire.

    Je constate que le problème apparaît de manière très frappante sur un fichier.
    mais il apparaît de façon moins frappante sur un autre fichier.
    J'ai aussi des fichiers où le problème est absent.

    Tous les fichiers ont le même format. Sous Windows les positions se font correctement.

    Ma question est-ce un problème de programmation ou de codecs MP3 ?

    Si c'est un problème de codec, comment puis-je déployer et utiliser des codecs avec mon application.
    Ou quel serait le meilleur format pour un fichier livre audio.

    Je vous serai très reconnaissant pour l'aide.




    Le format Audio:

    Format : MPEG Audio
    Format version : Version 1
    Format profile : Layer 3
    Format settings : Joint stereo
    Bit rate mode : Variable
    Bit rate : 161 kb/s
    Minimum bit rate : 32.0 kb/s
    Channel(s) : 2 channels
    Sampling rate : 44.1 kHz
    Frame rate : 38.281 FPS (1152 SPF)
    Compression mode : Lossy
    Writing library : LAME3.97r



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    procedure TFormMain.Button1(Sender: TObject);
    var
     startTimeLyr : int64 ;
    begin
     
      startTimeLyr := 10000 * MilliSecondOfTheDay(StrToDatetime(datetostr(date) + ' ' + '00:01:12.256' ));
     
      MediaPlayer1.CurrentTime := startTimeLyr  ;
     
    end;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    function TFormMain.EndTimeLyr: int64;
    begin
     
      DTendLyr := StrToDatetime(datetostr(date) + ' ' + '00:01:15.734' );
      result := 10000 * MilliSecondOfTheDay(DTendLyr);
     
    end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    procedure TFormMain.Timer1Timer(Sender: TObject);
    begin
    ...
     if MediaPlayer1.CurrentTime > EndTimeLyr then 
      begin
       MediaPlayer1.Stop;
      Timer1.Enabled := False;
      end;
     
    end;

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 447
    Points : 24 849
    Points
    24 849
    Par défaut
    Le temps serait-il calculé selon le nombre de bit, donc un bit rate variable qui améliore la compression des silences et la qualité du reste pourrait-il jouer ?
    Car faut forcément lire les données pour faire les sauts temporels en fonction du bit rate de chaque segment
    Si l'on fait un raccourci en supposant un bit rate constant, c'est évidemment plus rapide (pas besoin de lire le fichier, juste un saut) mais erroné sur un bit rate variable.

    sur iPhone, certains MP3 font même planté toute la couche du décoder, un titre qui plante, le lecteur ne lit plus rien du tout, reboot du téléphone, ça avec même l'appli native.
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Bonjour

    Est-ce que la durée totale de la diffusion apparaît avec la même valeur sur Windows et Android pour tes fichiers ?

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par pprem Voir le message
    Bonjour

    Est-ce que la durée totale de la diffusion apparaît avec la même valeur sur Windows et Android pour tes fichiers ?

    Voici le test que je viens de faire pour MediaPlayer1.Duration

    sous Windows ça me donne 00:04:47.012
    sous Android ça me donne 00:04:47.051

    avec d'autres fichiers, j'ai une petite différence, mais pas plus de 50 ms

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Le temps serait-il calculé selon le nombre de bit, donc un bit rate variable qui améliore la compression des silences et la qualité du reste pourrait-il jouer ?
    Car faut forcément lire les données pour faire les sauts temporels en fonction du bit rate de chaque segment
    Si l'on fait un raccourci en supposant un bit rate constant, c'est évidemment plus rapide (pas besoin de lire le fichier, juste un saut) mais erroné sur un bit rate variable.

    sur iPhone, certains MP3 font même planté toute la couche du décoder, un titre qui plante, le lecteur ne lit plus rien du tout, reboot du téléphone, ça avec même l'appli native.


    Donc, si je comprends bien, pour les fichiers audiobook (non musical) c'est peut-être préférable de prendre Constant bitrate pour un meilleur positionnement.

    Joue-t-il un rôle si je prends 112 ou 96 kbit/s ou Mono / Stereo.

    Je pense pour écouter du texte, en Mono c'est suffisant et en plus le fichier deviendra plus petit.

    Je ne sais pas quel paramètre est meilleur, pour que je me puisse positionner sur la bonne plage que je lui donne.

    Je vais faire des tests ...

  6. #6
    Membre expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Points : 3 611
    Points
    3 611
    Par défaut
    Citation Envoyé par Ardely Voir le message
    Voici le test que je viens de faire pour MediaPlayer1.Duration

    sous Windows ça me donne 00:04:47.012
    sous Android ça me donne 00:04:47.051

    avec d'autres fichiers, j'ai une petite différence, mais pas plus de 50 ms
    C'est chelou mais au moins c'est la durée interprétée par l'API de traitement du son. Par conséquent je recommande de faire du positionnement au prorata plutôt qu'en dur avec la même valeur sur toutes.

    Sous Windows calcule tes valeurs et stocke la durée totale.
    Sur les autres plateformes fais une règle de trois pour chaque position qui t'intéresse.

    Avec un peu de chance l'intégralité est modifiée et pas juste une partie (mais c'est pas gagné).

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    j'ai essayé de convertir le fichier audio en plusieurs formats avec des combinations
    différents a chaque fois.

    example avec,

    - audio chaneles Mono/ Stereo
    - Bitrate Mode VBR / ABR / VBR
    - Bitrate 56 à 320
    - Encoding alogorithm 0 à 9
    - etc..

    Les résultats sont très décevants, car avec tous ses formats que j'ai essayés, les positionnements ne se font pas correctement.

    Je note aussi que les positionnements que je fais, se font sur une plage de coute silence (sans voix).

    Si je me positionnement sur des plages avec voix le positionnement se fait correctement...!! étrange comportement .. !!

    Dois-je investir ma programmation dans cette direction surtout si je veux une application Windows/IOS/Android ...

    Merci pour les infos

  8. #8
    Membre régulier
    Inscrit en
    Novembre 2006
    Messages
    317
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 317
    Points : 88
    Points
    88
    Par défaut
    Citation Envoyé par pprem Voir le message
    C'est chelou mais au moins c'est la durée interprétée par l'API de traitement du son. Par conséquent je recommande de faire du positionnement au prorata plutôt qu'en dur avec la même valeur sur toutes.

    Sous Windows calcule tes valeurs et stocke la durée totale.
    Sur les autres plateformes fais une règle de trois pour chaque position qui t'intéresse.

    Avec un peu de chance l'intégralité est modifiée et pas juste une partie (mais c'est pas gagné).

    Excusez-moi, je ne suis pas sûr d'avoir bien compris ce que vous me proposez,

    pourriez-vous m'en dire davantage sur la façon de le faire.

    Merci pour l'aide apportée.

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 929
    Points
    40 929
    Billets dans le blog
    62
    Par défaut
    Je n'utilise pas Tmediaplayer très souvent et toujours pour des sons "entiers".
    Naïvement j'espérais des évènements du dit composant qui aurait pu gérer le temps écoulé, grosse déception !

    Par contre, je vois l'utilisation d'un Timer, j'utilise de plus en plus un TStopwatch (system.Diagnostics) peut-être plus précis ?
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/01/2011, 22h24
  2. [WD11] Application qui ne tourne pas correctement sur tous les postes
    Par ivichou dans le forum WinDev
    Réponses: 5
    Dernier message: 18/05/2010, 15h55
  3. fenetre popUp ne s'ouvre pas correctement sur XP
    Par noknouka dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 04/11/2009, 10h17
  4. Domaine : l'URL de mon domaine n'arrive pas correctement sur mon site
    Par amarcil dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 09/08/2008, 13h04
  5. [CS3] Site ne fonctionne pas correctement sur le serveur
    Par rob22 dans le forum Dreamweaver
    Réponses: 11
    Dernier message: 08/04/2008, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo