/* this typedef goes here because it is needed by multiseq.c */

typedef struct add_susp_struct {
    snd_susp_node		susp;
    boolean			started;
    int                         terminate_bits;
    long			terminate_cnt;
    int                         logical_stop_bits;
    boolean			logically_stopped;
    sound_type			s1;
    long			s1_cnt;
    sample_block_type		s1_bptr;	/* block pointer */
    sample_block_values_type	s1_ptr;
    sound_type			s2;
    long			s2_cnt;
    sample_block_type		s2_bptr;	/* block pointer */
    sample_block_values_type	s2_ptr;

#ifdef UPSAMPLECODE
    /* support for interpolation of s2 */
    sample_type s2_x1_sample;
    double s2_phase;
    double s2_phase_incr;

    /* support for ramp between samples of s2 */
    double output_per_s2;
#endif
    /* pointer used to synchronize adds in multiseq */
    struct multiseq_struct	*multiseq;
    long			s1_prepend; /* offset to susp.current */
} add_susp_node, *add_susp_type;

sound_type snd_make_add();
sound_type snd_add();
    /* LISP: (SND-ADD SOUND SOUND) */

/* we export these for seq.c and multiseq.c */ 
void add_zero_fill_nn_fetch(add_susp_type susp, snd_list_type snd_list);
void add_s1_s2_nn_fetch(add_susp_type susp, snd_list_type snd_list);
void add_s2_nn_fetch(add_susp_type susp, snd_list_type snd_list);
void add_s1_nn_fetch(add_susp_type susp, snd_list_type snd_list);
void add_mark(add_susp_type susp);
void add_print_tree(add_susp_type susp, int n);
void add_free(add_susp_type susp);
