Je suis en cours d'exécution Ubuntu 10.10 à l'aide de Java 6 et ne peut pas obtenir de grosses données à la sortie de l'audio. Je l'ai essayé maintenant sur 3 ordinateurs différents et j'ai même demandé à un copain de l'essayer sur son PC Ubuntu et il avait le même problème. Il n'y a absolument aucune erreur qui sont affichées, après avoir obtenu le MBrola, je n'obtiens plus l'avertissement de NO MBROLA VOIES détectée. bla bla bla .. p>
Utiliser le même ordinateur, j'ai dirigé une boîte virtuelle et j'ai commencé Windows XP, j'étais en mesure d'obtenir de l'audio lors de l'exécution du helloworld.jar et de ttshelloworld.jar, mais le freets.jar est toujours silencieux lorsque j'essaie de saisir mon propre texte . P>
commande que j'utilise. p>
Java -Jar lib / freets.jar -Text Bonjour p> blockQuote>
Lorsque je frappe Entrée, il démarre et me donnait le message d'avertissement MBRola manquant, mais maintenant, il suffit de rester là jusqu'à ce que je ctrl-c pour l'arrêter. P>
Je ne comprends pas ce que je fais mal et pourquoi personne d'autre n'a d'autre problème, lorsque je l'exprègne sur chaque ordinateur, cela fonctionne quelque peu sur Windows. Quelqu'un peut-il m'aider? P>
merci, p>
Jean p>
3 Réponses :
Je ne sais pas si vous avez déjà réussi à résoudre celui-ci, mais j'ai couru dans le même problème (Ubuntu 10.10 / Javase6). Après une enquête sur la source de Freetts, j'ai trouvé le coupable, une impasse, dans com.sun.speech.freetts.audio.javaseamingaudiovlayer. Cette impasse se produit lorsqu'une ligne est ouverte et la ligne est du type org.classpath.getdea.pulseaudio.pulsayosourcedataline (qui est susceptible d'être la valeur par défaut dans Ubuntu 10.10 W Javase6). Puisque vous souhaiteriez toujours ouvrir une ligne pour obtenir de l'audio, cette impasse se produira toujours.
La cause de cette impasse réside dans le fait que dans le Javastreamingaudioplayer une hypothèse est faite à propos de la ligne, à savoir que tous les linlistenants seront Notifié d'un lingeEvent de type ouvert du même thread que la ligne.Open () a été appelé ou après l'ouverture de la ligne (et l'appel à la ligne () peut revenir). Ce n'est pas le cas pour la pulseudosourcedataline; Il appelle d'abord tous les linélistenants du fil de l'événement Pullevio, attend tous qu'ils reviennent, puis reviennent de l'appel ouvert. Avec la synchronisation de JavaSraseMingAudiaplayer, sur l'appel de la ligne.Open () et le traitement d'un linelisteneur spécifique Quelle tâche est de voir si la ligne est ouverte, l'impasse se produit. P>
La solution que j'ai choisie pour la résolution Ce problème est de mettre en œuvre un audioplayer qui n'a pas ce problème. J'ai essentiellement copié JavaSTAmingAudioPlayer et modifié les blocs de synchronisation sur la ligne 196 et la ligne 646 (source complète pour référence: http://www.javadocepexamples.com/java_source/com/sun/speech/freetts/audio/javascaseamingaudioplayer.java.html ). P>
System.setProperty("com.sun.speech.freetts.voice.defaultAudioPlayer", "classpath.to.your.AudioPlayer");
Quand je vois ce genre de réponse, je veux juste mourir. Pourquoi mon Dieu pourquoi? Pourquoi n'ai-je pas ce genre d'esprit intelligent? Merci pour la génialité :-)
Je suppose avoir le même problème sur Ubuntu 12.04 / OpenJDK-6, l'exécution est bloquée dans la voix.Alloquer () sans erreur et aucune réponse. J'ai essayé d'utiliser l'Oracle / Sun JDk-6 au lieu d'OpenJDK, et cela a fonctionné bien. P>
P.s. Beau guide pour installer Sunjdk sur Ubuntu et configurer par défaut http://www.devsniper.com/ubuntu- 12-04-INSTALL-SUN-JDK-6-7 / P>
Je suis un étudiant qui tente de faire de Freatts travailler sur son Ubuntu pendant une semaine. Et enfin, j'ai trouvé la réponse ici: merci beaucoup hakvroot!
Votre réponse était parfaite mais vous n'avez pas mis votre mise en œuvre et cela m'a pris une heure pour comprendre ce qui se passait dans la classe JavaSTAmingAudioPlayer. Pour aider les autres personnes comme moi qui ne sont pas utilisées dans la "plongée" dans un code Java complètement inconnu (je suis toujours un étudiant), je vais mettre ici mon code et j'espère que cela aidera les autres personnes :). P> < P> Premièrement, une explication plus détaillée: autour de la ligne 152, le Javastreamingaudioplayer ouvre une ligne. Cependant, cette opération peut nécessiter un certain temps afin de l'utiliser, il veut vérifier qu'il est ouvert. Dans la mise en œuvre actuelle, la solution utilisée consiste à créer une linelistener à l'écoute de cette ligne, puis à dormir (à l'aide de la méthode d'attente () de threads). P>
Le linelistener "réveillera" le fil principal en utilisant une notification () et le fera que lorsqu'il reçoit un lingeEvent de type "ouvert" qui garantira que la ligne a été ouverte. p>
Cependant, comme expliqué ici le problème est que la notification est que la notification est que la notification est jamais envoyé à cause du comportement spécifique de la dataline utilisée par Ubuntu. p>
donc j'ai supprimé les parties synchronisées, attendez () et notifier () les parties du code mais en tant que hakvroot, alors votre JavastreamingaudiaPlayer pourrait essayer d'utiliser votre Ligne avant qu'il ne soit ouvert: vous devez attendre la confirmation avec un nouveau mécanisme pour arrêter le Javastreamingaudioplayer et la réveiller plus tard, lorsque la confirmation est arrivée. P>
J'ai donc utilisé le sémaphore que Havkroot utilisé (voir Javadoc pour explications sur ce système de verrouillage) initié à 1 pile: p>
Lorsque la ligne est ouverte, elle acquiert une pile (donc 0 reste) p> li>
Lorsqu'il souhaite utiliser la ligne, il essaie d'en acquérir une autre (donc il est arrêté) p> li>
Lorsque l'auditeur reçoit l'événement que nous recherchons, il libère le sémaphore p> li>
Cela libère le Javastreamingaudioplayer qui peut aller pour la partie suivante p> li>
N'oubliez pas de libérer à nouveau le sémaphore afin qu'il a de nouveau 1 pile pour la ligne suivante à ouvrir p> li> ul>
et voici mon code: p>
Déclarez une variable de sémaphore: p> initier dans le constructeur: p> puis la première partie à remplacer (voir Hakvroot pour voir où le mettre): p> et la seconde partie: p>
Merci beaucoup pour une explication aussi claire. J'ai roulé votre solution dans ma copie de Freetts. Vous pouvez voir / utiliser le patch ici: Github.com/timabell/freetts/commit/... A> - L'étudiant est maintenant l'enseignant :-) J'ai testé le fichier Jar HelloWorld et avec ce patch et Freets ne pend plus sous OpenJDK.
@Tim beau travail. J'ai signalé le bogue à Ubuntu ici . S'il vous plaît jeter votre vote dessus.
Terminé! (Si je comprends le tableau de bord que je ne suis pas convaincu de parfois). Merci @hrj
Moi aussi, je suis tombé sur ceci comme vous pouvez le voir ici: bugs.luauchpad.net/communication/+bug / 920734