diff options
| author | Anthony Towns <aj@erisian.com.au> | 2010-09-05 20:49:34 +1000 | 
|---|---|---|
| committer | Anthony Towns <aj@erisian.com.au> | 2010-09-05 20:49:34 +1000 | 
| commit | ddc83b4c401be965a9947782becf20cc8c54e6a2 (patch) | |
| tree | 3fa313271f3c3e42ca9cc76f8cca1937067ee907 /ao-tools/altosui/AltosVoice.java | |
| parent | afea6c264c5ebf12f1d629bd4bc724da86d11b7a (diff) | |
| parent | 3d49d5f69b41c27003dbc5ccf1899014bd13bd99 (diff) | |
Merge branch 'master' of git://git.gag.com/fw/altos
Diffstat (limited to 'ao-tools/altosui/AltosVoice.java')
| -rw-r--r-- | ao-tools/altosui/AltosVoice.java | 21 | 
1 files changed, 19 insertions, 2 deletions
diff --git a/ao-tools/altosui/AltosVoice.java b/ao-tools/altosui/AltosVoice.java index ebe9d5a8..ac13ee14 100644 --- a/ao-tools/altosui/AltosVoice.java +++ b/ao-tools/altosui/AltosVoice.java @@ -27,6 +27,7 @@ public class AltosVoice implements Runnable {  	Voice				voice;  	LinkedBlockingQueue<String>	phrases;  	Thread				thread; +	boolean				busy;  	final static String voice_name = "kevin16"; @@ -35,15 +36,30 @@ public class AltosVoice implements Runnable {  			for (;;) {  				String s = phrases.take();  				voice.speak(s); +				synchronized(this) { +					if (phrases.isEmpty()) { +						busy = false; +						notifyAll(); +					} +				}  			}  		} catch (InterruptedException e) {  		}  	} +	public synchronized void drain() throws InterruptedException { +		while (busy) +			wait(); +	} +  	public void speak_always(String s) {  		try { -			if (voice != null) -				phrases.put(s); +			if (voice != null) { +				synchronized(this) { +					busy = true; +					phrases.put(s); +				} +			}  		} catch (InterruptedException e) {  		}  	} @@ -58,6 +74,7 @@ public class AltosVoice implements Runnable {  	}  	public AltosVoice () { +		busy = false;  		voice_manager = VoiceManager.getInstance();  		voice = voice_manager.getVoice(voice_name);  		if (voice != null) {  | 
