ALFred Documentation

The JukeBox application

The JukeBox is a client/server based application which allows to select and play a remote audio clip. The set of audio clips are maintained by the server which aims to transmit them to the clients.

Overview

Clients can send to the server the following information: The following data can be sent to the clients: Basically, the server waits for clients' requests at a well known address and port number. The first clients' action is to get the list of available audio clips (GetList) from the server. When the client receives the information (ListOfClips), it displays it to the user. The user can select an audio clip in the list and request its transmission by the server (GetClipNumber X). Then, the client runs automatically the fphone audio tool with the right parameters and the sender starts the audio transmission (RTP Packets) . During the transmission phase, the client can request to pause/resume or abort the transmission (Pause/Cont/Abort). When the end of clip is reached, the server informs the client (EndOfClip) in order it exits the fphone process.

Note that two different transmission protocols are required for this application:

  1. a reliable, non real-time transmission protocol to send the commands GetList, GetClipNumber, Pause, Cont, Abort, ListOfClips, EndOfClip.
  2. a semi-reliable, real-time, jitter-sensitive transmission protocol to send audio data (RTP packets)

Automatic Implementation

Using ALFred, the task of the developer is simplified. An application is divided into two parts: the control part which is described in ESTEREL and the data part which is described in Java. To write an application, the developer has to perform the following steps, according to procedure described in Using ALFred: Once all the java files for application have been generated you can compile them and run the JukeBox application. Suppose you're going to run the automatic version of the JukeBox client on the django machine and the automatic version of the JukeBox server on the pif machine, you just have to do:

server side:
-----------

pif$ pwd
$HOME/JukeBox/server

pif$ java inria.alfred.lib.Run  -d django 
                                -dir ./clips/ 
                                [-manual_bw]


client side:
-----------

django$ pwd
$HOME/JukeBox/client

django$ java inria.alfred.lib.Run -d pif 
                                  -fphone_path fphone



 

JukeBox Screenshots for automated version


 

JukeBox Screenshots for manual version

The server at pif.inria.fr

pif$ java inria.alfred.lib.Run -manual_bw -d django

server

A Client at django.inria.fr

pim$ java inria.alfred.lib.Run -d pif

client