7
votes

Jlayer - Pause et Consume Song

J'ai remarqué que beaucoup de sujets étaient sur la pause / la reprise d'un MP3 en utilisant jlayer , afin d'aider tout le monde, j'ai fait toute une classe entière conçue pour ça! S'il vous plaît voir la réponse ci-dessous.

Remarque: c'était pour mon usage personnel, il peut donc ne pas être aussi robuste que certaines personnes espèrent. Mais ce n'est pas si difficile de faire des modifications simples, en raison de sa simplicité.


12 commentaires

La question devrait ressembler à une question même si vous l'avez créée pour partager votre code.


La première phrase explique que.


Imo, vous devriez organiser votre texte de question comme une vraie question (avec signe de question et truc =)). Les explications ne sont pas nécessaires. La question actuelle du texte est plus appropriée pour une réponse.


Meh, je suppose que je pourrais faire ça. Mais je ne pense pas qu'il soit vraiment nécessaire d'envisager que je faisais juste une note sur les questions que les gens ont demandé, similiaire à ce sujet.


Eh bien, vous pouvez publier votre code comme une réponse pour des questions particulières. Pourquoi créer un nouveau? Seuls peu de gens cherchent une réponse et d'autres qui attendent simplement que des personnes comme vous pour y répondre.


Confus: Jlayer - Où est-il utilisé? Ou une faute de frappe?


Kleopatra: Jlayer est une bibliothèque faite par Javazoom, qui vous permet de lire des fichiers MP3. Et Aleksandr Kravets: Je pense que ce serait plus facile si je faisais un nouveau sujet plutôt que de se rendre individuellement sur chaque question et de poster la même réponse pour toutes.


Merci - Confuse car Core Java a un composant Javax.swing.jlayer (à partir de JDK7)


Tout bon. : P J'ai fait cela parce que j'ai trouvé que beaucoup de gens voulaient savoir comment faire une pause et reprendre en utilisant Jlayer (de regarder toutes les questions similaires à ceci). Ce n'est pas la meilleure solution, car Durandel a déclaré, mais c'est la solution la plus simpliste pour obtenir un résultat très décent.


Si vous dites que beaucoup de gens ont des problèmes avec cela, cela signifierait qu'il y a des questions à ce sujet. Pourquoi ne mettez-vous pas votre code dans les réponses à ces questions?


Denis Tulskiy: Ce ne serait pas une bonne idée compte que la plupart de ces questions sont inactives à compter d'aujourd'hui, et il serait très illogique de poster exactement la même réponse sur 30 questions différentes. Il serait beaucoup plus pratique de poster 1 réponse pour ma propre question pour que les gens puissent l'utiliser comme une référence.


Vous savez, notifie donc que l'utilisateur sur de nouvelles réponses, il n'y a donc rien d'illogique dans la publication. L'affichage 30 réponses permet aux utilisateurs de savoir que vous avez trouvé une solution. Au moins, vous devriez poster un lien vers cette question au lieu de texte intégral.


3 Réponses :


3
votes
player.resume();

5 commentaires

Vous n'êtes pas pause le joueur, vous le tuez et créez un nouveau. En outre, il ne continue pas à partir de l'endroit où il s'est arrêté, mais une quantité arbitraire d'octets plus tard (en fonction de la manière dont la tampon bufferedInputStream est à l'arrêt). Lorsque "reprendre", vous positionnez le flux quelque part , pas à un en-tête de cadre valide (Jlayer s'oppose généralement à cela, sauf si 0xFFFX apparaît dans les données du flux, dans ce cas, il sera Crash ). S'appuyant sur FileInputStream.Available () Pour obtenir la longueur du fichier est également très discutable ... et pas très flexible, si vous voulez jouer à autre chose qu'un fichier.


Il y a beaucoup de solutions afin de résoudre 1 problème; C'est une solution. Je crois que c'est la voie la plus simpliste et je suis conscient que la méthode .Available () renvoie une estimation de la quantité d'octets laissée dans le flux, et lorsque je l'ai testé, il a repris littéralement moins d'une demi-a deuxième d'où il a été mis en pause. Vous devez avoir des résultats différents lorsque vous l'avez testé, clairement.


C'est bien aussi longtemps que vous êtes au courant des limitations de votre solution. Il devrait faire le travail dans la plupart des cas. J'ai seulement commenté parce que vous voudrez peut-être améliorer les problèmes que j'ai mentionnés (s'il vous plaît ne le prenez pas personnellement). La précision "cible" dépend de la taille du tampon choisi pour le bufferedInPutStream et le débit des flux. Si l'utilisateur du code a décidé d'utiliser un tampon plus grand (disons 256kb), il sauterait plusieurs secondes. Vous pourriez-vous aborder en comptant vraiment comment les octets peuvent être épuisés par la bufferedInputStream, bien sûr, il augmente la complexité du code.


Je suis au courant et j'apprécie votre critique, mais je me sens comme le moyen le plus simple d'obtenir un résultat très décent. Quand j'espertitais les autres réponses aux questions similaires de celui-ci, dont aucun n'a affalé de code, il semblait que leur processus était trop complexe et difficile, et la majorité des gens ne comprenaient pas ce que cela signifie. En regardant le code dans ma solution, c'est très simple et il n'y a pas de section que personne ne devrait pas comprendre.


Bonjour, Nice Post, j'ai 1 question: qu'est-ce que vous utilisez FIS.SKIP (POS) lorsque les paramètres sont -1? Si je mets 0 ou 50 par paramètres? Merci!



10
votes

Une implémentation très simple d'un joueur qui fait vraiment une pause de lecture. Il fonctionne à l'aide d'un fil séparé pour lire le flux et en disant le thread du lecteur si / quand de pause et de reprendre. XXX


0 commentaires

1
votes

Bien que cette question ait lieu de quelques années maintenant, vous devriez remarquer que cette solution ne fonctionnera pas avec la nouvelle version de Jlayer et la AdvancedPlayer !

Advancedplayer -> Public Boolean Play (Int Cadres ) -> Le conditionnel xxx

doit être réintroduit, car sinon la lecture s'arrête après une image jouée.

EDIT: < P> Il semble que depuis Java 7, ils manipulent les DaemonThreads empêchent le CV de travailler. Il suffit de supprimer le xxx

pour fonctionner à nouveau!


0 commentaires