Comment puis-je obtenir le html5 audio d'une durée de temps
J'ai un html5 <audio>
balise dans la page, mais comment puis-je savoir sa durée?
<audio controls="">
<source src="p4.2.mp3">
</audio>
Vous devez vous connecter pour publier un commentaire.
Navigateur essayez-vous de ceci? Sur certains navigateurs, le
duration
ne fonctionne pas comme il devrait, de retourNaN
comme vous l'avez mentionné.Également vous assurer que le fichier audio est chargé avant de tenter de récupérer la durée?
loadedmetadata
, dans ce cas, j'ai pu obtenir laduration
propriété2018 solution:
Vous obtiendrez
undefined
ouNaN
(pas un nombre) lorsque les métadonnées audio n'est pas encore chargé. Par conséquent, certaines personnes ont proposé d'utiliseronloadedmetadata
pour s'assurer que les métadonnées du fichier audio est extrait de la première. Aussi, ce que la plupart des gens n'ont pas de mentionner que vous avez pour cible le premier indice de l'audio de l'élément DOM avec[0]
comme ceci:-- Vanille Javascript:
Si cela ne fonctionne pas essayer cela, mais pas de manière fiable et dépend de votre connexion:
-- JQuery:
Dans un commentaire ci-dessus, il a été mentionné que la solution est de se lier à une poignée d'événement pour l'événement loadedmetadata. C'est la façon dont je l'ai fait -
J'ai utilisé "canplaythrough" événement pour obtenir la durée de la piste. J'ai un cas où j'ai deux joueurs, et je veux arrêter le deuxième joueur 2 secondes avant que le premier soit terminé.
J'ai eu du mal avec le chargement de la durée dans une Réagir la composante suivant @AlexioVay solution ici est une réponse si vous êtes à l'aide de Réagir:
Cela suppose l'utilisation d'un
ref
pour votre composant audio classe dont vous aurez besoin pour cible leaudio
éléments pour votre play/pause gestionnaire(s).<audio />
élément:Puis dans votre
componentDidMount()
:Et enfin la
formatTime()
fonction:Avec cela, la durée de
h:mm:ss
format d'écran dès que l'audio src chargement des données. De la douceur.D'obtenir la fin de la lecture, il est nécessaire que "loop = false' avec l'événement "onended'. Si loop = true, onended ne fonctionne pas;)
Faire une playlist, vous devez définir loop = false pour utiliser le " onended de l'événement afin de jouer la chanson suivante.
pour la durée, si votre script est fait correctement, vous pouvez récupérer la durée de n'importe où. Si la valeur de la "durée" est NaN le fichier n'est pas trouvé par le navigateur. Si la valeur est "Infini" 'INF' c'est un streaming, dans ce cas, ajoute 1 mn par rapport au temps de lecture 'currentime'.
Pour * I. E c'est de la merde. Currenttime peut être supérieure à la durée, dans ce cas, vous ne:
var durée = (ce.currentime> ce.la durée)? c'.currenttime: ce.durée;
C'est (O_ °)
il est préférable d'utiliser l'événement comme celui-ci ...
Simplement utiliser
audioElement.duration
var audio = $('#audio')[0]; console.log('audio', audio.duration);
mais le résultat estNaN
setTimeout(function () { ... }, 10);
au lieu de l'exécuter tout de suite.