用Java实现IRC文本到语音转换
2008-01-05 09:44:08 来源:WEB开发网核心提示:由于IRC是一个完全实时的聊天系统,所以你将很难从中受益,用Java实现IRC文本到语音转换,除非你能密切关注聊天时对话产生的顺序,不幸的是,?cmu_time_awb.jar ?cmu_us_kal.jar ?cmulex.jar ?cmutimelex.jar ?en_us.jar ?freetts.jar ?pi
由于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]);
}
}
更多精彩
赞助商链接