1  /*
2   * UAE - The Un*x Amiga Emulator
3   *
4   * Sound emulation stuff
5   *
6   * Copyright 1995, 1996, 1997 Bernd Schmidt
7   */
8 
9 #ifndef _UADE_AUDIO_H_
10 #define _UADE_AUDIO_H_
11 
12 #include "sinctable.h"
13 
14 #define AUDIO_DEBUG 0
15 /* Queue length 256 implies minimum emulated period of 8. This should be
16  * sufficient for all imaginable purposes. This must be power of two. */
17 #define SINC_QUEUE_LENGTH 256
18 
19 typedef struct {
20     int time, output;
21 } sinc_queue_t;
22 
23 extern struct audio_channel_data {
24     unsigned long adk_mask;
25     unsigned long evtime;
26     unsigned char dmaen, intreq2, data_written;
27     uaecptr lc, pt;
28 
29     int state, wper, wlen;
30     int current_sample;
31     int sample_accum, sample_accum_time;
32     int output_state;
33     sinc_queue_t sinc_queue[SINC_QUEUE_LENGTH];
34     int sinc_queue_time;
35     int sinc_queue_head;
36     int vol;
37     uae_u16 dat, nextdat, per, len;
38 
39     /* Debug variables */
40     uaecptr ptend, nextdatpt, nextdatptend, datpt, datptend;
41 } audio_channel[4];
42 
43 extern void AUDxDAT (int nr, uae_u16 value);
44 extern void AUDxVOL (int nr, uae_u16 value);
45 extern void AUDxPER (int nr, uae_u16 value);
46 extern void AUDxLCH (int nr, uae_u16 value);
47 extern void AUDxLCL (int nr, uae_u16 value);
48 extern void AUDxLEN (int nr, uae_u16 value);
49 
50 void audio_reset (void);
51 void audio_set_filter(int filter_type, int filter_force);
52 void audio_set_rate (int rate);
53 void audio_set_resampler(char *name);
54 void audio_use_text_scope(void);
55 void update_audio (void);
56 
57 #endif
58