java

位置:IT落伍者 >> java >> 浏览文章

用Java实现IRC文本到语音转换


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

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

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

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

FreeTTS库可以在fre下载为了连接到IRC服务器上你需要在/pircbotphp下载PircBot Java IRC API

当你下载了所需的两个库之后建立一个lib目录然后将下列jar文件拷贝到里面

·cmu_time_awbjar

·cmu_us_kaljar

·cmulexjar

·cmutimelexjar

·en_usjar

·freettsjar

·pircbotjar

现在写IRC机器人已经变成了一个简单的任务因为这些库将为你完成多数的困难工作建立一个名为SpeechBotjava的文件

import orgjibblepircbot*;

import comsunspeechfreetts*;

import comsunspeechfreettsaudio*;

import javaxsoundsampled*;

import javaioFile;

public class SpeechBot extends PircBot {

private Voice voice;

public SpeechBot(String name) {

setName(name);

// Choose the voice for the speech synthesizer

// 选择语音合成器的话音

String voiceName = kevin;

VoiceManager voiceManager =

VoiceManagergetInstance();

voice = voiceManagergetVoice(voiceName);

if (voice == null) {

Systemoutprintln(Voice not found);

Systemexit();

}

voiceallocate();

// Set up the output format

// 设置输出格式

AudioPlayer voicePlayer = new JavaClipAudioPlayer();

voicePlayersetAudioFormat(new AudioFormat(

false true));

voicesetAudioPlayer(voicePlayer);

}

public void onMessage(String channel String sender

String login String hostname String message) {

// Send all IRC messages to the voice

synthesizer

// 发送所有的IRC消息到语音合成器

message = messagetrim();

String input = sender + on + channel +

says: + message;

voicespeak(input);

}

public static void main(String[] args) throws

Exception {

if (argslength < ) {

Systemoutprintln(Usage: java SpeechBot

);

Systemexit();

}

SpeechBot bot = new SpeechBot(SpeechBot);

nnect(args[]);

botjoinChannel(args[]);

}

}

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

javac classpath ;/lib/pircbotjar;/lib/freettsjar SpeechBotjava

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

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

java classpath ;/lib/pircbotjar;/lib/freettsjar SpeechBot  #irchacks

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

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

Jibbler on #irchacks says: Hello world!

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

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

OReilly Media出版了IRC Hacks

               

上一篇:如何在Java中使用Robot类

下一篇:Java扫雷算法