513389b4c1
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21044 a1c6a512-1295-4272-9138-f99709370657
430 lines
13 KiB
C
430 lines
13 KiB
C
/* Copyright (c) 1997-1999 Miller Puckette.
|
|
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
|
|
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
|
|
|
|
/* Audio and MIDI I/O, and other scheduling and system stuff. */
|
|
|
|
/* NOTE: this file describes Pd implementation details which may change
|
|
in future releases. The public (stable) API is in m_pd.h. */
|
|
|
|
/* in s_file.c */
|
|
typedef struct _namelist
|
|
{
|
|
struct _namelist *nl_next;
|
|
char *nl_string;
|
|
} t_namelist;
|
|
|
|
t_namelist *namelist_append(t_namelist *listwas, const char *s);
|
|
void namelist_free(t_namelist *listwas);
|
|
|
|
/* s_main.c */
|
|
extern int sys_debuglevel;
|
|
extern int sys_verbose;
|
|
extern int sys_noloadbang;
|
|
extern int sys_nogui;
|
|
extern char *sys_guicmd;
|
|
|
|
EXTERN int sys_nearestfontsize(int fontsize);
|
|
EXTERN int sys_hostfontsize(int fontsize);
|
|
|
|
extern int sys_defaultfont;
|
|
extern t_symbol *sys_libdir; /* library directory for auxilliary files */
|
|
|
|
/* s_loader.c */
|
|
int sys_load_lib(char *dirname, char *filename);
|
|
|
|
/* s_audio.c */
|
|
|
|
#define SENDDACS_NO 0 /* return values for sys_send_dacs() */
|
|
#define SENDDACS_YES 1
|
|
#define SENDDACS_SLEPT 2
|
|
|
|
#define DEFDACBLKSIZE 64
|
|
extern int sys_schedblocksize; /* audio block size for scheduler */
|
|
extern int sys_hipriority; /* real-time flag, true if priority boosted */
|
|
extern t_sample *sys_soundout;
|
|
extern t_sample *sys_soundin;
|
|
extern int sys_inchannels;
|
|
extern int sys_outchannels;
|
|
extern int sys_advance_samples; /* scheduler advance in samples */
|
|
extern int sys_blocksize; /* audio I/O block size in sample frames */
|
|
extern float sys_dacsr;
|
|
extern int sys_schedadvance;
|
|
extern int sys_sleepgrain;
|
|
void sys_open_audio(int naudioindev, int *audioindev,
|
|
int nchindev, int *chindev,
|
|
int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev,
|
|
int srate, int advance, int enable);
|
|
void sys_close_audio(void);
|
|
|
|
/* s_midi.c */
|
|
void sys_open_midi(int nmidiin, int *midiinvec, int nmidiout, int *midioutvec);
|
|
|
|
/* implemented in the system dependent MIDI code (s_midi_pm.c, etc. ) */
|
|
void sys_do_open_midi(int nmidiin, int *midiinvec,
|
|
int nmidiout, int *midioutvec);
|
|
void sys_close_midi(void);
|
|
void midi_getdevs(char *indevlist, int *nindevs,
|
|
char *outdevlist, int *noutdevs, int maxndev, int devdescsize);
|
|
|
|
int sys_send_dacs(void);
|
|
void sys_reportidle(void);
|
|
void sys_set_priority(int higher);
|
|
void sys_audiobuf(int nbufs);
|
|
void sys_getmeters(float *inmax, float *outmax);
|
|
void sys_listdevs(void);
|
|
void sys_setblocksize(int n);
|
|
|
|
/* s_midi.c */
|
|
#define MAXMIDIINDEV 16 /* max. number of input ports */
|
|
#define MAXMIDIOUTDEV 16 /* max. number of output ports */
|
|
extern int sys_nmidiin;
|
|
extern int sys_nmidiout;
|
|
extern int sys_midiindevlist[];
|
|
extern int sys_midioutdevlist[];
|
|
|
|
EXTERN void sys_putmidimess(int portno, int a, int b, int c);
|
|
EXTERN void sys_putmidibyte(int portno, int a);
|
|
EXTERN void sys_poll_midi(void);
|
|
EXTERN void sys_setmiditimediff(double inbuftime, double outbuftime);
|
|
EXTERN void sys_midibytein(int portno, int byte);
|
|
|
|
/* m_sched.c */
|
|
EXTERN void sys_log_error(int type);
|
|
#define ERR_NOTHING 0
|
|
#define ERR_ADCSLEPT 1
|
|
#define ERR_DACSLEPT 2
|
|
#define ERR_RESYNC 3
|
|
#define ERR_DATALATE 4
|
|
void sched_set_using_dacs(int flag);
|
|
|
|
/* s_inter.c */
|
|
|
|
EXTERN void sys_microsleep(int microsec);
|
|
|
|
EXTERN void sys_bail(int exitcode);
|
|
EXTERN int sys_pollgui(void);
|
|
|
|
EXTERN_STRUCT _socketreceiver;
|
|
#define t_socketreceiver struct _socketreceiver
|
|
|
|
typedef void (*t_socketnotifier)(void *x);
|
|
typedef void (*t_socketreceivefn)(void *x, t_binbuf *b);
|
|
|
|
EXTERN t_socketreceiver *socketreceiver_new(void *owner,
|
|
t_socketnotifier notifier, t_socketreceivefn socketreceivefn, int udp);
|
|
EXTERN void socketreceiver_read(t_socketreceiver *x, int fd);
|
|
EXTERN void sys_sockerror(char *s);
|
|
EXTERN void sys_closesocket(int fd);
|
|
|
|
typedef void (*t_fdpollfn)(void *ptr, int fd);
|
|
EXTERN void sys_addpollfn(int fd, t_fdpollfn fn, void *ptr);
|
|
EXTERN void sys_rmpollfn(int fd);
|
|
#ifdef UNIX
|
|
void sys_setalarm(int microsec);
|
|
void sys_setvirtualalarm( void);
|
|
#endif
|
|
|
|
#define API_ALSA 1
|
|
#define API_OSS 2
|
|
#define API_MMIO 3
|
|
#define API_PORTAUDIO 4
|
|
#define API_JACK 5
|
|
|
|
#ifdef __linux__
|
|
#define API_DEFAULT API_OSS
|
|
#define API_DEFSTRING "OSS"
|
|
#endif
|
|
#ifdef MSW
|
|
#define API_DEFAULT API_MMIO
|
|
#define API_DEFSTRING "MMIO"
|
|
#endif
|
|
#ifdef MACOSX
|
|
#define API_DEFAULT API_PORTAUDIO
|
|
#define API_DEFSTRING "portaudio"
|
|
#endif
|
|
#define DEFAULTAUDIODEV 0
|
|
|
|
#define MAXAUDIOINDEV 4
|
|
#define MAXAUDIOOUTDEV 4
|
|
|
|
#define DEFMIDIDEV 0
|
|
|
|
#define DEFAULTSRATE 44100
|
|
#ifdef MSW
|
|
#define DEFAULTADVANCE 70
|
|
#else
|
|
#define DEFAULTADVANCE 50
|
|
#endif
|
|
|
|
int pa_open_audio(int inchans, int outchans, int rate, t_sample *soundin,
|
|
t_sample *soundout, int framesperbuf, int nbuffers,
|
|
int indeviceno, int outdeviceno);
|
|
void pa_close_audio(void);
|
|
int pa_send_dacs(void);
|
|
void sys_reportidle(void);
|
|
void pa_listdevs(void);
|
|
void pa_getdevs(char *indevlist, int *nindevs,
|
|
char *outdevlist, int *noutdevs, int *canmulti,
|
|
int maxndev, int devdescsize);
|
|
|
|
int oss_open_audio(int naudioindev, int *audioindev, int nchindev,
|
|
int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev,
|
|
int *choutdev, int rate); /* IOhannes */
|
|
void oss_close_audio(void);
|
|
int oss_send_dacs(void);
|
|
void oss_reportidle(void);
|
|
void oss_getdevs(char *indevlist, int *nindevs,
|
|
char *outdevlist, int *noutdevs, int *canmulti,
|
|
int maxndev, int devdescsize);
|
|
|
|
int alsa_open_audio(int naudioindev, int *audioindev, int nchindev,
|
|
int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev,
|
|
int *choutdev, int rate);
|
|
void alsa_close_audio(void);
|
|
int alsa_send_dacs(void);
|
|
void alsa_reportidle(void);
|
|
void alsa_getdevs(char *indevlist, int *nindevs,
|
|
char *outdevlist, int *noutdevs, int *canmulti,
|
|
int maxndev, int devdescsize);
|
|
|
|
int jack_open_audio(int wantinchans, int wantoutchans, int srate);
|
|
void jack_close_audio(void);
|
|
int jack_send_dacs(void);
|
|
void jack_reportidle(void);
|
|
void jack_listdevs(void);
|
|
|
|
void mmio_open_audio(int naudioindev, int *audioindev,
|
|
int nchindev, int *chindev, int naudiooutdev, int *audiooutdev,
|
|
int nchoutdev, int *choutdev, int rate);
|
|
void mmio_close_audio( void);
|
|
void mmio_reportidle(void);
|
|
int mmio_send_dacs(void);
|
|
void mmio_getdevs(char *indevlist, int *nindevs,
|
|
char *outdevlist, int *noutdevs, int *canmulti,
|
|
int maxndev, int devdescsize);
|
|
|
|
void sys_listmididevs(void);
|
|
void sys_set_audio_api(int whichapi);
|
|
void sys_get_audio_apis(char *buf);
|
|
extern int sys_audioapi;
|
|
void sys_set_audio_state(int onoff);
|
|
|
|
/* API dependent audio flags and settings */
|
|
void oss_set32bit( void);
|
|
void linux_alsa_devname(char *devname);
|
|
/* Copyright (c) 1997-1999 Miller Puckette.
|
|
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
|
|
* WARRANTIES, see the file, "LICENSE.txt," in this distribution. */
|
|
|
|
/* Audio and MIDI I/O, and other scheduling and system stuff. */
|
|
|
|
/* NOTE: this file describes Pd implementation details which may change
|
|
in future releases. The public (stable) API is in m_pd.h. */
|
|
|
|
/* in s_file.c */
|
|
typedef struct _namelist
|
|
{
|
|
struct _namelist *nl_next;
|
|
char *nl_string;
|
|
} t_namelist;
|
|
|
|
t_namelist *namelist_append(t_namelist *listwas, const char *s);
|
|
void namelist_free(t_namelist *listwas);
|
|
|
|
/* s_main.c */
|
|
extern int sys_debuglevel;
|
|
extern int sys_verbose;
|
|
extern int sys_noloadbang;
|
|
extern int sys_nogui;
|
|
extern char *sys_guicmd;
|
|
|
|
EXTERN int sys_nearestfontsize(int fontsize);
|
|
EXTERN int sys_hostfontsize(int fontsize);
|
|
|
|
extern int sys_defaultfont;
|
|
extern t_symbol *sys_libdir; /* library directory for auxilliary files */
|
|
|
|
/* s_loader.c */
|
|
int sys_load_lib(char *dirname, char *filename);
|
|
|
|
/* s_audio.c */
|
|
|
|
#define SENDDACS_NO 0 /* return values for sys_send_dacs() */
|
|
#define SENDDACS_YES 1
|
|
#define SENDDACS_SLEPT 2
|
|
|
|
#define DEFDACBLKSIZE 64
|
|
extern int sys_schedblocksize; /* audio block size for scheduler */
|
|
extern int sys_hipriority; /* real-time flag, true if priority boosted */
|
|
extern t_sample *sys_soundout;
|
|
extern t_sample *sys_soundin;
|
|
extern int sys_inchannels;
|
|
extern int sys_outchannels;
|
|
extern int sys_advance_samples; /* scheduler advance in samples */
|
|
extern int sys_blocksize; /* audio I/O block size in sample frames */
|
|
extern float sys_dacsr;
|
|
extern int sys_schedadvance;
|
|
extern int sys_sleepgrain;
|
|
void sys_open_audio(int naudioindev, int *audioindev,
|
|
int nchindev, int *chindev,
|
|
int naudiooutdev, int *audiooutdev, int nchoutdev, int *choutdev,
|
|
int srate, int advance, int enable);
|
|
void sys_close_audio(void);
|
|
|
|
/* s_midi.c */
|
|
void sys_open_midi(int nmidiin, int *midiinvec, int nmidiout, int *midioutvec);
|
|
|
|
/* implemented in the system dependent MIDI code (s_midi_pm.c, etc. ) */
|
|
void sys_do_open_midi(int nmidiin, int *midiinvec,
|
|
int nmidiout, int *midioutvec);
|
|
void sys_close_midi(void);
|
|
void midi_getdevs(char *indevlist, int *nindevs,
|
|
char *outdevlist, int *noutdevs, int maxndev, int devdescsize);
|
|
|
|
int sys_send_dacs(void);
|
|
void sys_reportidle(void);
|
|
void sys_set_priority(int higher);
|
|
void sys_audiobuf(int nbufs);
|
|
void sys_getmeters(float *inmax, float *outmax);
|
|
void sys_listdevs(void);
|
|
void sys_setblocksize(int n);
|
|
|
|
/* s_midi.c */
|
|
#define MAXMIDIINDEV 16 /* max. number of input ports */
|
|
#define MAXMIDIOUTDEV 16 /* max. number of output ports */
|
|
extern int sys_nmidiin;
|
|
extern int sys_nmidiout;
|
|
extern int sys_midiindevlist[];
|
|
extern int sys_midioutdevlist[];
|
|
|
|
EXTERN void sys_putmidimess(int portno, int a, int b, int c);
|
|
EXTERN void sys_putmidibyte(int portno, int a);
|
|
EXTERN void sys_poll_midi(void);
|
|
EXTERN void sys_setmiditimediff(double inbuftime, double outbuftime);
|
|
EXTERN void sys_midibytein(int portno, int byte);
|
|
|
|
/* m_sched.c */
|
|
EXTERN void sys_log_error(int type);
|
|
#define ERR_NOTHING 0
|
|
#define ERR_ADCSLEPT 1
|
|
#define ERR_DACSLEPT 2
|
|
#define ERR_RESYNC 3
|
|
#define ERR_DATALATE 4
|
|
void sched_set_using_dacs(int flag);
|
|
|
|
/* s_inter.c */
|
|
|
|
EXTERN void sys_microsleep(int microsec);
|
|
|
|
EXTERN void sys_bail(int exitcode);
|
|
EXTERN int sys_pollgui(void);
|
|
|
|
EXTERN_STRUCT _socketreceiver;
|
|
#define t_socketreceiver struct _socketreceiver
|
|
|
|
typedef void (*t_socketnotifier)(void *x);
|
|
typedef void (*t_socketreceivefn)(void *x, t_binbuf *b);
|
|
|
|
EXTERN t_socketreceiver *socketreceiver_new(void *owner,
|
|
t_socketnotifier notifier, t_socketreceivefn socketreceivefn, int udp);
|
|
EXTERN void socketreceiver_read(t_socketreceiver *x, int fd);
|
|
EXTERN void sys_sockerror(char *s);
|
|
EXTERN void sys_closesocket(int fd);
|
|
|
|
typedef void (*t_fdpollfn)(void *ptr, int fd);
|
|
EXTERN void sys_addpollfn(int fd, t_fdpollfn fn, void *ptr);
|
|
EXTERN void sys_rmpollfn(int fd);
|
|
#ifdef UNIX
|
|
void sys_setalarm(int microsec);
|
|
void sys_setvirtualalarm( void);
|
|
#endif
|
|
|
|
#define API_ALSA 1
|
|
#define API_OSS 2
|
|
#define API_MMIO 3
|
|
#define API_PORTAUDIO 4
|
|
#define API_JACK 5
|
|
|
|
#ifdef __linux__
|
|
#define API_DEFAULT API_OSS
|
|
#define API_DEFSTRING "OSS"
|
|
#endif
|
|
#ifdef MSW
|
|
#define API_DEFAULT API_MMIO
|
|
#define API_DEFSTRING "MMIO"
|
|
#endif
|
|
#ifdef MACOSX
|
|
#define API_DEFAULT API_PORTAUDIO
|
|
#define API_DEFSTRING "portaudio"
|
|
#endif
|
|
#define DEFAULTAUDIODEV 0
|
|
|
|
#define MAXAUDIOINDEV 4
|
|
#define MAXAUDIOOUTDEV 4
|
|
|
|
#define DEFMIDIDEV 0
|
|
|
|
#define DEFAULTSRATE 44100
|
|
#ifdef MSW
|
|
#define DEFAULTADVANCE 70
|
|
#else
|
|
#define DEFAULTADVANCE 50
|
|
#endif
|
|
|
|
int pa_open_audio(int inchans, int outchans, int rate, t_sample *soundin,
|
|
t_sample *soundout, int framesperbuf, int nbuffers,
|
|
int indeviceno, int outdeviceno);
|
|
void pa_close_audio(void);
|
|
int pa_send_dacs(void);
|
|
void sys_reportidle(void);
|
|
void pa_listdevs(void);
|
|
void pa_getdevs(char *indevlist, int *nindevs,
|
|
char *outdevlist, int *noutdevs, int *canmulti,
|
|
int maxndev, int devdescsize);
|
|
|
|
int oss_open_audio(int naudioindev, int *audioindev, int nchindev,
|
|
int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev,
|
|
int *choutdev, int rate); /* IOhannes */
|
|
void oss_close_audio(void);
|
|
int oss_send_dacs(void);
|
|
void oss_reportidle(void);
|
|
void oss_getdevs(char *indevlist, int *nindevs,
|
|
char *outdevlist, int *noutdevs, int *canmulti,
|
|
int maxndev, int devdescsize);
|
|
|
|
int alsa_open_audio(int naudioindev, int *audioindev, int nchindev,
|
|
int *chindev, int naudiooutdev, int *audiooutdev, int nchoutdev,
|
|
int *choutdev, int rate);
|
|
void alsa_close_audio(void);
|
|
int alsa_send_dacs(void);
|
|
void alsa_reportidle(void);
|
|
void alsa_getdevs(char *indevlist, int *nindevs,
|
|
char *outdevlist, int *noutdevs, int *canmulti,
|
|
int maxndev, int devdescsize);
|
|
|
|
int jack_open_audio(int wantinchans, int wantoutchans, int srate);
|
|
void jack_close_audio(void);
|
|
int jack_send_dacs(void);
|
|
void jack_reportidle(void);
|
|
void jack_listdevs(void);
|
|
|
|
void mmio_open_audio(int naudioindev, int *audioindev,
|
|
int nchindev, int *chindev, int naudiooutdev, int *audiooutdev,
|
|
int nchoutdev, int *choutdev, int rate);
|
|
void mmio_close_audio( void);
|
|
void mmio_reportidle(void);
|
|
int mmio_send_dacs(void);
|
|
void mmio_getdevs(char *indevlist, int *nindevs,
|
|
char *outdevlist, int *noutdevs, int *canmulti,
|
|
int maxndev, int devdescsize);
|
|
|
|
void sys_listmididevs(void);
|
|
void sys_set_audio_api(int whichapi);
|
|
void sys_get_audio_apis(char *buf);
|
|
extern int sys_audioapi;
|
|
void sys_set_audio_state(int onoff);
|
|
|
|
/* API dependent audio flags and settings */
|
|
void oss_set32bit( void);
|
|
void linux_alsa_devname(char *devname);
|