# Patent

## Title
Stateful, double-buffered dynamic navigation voice prompting

## Abstract

A navigation system written in J2ME MIDP for a client device includes a plurality of media players each respectively comprising a buffer. A navigation program manages the state of the plurality of media players. The plurality of media players are in either one of an acquiring resources state, and a playing and de-allocating state. The use of a plurality of media players each respectively comprising a buffer overcomes the prior art in which navigation system can cut off a voice prompt because of the time-consuming tasks associated with playing a voice prompt.

## Background
The present invention is a continuation of U.S. patent application Ser. No. 13/349,999, entitled “Stateful, Double-Buffered Dynamic Navigation Voice Prompting,” filed on Jan. 13, 2012, now U.S. Pat. No. 8,224,572; which in turn is a continuation of U.S. patent application Ser. No. 12/285,978, entitled “Stateful, Double-Buffered Dynamic Navigation Voice Prompting,” filed on Oct. 17, 2008, now U.S. Pat. No. 8,099,238; which claims priority from U.S. Provisional Application No. 60/996,373, entitled “Stateful, Double-Buffered Dynamic Voice Prompting For J2ME(MIDP) Personal Navigation on a Personal Electronic Device” to Eric Wistrand, filed on Nov. 14, 2007, the entirety of all three of which are expressly incorporated herein by reference.


BACKGROUND OF THE INVENTION
1. Field of the Invention
This invention relates generally to wireless telecommunication. More particularly, it relates to wireless carrier location based services (LBS) and J2ME wireless client LBS related software and apparatus.
2. Background of the Related Art
Existing voice navigation systems typically use standard reusable voice prompts preloaded on client devices. These standard voice prompts are usually carefully crafted to be reusable in all situations. All situations match to a pre-loaded or concatenated voice prompt. However, the present inventor has appreciated that such existing navigation systems severely limit product usability and quality due to a compromise in prompt length, scope and quality in order to achieve the timing requirements.
Voice navigation systems written in Java Platform Micro Edition (J2ME) often produce late and missed voice prompts. This sometimes results in the absence of a street name in a voice prompt, e.g., just speaking “Turn Right in 500 feet”. The indicated pre-storage voice fragment files are concatenated at the time they are needed. Even the number is pre-stored and concatenated. This results in a situation where the voice prompt is not dynamic and does not have the street names and point-of-interest (POI) name.
Voice prompts in a J2ME navigation system are typically dynamically created (based on the client navigation, the location of the device during navigation) on a voice server and retrieved according to the product requirements. An exemplary product is the TCS Navigator product commercially available from TeleCommunication Systems, Inc. headquartered in Annapolis, Md. This first part, the prompt creation, is performed some time before the actual situation occurs in anticipation of the impending situation requiring a voice prompt. The voice prompt is cached on the client device (phone) for use in the very near future (usually a matter of seconds). This caching process is related to the present invention in that the invention solves a problem occurring upon use of a cached voice prompt.
FIG. 3 illustrates a conventional system for playing navigation voice prompts. In particular, the conventional system for playing navigation voice prompts includes hardware resources 140, asynchronous hardware interface, a media player 10, and a local storage 120. During startup, media player 10 reserves a portion of local storage as a buffer 11. A client navigation program 160 manages the media player 10.
In particular, the problem solved by the present invention comes in the stage when the navigation program 160 must play the voice prompt in a timely manner. Dynamic, location-based voice prompt files are passed from local storage 120 (via a pointer) to the asynchronous hardware interface 130 which must then acquire scarce or exclusive hardware resources 140 to allow the media player 10 to play the voice prompt file. The media player 10 needs to perform a number of time-consuming tasks before it is ready to be started, after receiving the voice prompt file. Additionally, these acquisition tasks must occur sequentially and the various states of the media player 10 must be managed by the client navigation program 160. After playing the voice prompt, the system's media player 10 must then release fully and completely these “scarce or exclusive hardware resources”, hardware resources 140, related to the specific voice prompt. This is because the exclusive hardware resources 140 can only be acquired after the handle to a specific voice prompt has been successfully passed into the media player's 10 interface. As a result, a client navigation program 160 may not acquire and hold these exclusive hardware resources 140 and simply replace the voice prompt contained within the hardware resources 140.
As a result, timing is very important in navigation systems, not only for product quality but also for the safety of those using a navigation product. Therefore a client navigation program 160 must play timely and accurate voice prompts.
SUMMARY OF THE INVENTION
In accordance with the principles of the present invention, a navigation system for a client device includes a plurality of media players each respectively comprising a buffer and being in either one of an acquiring resources state, and a voice prompt and de-allocating state. A navigation program manages the states of the plurality of media players.
In accordance with another aspect of the invention, a method of providing a plurality of buffers for a navigation system comprises instantiating a plurality of media players for a client device, each of the media players respectively comprising a buffer. The plurality of media players each have an acquiring resources state, and a voice prompt and de-allocating state. A navigation program is executed to manage the states of the plurality of media players.



BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 illustrates a navigation system employing a plurality of buffers, in accordance with the principles of the present invention.
FIG. 2 illustrates a lifecycle of events/states/steps for acquisition of exclusive hardware resources and playing of a voice prompt, in accordance with the principles of the present invention.
FIG. 3 illustrates a conventional system for playing navigation voice prompts.



DETAILED DESCRIPTION OF ILLUSTRATIVE EMBODIMENTS
The present invention combines both buffering and state transitioning with a threaded wait-state mechanism, together with a dynamic location-based voice prompting navigation system 100 written in Java Platform Micro Edition (J2ME) Mobile Information Device Profile (MIDP) (for personal device navigation).
FIG. 1 illustrates a navigation system 100 employing a plurality of buffers, in accordance with the principles of the present invention.
In particular, the navigation system 100 includes hardware resources 140, asynchronous hardware interface 130, a navigation program 160, a plurality of media players 10, 20 . . . n, and local storage 120. Each media player 10, 20 . . . n has an associated buffer 11, 21 . . . n.
In accordance with the principles of the present invention, stateful management of media player 10, 20 . . . n exclusive hardware resources 140 is provided using a double buffer (or more buffers depending upon the number of buffers employed) 11, 21 . . . n in, e.g., a J2ME (MIDP) personal navigation program 160.
Any method acting upon the media players 10, 20 . . . n will be asynchronous in fashion by MIDP definition. Notification that certain events have started, completed or failed is satisfied through a listener or callback interface.
Hardware resources 140 may include such hardware as is necessary for the operation of the navigation system 100. Hardware resources 140 may include a display, a graphics processor, a sound processor, a system bus, keypad interface, etc.
Asynchronous hardware interface 130 can allow media players 10, 20 . . . n to interface with hardware resources 130. Being asynchronous, asynchronous hardware interface 130 allows the various components of the navigation system, and in particular, the media players 10, 20 . . . n to operate autonomously with relation to the hardware resources 140. The timing of data passing between the media players 10, 20 . . . n and the hardware resources can be managed by the asynchronous hardware interface 130.
Navigation program 160 can be a J2ME (MIDP) personal navigation program, as is commonly used with compact mobile information devices such as cell phones and Personal Data Assistants (PDAs).
Media players 10, 20 . . . n of navigation program 160 are shown for simplicity as including respective buffers 11, 21 . . . n therein. However, media players 10, 20 . . . n and buffers 11, 21 . . . n can be implemented in local storage 120 and accessed through memory pointers.
Local storage 120 provides memory storage for execution of media players 10, 20 . . . n, storage of voice prompts, storage of navigation history, storage of POI data, storage of user defined destinations, storage of configuration data, etc. The local storage 120 can serve as storage for the navigation system 100 and any other programs and data stored on a client device.
FIG. 2 illustrates a lifecycle of events/states/steps for acquisition of exclusive hardware resources 140 and playing of a voice prompt, in accordance with the principles of the present invention.
In event/state/step 210, instances of media players 10, 20 . . . n are created in local storage 120. The media players 10, 20 . . . n are created by resolving a specific voice prompt. Memory space within local storage 120 can be reserved for execution of media players 10, 20 . . . n and their respective buffers 11, 21 . . . n.
In event/state/step 220, the media players 10, 20 . . . n created in step 210 acquire needed hardware resources 140. The media players 10, 20 . . . n can reserve within an operating system exclusive access to the hardware resources 140 to prevent any possible contention to hardware resources 140. Other start-up processing can also occur that can include allocating memory area, testing connectivity to hardware resources 140, etc.
In event/state/step 230, buffers 11, 21 . . . n can be filled with media data, such as a voice prompt.
In event/state/step 240, the volume of media players 10, 20 . . . n can be set. An appropriate control word within media players 10, 20 . . . n can be set that corresponds to an appropriate volume level to prevent media players 10, 20 . . . n from playing a voice prompt at either a too low of a volume or at a too high of a volume.
In event/state/step 250, one of media players 10, 20 . . . n can start playing a voice prompt. The voice prompt can be instructional audio provided by navigation program 160.
In event/state/step 260, the voice prompt played in event/state/step 250 can be finished playing. Upon media players 10, 20 . . . n hitting an end of file designation for a voice prompt, the media players 10, 20 . . . n have an indication to finish playing the voice prompt and move on to event/state/step 270.
In event/state/step 270, the buffers 11, 21 . . . n allocated in local storage 120 in event/state/step 220 can be de-allocated. The memory space previously allocated in local storage 120 for buffers 11, 21 . . . n can be free for use again by any applications and for storage of any data upon de-allocation.
In event/state/step 280, the memory space within local storage 120 allocated in event/state/step 220 for media players 10, 20 . . . n can be de-allocated. The memory space previously allocated in local storage 120 for media players 10, 20 . . . n can be free for use by any applications and for storage of any data upon de-allocation.
In event/state/step 290, any open media players 10, 20 . . . n that have their associated resources de-allocated and buffers de-allocated can be closed.
Two (or more) media player 10, 20 . . . n buffers 11, 21 . . . n are created upon navigation program 160 startup and remain throughout the navigation session. Due to the inevitable multi-threaded situation of voice prompt navigation these media players 10, 20 . . . n are forced to be in only one of two general events/states/steps during voice prompt execution. They are either in the event/state/step of acquiring resources (during events/states/steps 210 through 240) or they are playing and de-allocating (events/states/steps 250 through 290). As soon as a media player 10, 20 . . . n has been given the start command (the cause of event/state/step 250) it switches from the acquiring hardware resources 140 events/states/steps 210 through 240 to the playing and de-allocating hardware resources 140 events/states/steps 250 through 290.
During and between events/states/steps 210 through 250, a waiting mechanism (not shown) is employed to guarantee proper transitions from one event/state/step to the next. If the transitions are not made properly and in the correct order a media player 10, 20 . . . n error event will occur and be handled accordingly. This mechanism does not effect other navigator program 160 processes and there execution while it is waiting for the media player 10, 20 . . . n to react.
Either of the media players 10, 20 . . . n may be acted upon by a different user program thread or process during almost any of the various events/states/steps 210-290. The most used scenario with regard to this feature is the act of stopping a Voice Prompt while it is playing.
The actual double-buffing, or plural-buffering if three or more media players 10, 20 . . . n are enacted, occurs when one media player, .e.g., 10, is generally in the playing and de-allocating event/state/step and the another media player, e.g., 20, is at the same time acquiring resources. Due to the asynchronous nature of the media player 10, 20 . . . n hardware resources 140 and the nature of the navigation location-based voice prompts, it is evident that these media players 10, 20 . . . n will be active at the same moment in differing generalized states during much of a navigation session, even in cases where the calling (program) methods are not re-entrant in nature.
Benefits of the invention include dynamic voice prompting in a personal navigation program 160, such as streets and POI names. It also results in better error handling which prevents corruption and slow down of media players 10, 20 . . . n. Faster voice processing results, as does a better user experience, because it dynamically gives you voice prompt ‘according to your current surroundings’.
The invention has applicability with any company creating a navigation program 160 on a personal device written in J2ME for the MIDP. It also has applicability in a J2ME personal navigation device with dynamic voice prompting, dynamic meaning in this instance not pre-stored in memory when the application is loaded onto the navigation device.
While the invention has been described with reference to the exemplary embodiments thereof, those skilled in the art will be able to make various modifications to the described embodiments of the invention without departing from the true spirit and scope of the invention.

