You read about them in science fiction, you see them in the movies, and you've have dreamed of using them—machines that talk to you, listen to you and take your commands. Speech-based applications can make life more efficient, faster, and maybe add a little pep to the monotony of the everyday grind. The essential component in of these machines are based on speech technology.
Even though computer-based speech technology was first created in the latter half of the 1950s, it made little progress due to the cost and availability of equipment. Speech technology today has become more affordable and is being widely deployed in fields like security systems, medical systems, voice response systems, dictation systems, and in assistive technology for the disabled.
Most of the early work and applications using speech were done using C, C++, and other native languages. Now that speech applications need to be integrated with Web-based applications, Java has become the language of choice in which to build them.
The Java Speech API
The Java Speech API outlines standards and guidelines as to how speech applications can be built to inter-operate with each other and on all Java compatible platforms. As such, it provides the API and functionality to build the base for speech applications.
Features
* Converts speech to text
* Converts text and delivers them in various formats of speech
* Supports events based on the Java event queue
* Easy to implement API interoperates with multiple Java-based applications like applets and Swing applications
* Interacts seamlessly with the AWT event queue
* Supports annotations using JSML to improve pronunciation and naturalness in speech
* Supports grammar definitions using JSGF
* Ability to adapt to the language of the speaker
Hello World
To show you how the speech API works, this article walks you through a simple program. To run the sample program, you will need a Java implementation that supports the Java Speech API. This example uses CloudGarden's TalkingJava SDK (although you could also use FreeTTS; See 'Running the demo applications' to use FreeTTS). You can download a 30-day trial of the implementation here. Use the setup to install the application.
There are two files you need for developing your speech applications—cgjsapi.jar and cgjsapi.dll. Before starting work with the samples, make sure that the cgjsapi.dll file is available in your PATH and that the cgjsapi.jar file is available in your CLASSPATH:
TellTime.java:
This simple program demonstrates the working of the Speech API
by reading out the system time.
package speechdemo;
import javax.speech.*;
import javax.speech.synthesis.*;
import java.util.*;
public class TellTime {
public static void main(String[] args) {
try {
Calendar calendar = new GregorianCalendar();
String sayTime = "Its " +
calendar.get(Calendar.HOUR) + " " +
calendar.get(Calendar.MINUTE) + " " +
(calendar.get(Calendar.AM_PM)== 0 ? "AM" : "PM");
Synthesizer synth = Central.createSynthesizer(null);
synth.allocate();
synth.resume();
synth.speakPlainText(sayTime,null);
synth.waitEngineState(Synthesizer.QUEUE_EMPTY);
synth.deallocate();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Open Source is good idea for sharing our knowledge, because knowledge is belong to the world and not for sale.
Monday, June 25, 2007
The Java Speech API: A Primer on Speech Applications
Friday, June 1, 2007
Mobile Java 3D Tips, Tricks & Code
This example is based on a previous example entitled "MascotWorld" and adds player interaction via Bluetooth™.
Download MascotWorldConnected example>>
To run this application, you need two Bluetooth-enabled mobile phones (e.g. Sony Ericsson K750) and you connect them at the start of application using Bluetooth. Once communication is established, the 3D world is started and each user sees two cars: his own and the opponent's. Each user can drive his own car or navigate through the 3D world. You can switch between these using the phone's soft keys.
The Bluetooth part of the application consists of server or a client. The user chooses between them.
While you are moving your own car, the updated position and rotation coordinates are sent to other party, so your car can be displayed in the proper location on your opponents screen.
The User can control movement of the car, but this is limited. When the user is moving the car, the camera follows the same way. The car can move:
* arrow left/right: turn left/right
* arrow up/down: move forward/backward
* keys 4/6: move left/right
* fire: centers camera on top of car
In a commercial application, it is possible to speed up the Bluetooth connection setup by hardcoding the URL of the other phones. This could be done by caching the URL once connected, so it will connect much faster the next time.
Mobile Java 3D Tips, Tricks & Code
JSR 184: 3D co-ordinates and orientation overview | ||||||||
| ||||||||
This article gives a brief introduction to the 3D co-ordinate system and orientation in the 3D world using the JSR 184 API. Download MIDlet and source code>>
In addition to the world co-ordinates, each object also has a local co-ordinate system and the figures can also be moved within the local co-ordinate system (Figure 2). The big difference between the co-ordinate systems is that the local co-ordinate system's orientation may change; the local co-ordinate system is actually rotated with the figure if the figure is rotated (Figure 3).
In JSR 184 it is also possible to add a mesh to a group. For example if a group is added to the world and then a mesh is added to the group, the translation of the node will be in the co-ordinate system of the parent. The basic functions are: Transformable: - postRotate(float angle, float ax, float ay, float az) - translate(float tx, float ty, float tz) Transform: - postRotate(float angle, float ax, float ay, float az) - postTranslate(float tx, float ty, float tz) mesh.postRotate(3.0f, 1.0f, 0.0f, 0.0f); When rotation is made directly on the transformable object the rotation will be made around the origo of the local co-ordinate system. transform.postRotate(3.0f, 1.0f, 0.0f, 0.0f); mesh.setTransform(transform); When the rotation is made using the transform class the object will rotate around its center. mesh.translate(0.0f, 0.0f, 5.0f); When the object is moved using methods in the transformable class the object is moved in the co-ordinate system of the parent node. transform.postTranslate(0.0f, 0.0f, 5.0f); mesh.setTransform(transform) When the object is moved using the transform class the object is moved in the local co-ordinate system. To get a visual effect of the different methods download the source code and example MIDlet here >> |