2012年5月29日 星期二

用NetBeans開JavaFX新專案

1.開啟NetBeans IDE

2.依序點選File → New Project

3.點選JavaFX → JavaFX Application → Next

4.輸入專案名稱:HelloProject

5.在專案名稱(HelloProject)上按下滑鼠右鍵 → 選Properties

6.在專案屬性視窗中點選Sources,確認Source/Binary Format為JDK7

7.一樣在專案屬性視窗中點選Libraries → Manage Platforms

8.在Java Platform Manager視窗中確認Default JavaFX Platform項目中有JavaFX頁籤,及JavaFX SDK Home、Runtime、JavaDoc皆有設定

9.按下ok

10.接著要開始執行HelloProject專案,依序點選Run → Run Main Project

11.執行成功後會出現一個Hello World!的視窗

12.按下Say 'Hello World'後,在NetBeans的Task頁籤視窗中便會出現Hello World!字串(按一下出現一次)

設定JavaFX 2.1的CLASSPATH

如果需要在命令提示字元(command-line)下compile及run JavaFX的程式 就需先設定CLASSPATH,讓compiler知道JavaFX的runtime library的正確位置。

set JAVAFX_HOME=C:\Program Files\Oracle\JavaFX 2.1 SDK

set JAVA_HOME=C:\Program Files\Java\jdk1.7.0_04

set CLASSPATH=%JAVAFX_HOME%\rt\lib\jfxrt.jar

JavaFX預設的home directory(CLASSPATH)

C:\Program Files\Oracle\JavaFX 2.1 SDK

(JavaFX 2.1 SDK's home directory)

2012年5月8日 星期二

將FreeTTS聲音存成wav檔


package tw.feisty.server.test;


import java.text.SimpleDateFormat;
import java.util.Date;

import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
import com.sun.speech.freetts.audio.SingleFileAudioPlayer;

public class TextToSpeech {

public static void convertTextToSpeech(Voice voice, String message) {

boolean status = true;

Date date = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmssSS");

String dateString = sdf.format(date);

//System.out.println(dateString);

//text為傳入的字串
String text = new String(message);

System.setProperty("com.sun.speech.freetts.voice.defaultAudioPlayer", "com.sun.speech.freetts.audio.SingleFileAudioPlayer");

byte[] fbytes = text.getBytes();

if(fbytes == null) {

System.out.println("no bytes");

//直接中斷程式
System.exit(1);
}

SingleFileAudioPlayer audioFile;
try {

//文字發聲起動
voice.speak(message);

audioFile = (SingleFileAudioPlayer) voice.getDefaultAudioPlayer();
System.out.println("產生" + text + "的發音檔");
audioFile.write(fbytes);
}
catch(Exception e) {

System.out.println(text + "轉檔失敗");
e.printStackTrace();

status = false;
}

voice.deallocate();

if(status == true) {
try {

System.out.println("檔案複製開始");
String copyCommand = "copy .\\freetts.wav .\\wave\\" + dateString + ".wav";
Runtime.getRuntime().exec("cmd.exe /c" + copyCommand);
System.out.println("檔案複製完成");
}
catch(Exception e) {

e.printStackTrace();

status = false;
}
}

System.out.println("status: " + status);
}

public static void main(String[] argv) {

String message = "i get up at six o'clock. i rub my eyes. i stretch out.";

VoiceManager vm = VoiceManager.getInstance();

Voice voice = vm.getVoice("kevin16");
if(voice != null) {

voice.allocate();
convertTextToSpeech(voice, message);
}
else {

//無法取得發聲引擎
System.out.println("voice is null");
}


}
}

使用FreeTTS時出現「System property "mbrola.base" is undefined. Will not use MBROLA voices.」


1.如下圖:
2.請刪除「mbrola.jar」

FreeTTS(語音合成引擎)所需jar檔

Struts2(Version 2.3.3)必備lib檔

2012年5月7日 星期一

ExtJS menu顯示二種

1.將menu直接顯示在元素上 menu.show(this);
2.顯示在滑鼠所在的x,y上 menu.showAt(e.getXY());

ExtJS將Element事件傳入click事件

ExtJS對某一個class綁定事件

Ext.select(".spellChecker").on("click", function () { alert("hi"); });