站内搜索: 请输入搜索关键词

当前页面: 开发资料首页Java 专题让你的Java会说话-用Java实现IRC文本到语音转换

让你的Java会说话-用Java实现IRC文本到语音转换

摘要: 让你的Java会说话-用Java实现IRC文本到语音转换
内容: Internet Relay Chat(IRC)是一个被全世界数百万人所使用的网络聊天系统。多年以来,它为朋友、程序员、大学甚至银行之间的讨论、交换意见和协作研究提供了方便。

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接
作者:Paul Mutton;jlearner(作者的blog:http://blog.matrix.org.cn/page/jlearner)
原文:http://www.onjava.com/pub/a/onjava/2004/09/08/IRCinJava.html
译文:http://www.matrix.org.cn/resource/article/44/44237_Text+Speech+Java+IRC.html
关键字:Text;Speech;Java;IRC

由于IRC是一个完全实时的聊天系统,所以你将很难从中受益,除非你能密切关注聊天时对话产生的顺序。不幸的是,这将会导致生产力的低下,这就是为什么很多雇主不赞成使用IRC的原因。然而,如果IRC得到了恰当的使用,它能够使雇员与远程的同事们一起高效地工作,不管他们是位于地球的另一端,或者只是在隔壁的大厦。像IRC这样的实时群组聊天系统使组织会议(甚至可以实现视频会议)、提问问题或是商量去哪里吃午餐这样的小事都变得更加容易。

很多老板也许会争辩说,在工作场所提高生产力的最显而易见的方法是完全避免使用IRC。在某些情况下这也许是正确的,但是在很多场合IRC可以是非常有用的。当你使用IRC进行交流时——即使是跟同一办公室中的某个人——在别处的同事将能够看到你们两个谈话的内容。当你不在办公桌旁的时候,你也可以了解同事们在讨论什么。这是电话或常规的点对点聊天系统所不容易实现的两个重要方面。

理想的解决方案是设计一种无需经常查看是否有新消息就可以明了IRC对话的方法。只要你的IRC频道不是很繁忙,那么一个文本语音转换系统将会提供给你优秀的解方案。它会将新消息自动朗读出来,这样你就可以继续工作,只在有绝对必要的时候才转移注意力到IRC上面来。

本文将展示如何建立一个跨平台的IRC机器人(一个自动化的客户端),它使用FreeTTS Java语音合成库来将IRC消息转换成听得见的语音。

FreeTTS库可以在freetts.sourceforge.net下载。为了连接到IRC服务器上,你需要在www.jibble.org/pircbot.php下载PircBot Java IRC API。

当你下载了所需的两个库之后,建立一个lib目录,然后将下列.jar文件拷贝到里面。
·cmu_time_awb.jar
·cmu_us_kal.jar
·cmulex.jar
·cmutimelex.jar
·en_us.jar
·freetts.jar
·pircbot.jar

现在,写IRC机器人已经变成了一个简单的任务,因为这些库将为你完成多数的困难工作。建立一个名为SpeechBot.java的文件:
import org.jibble.pircbot.*;
import com.sun.speech.freetts.*;
import com.sun.speech.freetts.audio.*;
import javax.sound.sampled.*;
import java.io.File;

public class SpeechBot extends PircBot {

private Voice voice;

public SpeechBot(String name) {
setName(name);

// Choose the voice for the speech synthesizer.
// 选择语音合成器的话音
String voiceName = "kevin16";
VoiceManager voiceManager =
VoiceManager.getInstance();
voice = voiceManager.getVoice(voiceName);

if (voice == null) {
System.out.println("Voice not found.");
System.exit(1);
}

voice.allocate();

// Set up the output format.
// 设置输出格式
AudioPlayer voicePlayer = new JavaClipAudioPlayer();
voicePlayer.setAudioFormat(new AudioFormat(8000,
16, 1, false, true));
voice.setAudioPlayer(voicePlayer);
}

public void onMessage(String channel, String sender,
String login, String hostname, String message) {
// Send all IRC messages to the voice
synthesizer.
// 发送所有的IRC消息到语音合成器
message = message.trim();
String input = sender + " on " + channel + "
says: " + message;
voice.speak(input);
}

public static void main(String[] args) throws
Exception {
if (args.length < 2) {
System.out.println("Usage: java SpeechBot
");
System.exit(1);
}
SpeechBot bot = new SpeechBot("SpeechBot");
bot.connect(args[0]);
bot.joinChannel(args[1]);
}

}


现在可以编译IRC机器人了。要确定在类路径中包含了必需的.jar文件:

javac -classpath .;./lib/pircbot.jar;./lib/freetts.jar
SpeechBot.java

注意这种指定类路径的方式只在Windows系统下有效。在Unix/Linux系统上,你需要使用冒号(:)而不是分号(;)来作为分隔符。在运行IRC机器人的时候你也需要指定类路径。

当运行机器人的时候,你需要提供两个命令行参数来告诉它连接哪个IRC服务器以及加入哪个IRC频道:

java -classpath .;./lib/pircbot.jar;./lib/freetts.jar
SpeechBot irc.freenode.net #irchacks

注意:确定你的目录名不包含任何空格,因为该版本的FreeTTS在从含有空格的路径中读取自身代码时似乎存在问题。

当你启动了机器人之后,它将立刻加入指定的IRC频道(范例中是在freenode IRC网络上的#irchacks)。现在你可以向频道中发送一条消息来测试机器人了。如果一切都设置正确,你就会听见机器人对你说:

"Jibbler on #irchacks says: Hello, world!"

现在你可以在收听IRC的同时继续努力工作了!

Paul Mutton是PircBot IRC框架及另外一些Java程序的作者,这些程序可以在他的网站上找到。

在2004年7月,O'Reilly Media出版了IRC Hacks。 Java, java, J2SE, j2se, J2EE, j2ee, J2ME, j2me, ejb, ejb3, JBOSS, jboss, spring, hibernate, jdo, struts, webwork, ajax, AJAX, mysql, MySQL, Oracle, Weblogic, Websphere, scjp, scjd Internet Relay Chat(IRC)是一个被全世界数百万人所使用的网络聊天系统。多年以来,它为朋友、程序员、大学甚至银行之间的讨论、交换意见和协作研究提供了方便。

版权声明:任何获得Matrix授权的网站,转载时请务必保留以下作者信息和链接
作者:Paul Mutton;jlearner(作者的blog:http://blog.matrix.org.cn/page/jlearner)
原文:htt
↑返回目录
前一篇: 轻松从VB转向基于Swing的开发平台
后一篇: 利用非正式特性创新Swing六大技巧