Oceans are constantly moving because of currents and wave action. The water is dense, high in salinity, and visibility is frequently low due to plankton bloom and broken-down plants and animals. This is why cetaceans (whales, dolphins and porpoises) have developed a way of navigating, communicating, and finding food -- through the use of sound. Nearly 80 species of cetaceans use varying levels and frequencies of sound. The meanings of sounds that the different cetaceans produce are still not well understood, but scientists agree that the sounds cetaceans make are critical to their survival. Without using sound, these aquatic mammals couldn't find food, navigate, attract mates or keep tabs on young, and they couldn't avoid collisions with unseen obstacles or avoid predators. The LeafySeadragon system is designed for cetacean research, and for setting up a worldwide internet-based cetacean listening and two-way acoustics interaction system (human-to-cetacean and vice versa).
The developer notes, "I chose the name LeafySeadragon for this project because it has the word sea in it, and because of the word dragon, which is a strong word, full of imagery, mythology and power. Another characteristic is that seahorses are an endangered species and need our help. So, a Leafy Sea Dragon is an excellent mascot as well as a living model for Leafy.dev.java.net. The Leafy Sea Dragon has a cousin species called a Weedy Sea Dragon, and I am using this name for a modified version of the system for use between human divers, with or without surface vessels." The system converts underwater cetacean whistles into above-water audio and into text form for human users, and also converts text messages into underwater whistles, in near real time. LeafySeadragon is an open source grid prototype that sends simulated cetacean sounds over the Internet and plays them back on an ordinary PC or hand-held device. In addition, it's based on generic Leafy API for peer-to-peer applications using sockets.
Leafy is a generic API for any distributed applications using mobile Java 2 Micro Edition (J2ME), and non-mobile Java 2 Standard Edition (J2SE) devices, while LeafySeadragron is a complete application built on top of Leafy. This version also includes a generic grid package, Because this project is open source, you can help in its development. Leafy and LeafySeadragon Architecture
All software is written in the Java programming language: signal acquisition, audio synthesis, pattern recognition, human user interface, as well as the TCP socket connections between multiple backbone nodes and end-point nodes. The J2SE components Leafy and LeafySeadragon require J2SE 1.4 or higher to run.
When working with the LeafySeadragon and Leafy code, files are organized in five top directories, or rather five projects, three for Leafy and two for LeafySeadragon. This decentralized structure supports a mix of J2SE and J2ME code with a minimum of duplication and therefore a maximum of inheritance (the
Legend: Leafy and Nodes
Leafy is the generic API for developing robust networked applications. Leafy is composed of three subprojects, or packages,
A node is an object from the Leafy generic API, and its job is to manage the communication with other nodes. There also may be more than one node per VM. It creates a
Each
A
LeafySeadragon contains different types of applications: c, c2h, and h networking, by using the node classes from the Leafy API. For example, the HRelay application is a LeafySeadragon's three basic types of applications are:
The applications can be configured to run on individual hosts or on the same host and same VM. In the latter configuration, the applications sharing a VM communicate by ordinary method invocation instead of through socket streams, for example. This communication feature is implemented in the
The current version of LeafySeadragon, version 0.5.2, contains extensive logic to setup the nodes of the application with minimal user input and to detect and report anomalies that may occur. Once the properties file is edited for the specific local features, such as the security level of local nodes and the IP address of peer nodes, the application sets up the local nodes and their communication without user intervention, other than launching the batch file or selecting an icon representing a
The minimum configuration is a network of three applications, one of each type
For a specific network configuration, one could add more applications to the network. For example, the current version supports any number of h applications, implemented as applets, midlet (MIDP2), and desktop applications. These are the The applications and nodes in this release are prototypes with basic functionality. For example, there are three predefined signals, and one must write Java code to edit them or create new signals. The Converter needs
to be expanded into a grid of inexpensive computers to perform pattern recognition analysis on a large set of signals in the lexicon (the The application detects the readiness of nodes and possible anomalies. Java Sound API and Java USB API (JSR-80)
The Java Sound API specification provides low-level support for audio operations in the human frequency range (0-20 kHz) such as audio playback and capture (recording), mixing, MIDI sequencing, and MIDI synthesis in an extensible, flexible framework.
The currently used simulation signals, in class
A
A
Until a USB device capable of supporting a 1-100 kHz frequency range becomes available, LeafySeadragon will probably use Java Sound API for communicating with hydrophones connected to the mic jack and the earphones jack of a laptop, and thus limited to 1-19 kHz. This may be sufficient for some species. LeafySeadragon is designed to work with acquired signals ranging from 1 kKHz to 100 kKHz, and this frequency range is flexible, such that it can be modified to a lower or higher value if the host CPU speed is insufficient for this range or sufficient to support a higher limit.
In the c2h application on a backbone, recognized signals are assigned their text form, such as a word or id number, which is obtained from the matched signal in the lexicon; while unrecognized signals are given a system-generated text form and added to the lexicon. The signals with their text form and frequency numbers are sent to h nodes for reading and hearing by people. The Java Sound API provides the lowest level of sound support on the Java platform. It provides application programs with a great amount of control over sound operations, and it is extensible. For example, the Java Sound API supplies mechanisms for installing, accessing, and manipulating system resources such as audio mixers, MIDI synthesizers, other audio or MIDI devices, file readers and writers, and sound format converters. The Java Sound API does not include sophisticated sound editors or graphical tools, but it provides capabilities upon which such programs can be built. It emphasizes low-level control beyond that commonly expected by the end user. Java Sound is used in LeafySeadragon for the repetition of cetacean sounds in the human audio range, that is up to 20 kHz, while the LeafySeadragon components that handle cetacean sounds go up to 100 kHz and possibly higher because some cetacean species can emit sounds up to 300 kHz. The frequency range required for effective communication for any species is still not known. The Java Sound API includes two PCM encodings that use linear quantization of amplitude, and signed or unsigned integer values. Linear quantization means that the number stored in each sample is directly proportional (except for any distortion) to the original sound pressure at that instant and similarly proportional to the displacement of a loudspeaker or eardrum that is vibrating with the sound at that instant. A frame contains the data for all channels at a particular time. For PCM-encoded data, the frame is simply the set of simultaneous samples in all channels, for a given instant in time, without any additional information. In this case, the frame rate is equal to the sample rate, and the frame size in bytes is the number of channels multiplied by the sample size in bits, divided by the number of bits in a byte. The communication interface with the hydrophones (transducers), uses its own custom acoustic Java software coupled with the USB v.2 API (JSR-80) because serial or parallel communications are not fast enough for cetacean acoustics when not using an expensive hardware interface. Code for the hydrophone interface is in progress and will probably be an individual subproject in Leafy because it could be reused in other applications that are not using Leafy or LeafySeadragon. Java Logging API
The Java Logging APIs, introduced in package
The LeafySeadragon session reports contain all communication that occurred during a given communication session with cetaceans, to be used offline by the researchers. Because it uses xml tags (based on the plain The trace log contains technical trace texts to be used by the administrator of the system, such as for debugging. These two types of reports use the same logging API, but they have very different written formats. Leafy and LeafySeadragon J2SE-with-J2MEPackages are organized appropriately for easy reuse of classes in J2ME and J2SE. Roadmap SummaryThere are still many important features to be implemented, and developers have a variety of areas they can put their programming skills to great use.
This project is hosted on the java.net site, which provides a common area for interesting conversations and innovative development projects related to Java technologies. Developer and project owner, Serge Masse is President and Chief Technology Officer of Simplecode, Inc., and he is speaking at the 2004 JavaOne session for this project. For More Information
Leafy API | |||||||||||||||||||||||||||||||||||
|
| ||||||||||||