-->

Tag: Java

Come utilizzare MBROLA con FreeTTS in Java

by gurucoder on Jun.05, 2010, under Java

In generale il riconoscimento vocale puo essere logicamente suddiviso in due aspetti: Sintesi e Riconoscimento.
L` implementazione di un servizio TTS (Test To Speech) in Java puo essere realizzata utilizzando le JSAPI realizzate dalla Sun di cui ne esiste una implemntazione free denominata FreeTTS.
FreeTTS offre solo i servizi di Sintesi, ignorando completamente l` aspetto legato al riconoscimento vocale.

In fase di sintesi, FreeTTS offre un set di voci decisamente metalliche e poco gradevoli tra cui quella di default e` denominata kevin16. L` idea e` di dotare il nostro software dell` utilizzo anche di un set di voci piu` “umane” importate dalle librerie MBROLA.

Sebbene non tutte siano supportate da FreeTTS ecco di seguito il codice Java necessario allo scopo:

The jars are available in the FreeTTS download page in the FreeTTs Bin Zip File at

http://sourceforge.net/project/showfiles.php?group_id=42080&package_id=34183&release_id=311626

System Classpath + User Classpath

C:\Program Files\Java\jdk1.5.0_06\lib\jsapi.jar;
C:\Program Files\Java\jdk1.5.0_06\lib\cmulex.jar;
C:\Program Files\Java\jdk1.5.0_06\lib\mbrola.jar;
C:\Program Files\Java\jdk1.5.0_06\lib\freetts.jar;
C:\Program Files\Java\jdk1.5.0_06\lib\en_us.jar;
C:\Program Files\Java\jdk1.5.0_06\lib\cmutimelex.jar;
C:\Program Files\Java\jdk1.5.0_06\lib\cmudict04.jar;
C:\Program Files\Java\jdk1.5.0_06\lib\cmu_time_awb.jar;
C:\Program Files\Java\jdk1.5.0_06\lib\cmu_us_kal.jar;

User Path

C:\Program Files\Java\jdk1.5.0_06\lib
/**
* Copyright 2003 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*/
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
import com.sun.speech.freetts.audio.JavaClipAudioPlayer;
/**
* Simple program to demonstrate the use of the FreeTTS speech
* synthesizer. This simple program shows how to use FreeTTS
* without requiring the Java Speech API (JSAPI).
*/
public class FreeTTS
{
VoiceManager voiceManager;
Voice voice;
public FreeTTS() {
}

public void TTS(String words)
{
String voiceName = "mbrola_us3";
//String voiceName = "kevin16";
// System.out.println();
//System.out.println("Using voice: " + voiceName);
// The VoiceManager manages all the voices for FreeTTS.
voiceManager = VoiceManager.getInstance();
voice = voiceManager.getVoice(voiceName);
/* Voice[] voices = voiceManager.getVoices();
for (int i = 0; i < voices.length; i++) {
System.out.println("" + voices[i].getName()+ " (" + voices[i].getDomain() + " domain)");
}*/

if (helloVoice == null)
{
System.err.println("Cannot find a voice named " + voiceName + ". Please specify a different voice.");
System.exit(1);
}

// Allocates the resources for the voice.
voice.allocate();

//Synthesize speech.
voice.speak(words);

// Clean up and leave.
voice.deallocate();
// System.exit(0);
}
}
Leave a Comment :, more...

JTwitter , come interagire con Twitter tramite Java

by gurucoder on Aug.30, 2009, under Java

Mentre nel precedente post ho illustrato la libreria Skype4Java , quest’ oggi vi parlo di JTwitter. Si tratta di una libreria open source per la gestione del proprio account twitter da un’ applicazione scritta in Java. Il sito del produttore è questo da cui è possibile scaricare la libreria jtwitter.jar oltre che la documentazione ed il codice sorgente. L’aspetto entusiasmante di questa API è l’estrema facilità di utilizzo .duke_twitter

Ipotizzando di usare NetBeans come IDE per lo sviluppo del progetto, per realizzare un’ applicazione che acceda al proprio account Twitter e che possa utilizzare tutti i servizi della piattaforma, basta aggiungere il file jtwitter.jar all’interno della cartella relativa alle librerie del progetto.

L’uso della libreria è incredibilmente semplice, per utilizzarla basta importare la libreria winterwell.jtwitter.Twitter , in questo modo:

import winterwell.jtwitter.Twitter;

Il seguente codice non fa altro che aggiornare il proprio stato in Twitter:

String message = "Sto utilizzando Jtwitter";
String username = "usr";
String password = "pass";
boolean success ;
if (message.length() > 140) {
         message.substring(0, 140);
}
// Make a Twitter object
Twitter twitter = new Twitter(username, password);
// Set my status
Twitter.Status status = twitter.updateStatus(message);
if (status.getText().equals(message)) success = true;
else success = false;

Osservando il codice , si nota come tutto parta dalla classe Twitter che offre tutti i metodi per gestire l’interazione. Inoltre è stato necessario impostare un limite al numero di caratteri di cui un singolo messaggio possa essere composto , proprio perchè Twitter.com impone un limite ai tweets di 140 caratteri.
Un modo per visualizzare la timeline del nostro account è il seguente:

List<Status> userTimeline = twitter.getUserTimeline();
for ( int i = 0; i <userTimeline.size(); i++ ){
     System.out.println(userTimeline.get(i).getText());
}

In realtà è possibile accedere anche alla timeline pubblica semplicemente utilizzando il metodo getPublicTimeline().

3 Comments :, more...

Skype4Java, come utilizzare Skype in Java

by gurucoder on Aug.29, 2009, under Java

Skype4Java è una API completamente open source. Gli sviluppatori hanno realizzato una serie di metodi statici per gestire la maggiorparte delle funzionalità offerte da Skype.  E’ possibile scaricare la libreria da questo indirizzo. Per presentare un esempio , ipotiziamo di utilizzare NetBeans come IDE di sviluppo . Una volta terminato il download , è necessario importare l’intera cartella “release” nelle librerie utilizzate nel progetto .skype_duke

E’ di vitale importanza, per rendere possibile l’esecuzione del programma che stiamo per realizzare, di inserire una direttiva alla virtual machine di questo tipo: -Djava.library.path=lib  dove lib è la cartella in cu è presente il file swt-win32-3232.dll . In particolare in NetBeans, la direttiva viene posta in questo modo : tasto destro sul nome del progetto -> Properties -> Run -> VMOptions .

Passiamo al codice, il primo passo è di importare com.skype.Skype nella classe che stiamo realizzando:

import com.skype.Skype ;

Il primo blocco di codice si occupa di visualizzare i dati dell’ utente attualmente connesso ed in più imposta sia la città che la frase di presentazione del profilo stesso:

Profile profilo = Skype.getProfile();
System.out.println("ID:" + profilo.getId());
System.out.println("Sesso:" + profilo.getSex());
System.out.println("Città:" + profilo.getCity());
System.out.println("Stato:" + profilo.getStatus());

profilo.setCity("Napoli");
profilo.setMood("sto testando le API Skype");

Per visualizzare l’elenco dei contatti :

Friend[] contatti = Skype.getContactList().getAllFriends();
for (int i = 0; i < contatti.length; i++) {
    Friend contatto = contatti[i];
    System.out.println(contatto.getId() + " -> " + contatto.getFullName());
}

Per creare un nuovo gruppo:

Skype.getContactList().addGroup("Nuovo Grupppo");

E’ possibile anche inoltra messaggi di chat , effettuare telefonate ed inviarre un sms ad un contatto. Di seguito vi presento come fare:

Inoltro nuovo messaggio di chat ad un certo contatto, ipotiziamo di inoltrarlo all’utente “Pippo” :

Friend contatto = Skype.getContactList().getFriend("Pippo");
if (null != contatto && contatto.getOnlineStatus().equals(User.Status.ONLINE))
   contatto.send("Messaggio mandato tramite Skype4Java API");
else
   System.out.println("Il contatto non è al PC ");

Avvio di una chiamata :

Friend contatto = Skype.getContactList().getFriend("pippo");
if (null != contatto && contatto.getOnlineStatus().equals(User.Status.ONLINE))
   contatto.call();
else
   System.out.println("Il contatto non è al PC ");

Inoltro di un SMS :

Skype.sendSMS("134567890", "testo del nuovo sms");

Vi segnali infine il link delle API Skype dal sito ufficiale e il sito in cui trovate il codice sorgente delle API con una breve descrizione dei metodi. Vi consiglio di utilizzare questo ultimo link come Documentazione dato che gli sviluppatori non hanno realizzato nessuna documentazione ufficiale riguardo a SKype4Java.

Leave a Comment :, more...

Popolare una HashMap in Java

by gurucoder on Aug.22, 2009, under Java

javaIl post di oggi si pone l’obbiettivo di presentare un modo semplice ed intuitivo di popolare una HashMap in Java.

Premesso che per “Tabella di Hashing” si intende una struttura dati di tipo associativo in cui c’è un associazione univoca tra chiave e relativo valore. Per poter accedere un certo valore bisogna conoscerne la relativa chiave. Senza entrare troppo nei dettagli teorici, l’uso di tabelle di hashing risulata conveniente in caso di operazione di ricerca, dato che il tempo di ricerca di una qualunque chiave all’interno della tabella è costante ( in termini matematici è un  O(1) ).

Java mette a disposizione del programmatore una classe che implementa le funzionalità di una tabella di hashing tramite la classe “HashMap”. Di seguito ho realizzato una classe che illustri l’utilizzo delle “Map” :

import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class HashMapTest {
     private HashMap map ;
     public HashMapTest() {
           map = new HashMap();
     }

     public HashMap setMap() {

          String nome = "Andrea";
          String anno = "2009";
          map.put("k1", nome);
          map.put("k2", anno);
          return map ;
     }
 public void printMapContent(HashMap m) {
          Set set= map.keySet() ;
          Iterator iter = set.iterator () ;
          while ( iter.hasNext () )  {
            System.out.println ( map.get ( iter.next () ) ) ;
          }
     }
    public static void main (String args[]){
          HashMapTest test = new HashMapTest();
          HashMap resMap = test.setMap();
          test.printMapContent(resMap);
     }
}// :~

Osservando il codice si nota come una volta creato l’oggetto “map” , istanza della classe HashMap , ci siano due metodi che vengono richiamati , “put()” e “get()” rispettavamente per inserire una nuova entry nella tabella e l’ altro per ottenere il valore della entry selezionata  a partire dalla chiave inserita.

Il metodo “setMap” realizza il riempimento della struttura dati tramite il metodo put() e ritorna un riferimento alla tabella appena aggiornata. In particolare la chiamata di put() avviene in questo modo: put( “NOME_CHIAVE” , “VALORE ASSOCIATO”), dove entrambi i parametri di ingresso sono di tipo String.

Il riferimento ottenuto da setMap() , viene poi utilizzato dal metodo printMapContent() per stampare a video il contenuto della tabella. In questo metodo viene richiamata la funzione “get” che prende come parametro di ingresso una stringa che rappresenta il nome della chiave della entry ricercata e ritorna il valore associato quindi la chiamata avviene come segue: get( “NOME_CHIAVE”).

Entrambi i metodi realizzati, vengono utilizzati nel metodo main() della classe. Provando ad eseguire il codice, il risultato desiderato sarà:

Andrea
2009

Al prossimo post!


Leave a Comment : more...

Cerchi qualcosa?

Usa questo form per cercare argomenti in questo blog:

Non riesci a trovare quello che cerchi? Lascia un commento in un post oppure contattami per risolvere il problema!

Puoi trovarmi su Twitter come @superbre