## Claims

1. An audio delivery device, comprising:
a plurality of media players, associated with physical hardware resources, each having an audio delivering state; and
a manager to manage said audio delivering state; and
a physical asynchronous hardware interface, interfacing said plurality of media players to said physical hardware resources, to autonomously operate said plurality of media players with relation to said physical hardware resources;
wherein said plurality of media players are provided using a plurality of buffers.

2. The audio delivery device according to claim 1, further comprising:
a plurality of buffers each respectively associated with said plurality of media players.

3. The audio delivery device according to claim 1, wherein:
said plurality of media players each further have an acquiring resources state and a de-allocating state.

4. The audio delivery device according to claim 1, wherein:
said audio delivering state is dynamically created based on a changing location of a client device.

5. The audio delivery device according to claim 1, wherein:
said audio delivery device is implemented in a personal data assistant (PDA).

6. The audio delivery device according to claim 1, wherein:
said audio delivery device is implemented in a cellular phone.

7. The audio delivery device according to claim 1, wherein:
said audio delivery device is multi-threaded.

8. A method of providing a plurality of buffers for an audio delivery device, comprising:
associating a plurality of media players with physical hardware resources, said plurality of media players each having an audio delivering state;
managing said audio delivering state; and
interfacing, via a physical asynchronous hardware interface, said plurality of media players to said physical hardware resources to autonomously operate said plurality of media players with relation to said physical hardware resources;
wherein said plurality of media players are provided using a plurality of buffers.

9. The method of providing a plurality of buffers for an audio delivery device according to claim 8, further comprising:
allocating media player resources;
filling buffers associated with each of said plurality of media players;
setting a volume for said plurality of media players;
playing an audio prompt;
de-allocating said buffers associated with each of said plurality of media players;
de-allocating said media player resources; and
closing each of said plurality of media players.

10. The method of providing a plurality of buffers for an audio delivery device according to claim 8, wherein:
said audio delivering state is dynamically created based on a changing location of a client device.

11. The method of providing a plurality of buffers for an audio delivery device according to claim 8, wherein:
said audio delivery device is implemented in a personal data assistant (PDA).

12. The method of providing a plurality of buffers for an audio delivery device according to claim 8, wherein:
said audio delivery device is implemented in a cell phone.

13. The method of providing a plurality of buffers for an audio delivery device according to claim 8, further comprising:
multi-threading said audio delivery device.