text: /*************************************************************************/
  /*                                                                       */
  /*                Centre for Speech Technology Research                  */
  /*                     University of Edinburgh, UK                       */
  /*                         Copyright (c) 1995,1996                       */
  /*                        All Rights Reserved.                           */
  /*                                                                       */
  /*  Permission is hereby granted, free of charge, to use and distribute  */
  /*  this software and its documentation without restriction, including   */
  /*  without limitation the rights to use, copy, modify, merge, publish,  */
  /*  distribute, sublicense, and/or sell copies of this work, and to      */
  /*  permit persons to whom this work is furnished to do so, subject to   */
  /*  the following conditions:                                            */
  /*   1. The code must retain the above copyright notice, this list of    */
  /*      conditions and the following disclaimer.                         */
  /*   2. Any modifications must be clearly marked as such.                */
  /*   3. Original authors' names are not deleted.                         */
  /*   4. The authors' names are not used to endorse or promote products   */
  /*      derived from this software without specific prior written        */
  /*      permission.                                                      */
  /*                                                                       */
  /*  THE UNIVERSITY OF EDINBURGH AND THE CONTRIBUTORS TO THIS WORK        */
  /*  DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING      */
  /*  ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   */
  /*  SHALL THE UNIVERSITY OF EDINBURGH NOR THE CONTRIBUTORS BE LIABLE     */
  /*  FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    */
  /*  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN   */
  /*  AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,          */
  /*  ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF       */
  /*  THIS SOFTWARE.                                                       */
  /*                                                                       */
  /*************************************************************************/
  /*                    Author :  Paul Taylor                              */
  /*                    Date   :  July 1995                                */
  /*-----------------------------------------------------------------------*/
  /*                   Event class header file                             */
  /*                                                                       */
  /*=======================================================================*/
  
  // Warning: These event classes can be used as items in the EST_Stream
  // int he normal way. However, the EventSI class has internal pointers to
  // adjacent events which it uses to work out various parameters. Thus,
  // when making a EST_Stream of events, it is important to link the events
  // pointers as well.
  
  #ifndef __Event_H__
  #define __Event_H__
  
  #include "EST_String.h"
  
  #ifndef FALSE
  #       define  FALSE   (0)
  #endif
  #ifndef TRUE
  #       define  TRUE    (1)
  #endif
  
  /* Class commented out as everything is private, uninitialized and
     unused */
  #if 0
  class RFCelement{
      float amp;
      float dur;
      float start_amp;
      float start_pos;
      EST_String type;
  };
  #endif
  
  class EventBase{
   private:
   public:
      EST_String type;
      int save(EST_String filename, EST_String type = "");
      
  };
  
  class EventRFC: public EventBase{
  public:
      void init() {rise_amp = 0.0; rise_dur = 0.0; 
  	    start_amp =0.0; fall_amp = 0.0; fall_dur = 0.0; 
  	    start_pos = 0.0; peak_pos = 0.0; type = ""; }
  
      float rise_amp;
      float rise_dur;
      float fall_amp;
      float fall_dur;
      float peak_pos;
      float start_amp;
      float start_pos;
      friend ostream& operator << (ostream& s, EventRFC &e) 
      {
  	s << e.type << " " << e.rise_amp << " " << e.rise_dur
  	    << " " << e.fall_amp << " " << e.fall_dur
  	    << " " << e.start_amp << " " << e.start_pos
              << std::endl;
  	    return s;
  	}
  };
  
  class EventSI: public EventBase {
  private:
      float s_f0;
      float s_pos;
      float p_f0;
      float p_pos;
      float e_pos;
      float e_f0;
  
  public:
      void init();
  
      float amp();
      float dur();
  
      float rise_amp();
      float rise_dur();
      float fall_amp();
      float fall_dur();
  
      float start_f0();
      float start_pos();
      float peak_f0();
      float peak_pos();
      float end_f0();
      float end_pos();
  
      void set_start_f0(float a);
      void set_start_pos(float a);
      void set_peak_f0(float a);
      void set_peak_pos(float a);
      void set_end_f0(float a);
      void set_end_pos(float a);
  
      EventSI *sn;
      EventSI *sp;
  
      friend ostream& operator << (ostream& s, EventSI &e) 
      {
  	s << e.type << " ra:" << e.rise_amp() << " rd:" << e.rise_dur()
  	    << "fa: " << e.fall_amp() << " fd:" << e.fall_dur()
  	    << " sf0:" << e.start_f0() << " spos:" << e.start_pos()
  	    << " pf0:" << e.peak_f0() << " ppos:" << e.peak_pos()
  	    << " ef0:" << e.end_f0() << " epos:" << e.end_pos()
              << std::endl;
  	    return s;
  	}
  };
  
  class EventTilt: public EventBase{
  private:
      float samp;
      float sdur;
      float stilt;
      float spos;
      float s_f0;
      float s_pos;
  
  public:
      void init();
  
      float amp();
      float dur();
      float tilt();
      float pos();
  
      void set_amp(float a);
      void set_dur(float a);
      void set_tilt(float a);
      void set_pos(float a);
  
      float start_f0();
      float start_pos();
      void set_start_f0(float a);
      void set_start_pos(float a);
  
      friend ostream& operator << (ostream& s, EventTilt &e) 
      {
  	s << e.type << " " << e.amp() << " " << e.dur()
  	    << " " << e.tilt() << " " << e.pos()
  	    << " sf0 " << e.start_f0() << " " << e.start_pos()
              << std::endl;
  	    return s;
  	}
  
  };
  
  void gc_eventsi(void *w);
  void gc_eventtilt(void *w);
  void gc_eventrfc(void *w);
  
  #endif // __Event_H__
  