1
/* Copyright (c) 1997-1999 Miller Puckette.
2
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
3
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
5
/* Audio and MIDI I/O, and other scheduling and system stuff. */
7
/* NOTE: this file describes Pd implementation details which may change
8
in future releases. The public (stable) API is in m_pd.h. */
12
typedef struct _namelist /* element in a linked list of stored strings */
14
struct _namelist *nl_next; /* next in list */
15
char *nl_string; /* the string */
18
t_namelist *namelist_append(t_namelist *listwas, const char *s, int allowdup);
19
t_namelist *namelist_append_files(t_namelist *listwas, const char *s);
20
void namelist_free(t_namelist *listwas);
21
char *namelist_get(t_namelist *namelist, int n);
22
void sys_setextrapath(const char *p);
23
extern int sys_usestdpath;
24
extern t_namelist *sys_externlist;
25
extern t_namelist *sys_searchpath;
26
extern t_namelist *sys_helppath;
27
int sys_open_absolute(const char *name, const char* ext,
28
char *dirresult, char **nameresult, unsigned int size, int bin, int *fdp);
29
int sys_trytoopenone(const char *dir, const char *name, const char* ext,
30
char *dirresult, char **nameresult, unsigned int size, int bin);
31
t_symbol *sys_decodedialog(t_symbol *s);
35
void sys_loadpreferences( void);
36
void sys_savepreferences( void);
37
extern int sys_defeatrt;
38
extern t_symbol *sys_flags;
41
extern int sys_debuglevel;
42
extern int sys_verbose;
43
extern int sys_noloadbang;
45
extern char *sys_guicmd;
47
EXTERN int sys_nearestfontsize(int fontsize);
48
EXTERN int sys_hostfontsize(int fontsize);
50
extern int sys_defaultfont;
51
extern t_symbol *sys_libdir; /* library directory for auxilliary files */
52
extern t_symbol *sys_guidir; /* directory holding pd_gui, u_pdsend, etc */
56
typedef int (*loader_t)(t_canvas *canvas, char *classname); /* callback type */
57
EXTERN int sys_load_lib(t_canvas *canvas, char *filename);
58
EXTERN void sys_register_loader(loader_t loader);
62
#define SENDDACS_NO 0 /* return values for sys_send_dacs() */
63
#define SENDDACS_YES 1
64
#define SENDDACS_SLEPT 2
66
#define DEFDACBLKSIZE 64
67
extern int sys_schedblocksize; /* audio block size for scheduler */
68
extern int sys_hipriority; /* real-time flag, true if priority boosted */
69
extern t_sample *sys_soundout;
70
extern t_sample *sys_soundin;
71
extern int sys_inchannels;
72
extern int sys_outchannels;
73
extern int sys_advance_samples; /* scheduler advance in samples */
74
extern int sys_blocksize; /* audio I/O block size in sample frames */
75
extern t_float sys_dacsr;
76
extern int sys_schedadvance;
77
extern int sys_sleepgrain;
78
void sys_set_audio_settings(int naudioindev, int *audioindev,
79
int nchindev, int *chindev,
80
int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev,
81
int srate, int advance, int callback);
82
void sys_reopen_audio( void);
83
void sys_close_audio(void);
86
int sys_send_dacs(void);
87
void sys_reportidle(void);
88
void sys_set_priority(int higher);
89
void sys_audiobuf(int nbufs);
90
void sys_getmeters(t_sample *inmax, t_sample *outmax);
91
void sys_listdevs(void);
92
void sys_setblocksize(int n);
95
#define MAXMIDIINDEV 16 /* max. number of input ports */
96
#define MAXMIDIOUTDEV 16 /* max. number of output ports */
97
extern int sys_nmidiin;
98
extern int sys_nmidiout;
99
extern int sys_midiindevlist[];
100
extern int sys_midioutdevlist[];
102
void sys_open_midi(int nmidiin, int *midiinvec,
103
int nmidiout, int *midioutvec, int enable);
104
void sys_get_midi_params(int *pnmidiindev, int *pmidiindev,
105
int *pnmidioutdev, int *pmidioutdev);
107
void sys_get_midi_apis(char *buf);
109
void sys_reopen_midi( void);
110
void sys_close_midi( void);
111
EXTERN void sys_putmidimess(int portno, int a, int b, int c);
112
EXTERN void sys_putmidibyte(int portno, int a);
113
EXTERN void sys_poll_midi(void);
114
EXTERN void sys_setmiditimediff(double inbuftime, double outbuftime);
115
EXTERN void sys_midibytein(int portno, int byte);
117
/* implemented in the system dependent MIDI code (s_midi_pm.c, etc. ) */
118
void midi_getdevs(char *indevlist, int *nindevs,
119
char *outdevlist, int *noutdevs, int maxndev, int devdescsize);
120
void sys_do_open_midi(int nmidiindev, int *midiindev,
121
int nmidioutdev, int *midioutdev);
124
EXTERN void sys_alsa_putmidimess(int portno, int a, int b, int c);
125
EXTERN void sys_alsa_putmidibyte(int portno, int a);
126
EXTERN void sys_alsa_poll_midi(void);
127
EXTERN void sys_alsa_setmiditimediff(double inbuftime, double outbuftime);
128
EXTERN void sys_alsa_midibytein(int portno, int byte);
129
EXTERN void sys_alsa_close_midi( void);
132
/* implemented in the system dependent MIDI code (s_midi_pm.c, etc. ) */
133
void midi_alsa_getdevs(char *indevlist, int *nindevs,
134
char *outdevlist, int *noutdevs, int maxndev, int devdescsize);
135
void sys_alsa_do_open_midi(int nmidiindev, int *midiindev,
136
int nmidioutdev, int *midioutdev);
140
EXTERN void sys_log_error(int type);
141
#define ERR_NOTHING 0
142
#define ERR_ADCSLEPT 1
143
#define ERR_DACSLEPT 2
145
#define ERR_DATALATE 4
147
#define SCHED_AUDIO_NONE 0
148
#define SCHED_AUDIO_POLL 1
149
#define SCHED_AUDIO_CALLBACK 2
150
void sched_set_using_audio(int flag);
154
EXTERN void sys_microsleep(int microsec);
156
EXTERN void sys_bail(int exitcode);
157
EXTERN int sys_pollgui(void);
159
EXTERN_STRUCT _socketreceiver;
160
#define t_socketreceiver struct _socketreceiver
162
typedef void (*t_socketnotifier)(void *x);
163
typedef void (*t_socketreceivefn)(void *x, t_binbuf *b);
165
EXTERN t_socketreceiver *socketreceiver_new(void *owner,
166
t_socketnotifier notifier, t_socketreceivefn socketreceivefn, int udp);
167
EXTERN void socketreceiver_read(t_socketreceiver *x, int fd);
168
EXTERN void sys_sockerror(char *s);
169
EXTERN void sys_closesocket(int fd);
171
typedef void (*t_fdpollfn)(void *ptr, int fd);
172
EXTERN void sys_addpollfn(int fd, t_fdpollfn fn, void *ptr);
173
EXTERN void sys_rmpollfn(int fd);
175
void sys_setalarm(int microsec);
176
void sys_setvirtualalarm( void);
183
#define API_PORTAUDIO 4
187
#if defined(__linux__) || defined(__FreeBSD_kernel__)
188
#define API_DEFAULT API_OSS
189
#define API_DEFSTRING "OSS"
192
#define API_DEFAULT API_MMIO
193
#define API_DEFSTRING "MMIO"
196
#define API_DEFAULT API_PORTAUDIO
197
#define API_DEFSTRING "portaudio"
200
#define API_DEFAULT API_SGI
201
#define API_DEFSTRING "SGI Digital Media"
203
#define DEFAULTAUDIODEV 0
205
#define MAXAUDIOINDEV 4
206
#define MAXAUDIOOUTDEV 4
210
#define DEFAULTSRATE 44100
212
#define DEFAULTADVANCE 70
214
#define DEFAULTADVANCE 50
217
typedef void (*t_audiocallback)(void);
219
int pa_open_audio(int inchans, int outchans, int rate, t_sample *soundin,
220
t_sample *soundout, int framesperbuf, int nbuffers,
221
int indeviceno, int outdeviceno, t_audiocallback callback);
222
void pa_close_audio(void);
223
int pa_send_dacs(void);
224
void sys_reportidle(void);
225
void pa_listdevs(void);
226
void pa_getdevs(char *indevlist, int *nindevs,
227
char *outdevlist, int *noutdevs, int *canmulti,
228
int maxndev, int devdescsize);
230
int oss_open_audio(int naudioindev, int *audioindev, int nchindev,
231
int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev,
232
int *choutdev, int rate);
233
void oss_close_audio(void);
234
int oss_send_dacs(void);
235
void oss_reportidle(void);
236
void oss_getdevs(char *indevlist, int *nindevs,
237
char *outdevlist, int *noutdevs, int *canmulti,
238
int maxndev, int devdescsize);
240
int alsa_open_audio(int naudioindev, int *audioindev, int nchindev,
241
int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev,
242
int *choutdev, int rate);
243
void alsa_close_audio(void);
244
int alsa_send_dacs(void);
245
void alsa_reportidle(void);
246
void alsa_getdevs(char *indevlist, int *nindevs,
247
char *outdevlist, int *noutdevs, int *canmulti,
248
int maxndev, int devdescsize);
250
int jack_open_audio(int wantinchans, int wantoutchans, int srate);
251
void jack_close_audio(void);
252
int jack_send_dacs(void);
253
void jack_reportidle(void);
254
void jack_getdevs(char *indevlist, int *nindevs,
255
char *outdevlist, int *noutdevs, int *canmulti,
256
int maxndev, int devdescsize);
257
void jack_listdevs(void);
259
int mmio_open_audio(int naudioindev, int *audioindev,
260
int nchindev, int *chindev, int naudiooutdev, int *audiooutdev,
261
int nchoutdev, int *choutdev, int rate);
262
void mmio_close_audio( void);
263
void mmio_reportidle(void);
264
int mmio_send_dacs(void);
265
void mmio_getdevs(char *indevlist, int *nindevs,
266
char *outdevlist, int *noutdevs, int *canmulti,
267
int maxndev, int devdescsize);
269
void sys_listmididevs(void);
270
void sys_set_midi_api(int whichapi);
271
void sys_set_audio_api(int whichapi);
272
void sys_get_audio_apis(char *buf);
273
extern int sys_audioapi;
274
void sys_set_audio_state(int onoff);
276
/* API dependent audio flags and settings */
277
void oss_set32bit( void);
278
void linux_alsa_devname(char *devname);
280
void sys_get_audio_params(
281
int *pnaudioindev, int *paudioindev, int *chindev,
282
int *pnaudiooutdev, int *paudiooutdev, int *choutdev,
283
int *prate, int *padvance, int *callback);
284
void sys_save_audio_params(
285
int naudioindev, int *audioindev, int *chindev,
286
int naudiooutdev, int *audiooutdev, int *choutdev,
287
int rate, int advance, int callback);
291
typedef void (*t_printhook)(const char *s);
292
extern t_printhook sys_printhook; /* set this to override printing */
293
extern int sys_printtostderr;
297
EXTERN double sys_time;
298
EXTERN double sys_time_per_dsp_tick;
299
EXTERN int sys_externalschedlib;
301
EXTERN t_sample* get_sys_soundout(void ) ;
302
EXTERN t_sample* get_sys_soundin(void ) ;
303
EXTERN int* get_sys_main_advance(void ) ;
304
EXTERN double* get_sys_time_per_dsp_tick(void ) ;
305
EXTERN int* get_sys_schedblocksize(void ) ;
306
EXTERN double* get_sys_time(void ) ;
307
EXTERN t_float* get_sys_dacsr(void ) ;
308
EXTERN int* get_sys_sleepgrain(void ) ;
309
EXTERN int* get_sys_schedadvance(void ) ;
311
EXTERN void sys_clearhist(void );
312
EXTERN void sys_initmidiqueue(void );
313
EXTERN int sys_addhist(int phase);
314
EXTERN void sys_setmiditimediff(double inbuftime, double outbuftime);
315
EXTERN void sched_tick(double next_sys_time);
316
EXTERN void sys_pollmidiqueue(void );
317
EXTERN int sys_pollgui(void );
318
EXTERN void sys_setchsr(int chin, int chout, int sr);
320
EXTERN void inmidi_noteon(int portno, int channel, int pitch, int velo);
321
EXTERN void inmidi_controlchange(int portno,
325
EXTERN void inmidi_programchange(int portno, int channel, int value);
326
EXTERN void inmidi_pitchbend(int portno, int channel, int value);
327
EXTERN void inmidi_aftertouch(int portno, int channel, int value);
328
EXTERN void inmidi_polyaftertouch(int portno,
333
extern t_widgetbehavior text_widgetbehavior;