rtaudio_c: add rtaudio_num_compiled_api()
[rtaudio-cdist.git] / rtaudio_c.h
1 #ifndef RTAUDIO_C_H
2 #define RTAUDIO_C_H
3
4 #if defined(RTAUDIO_EXPORT)
5 #if defined _WIN32 || defined __CYGWIN__
6 #define RTAUDIOAPI __declspec(dllexport)
7 #else
8 #define RTAUDIOAPI __attribute__((visibility("default")))
9 #endif
10 #else
11 #define RTAUDIOAPI //__declspec(dllimport)
12 #endif
13
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17
18 typedef unsigned long rtaudio_format_t;
19
20 #define RTAUDIO_FORMAT_SINT8 0x01
21 #define RTAUDIO_FORMAT_SINT16 0x02
22 #define RTAUDIO_FORMAT_SINT24 0x04
23 #define RTAUDIO_FORMAT_SINT32 0x08
24 #define RTAUDIO_FORMAT_FLOAT32 0x10
25 #define RTAUDIO_FORMAT_FLOAT64 0x20
26
27 typedef unsigned int rtaudio_stream_flags_t;
28
29 #define RTAUDIO_FLAGS_NONINTERLEAVED 0x1
30 #define RTAUDIO_FLAGS_MINIMIZE_LATENCY 0x2
31 #define RTAUDIO_FLAGS_HOG_DEVICE 0x4
32 #define RTAUDIO_FLAGS_SCHEDULE_REALTIME 0x8
33 #define RTAUDIO_FLAGS_ALSA_USE_DEFAULT 0x10
34
35 typedef unsigned int rtaudio_stream_status_t;
36
37 #define RTAUDIO_STATUS_INPUT_OVERFLOW 0x1
38 #define RTAUDIO_STATUS_OUTPUT_UNDERFLOW 0x2
39
40 typedef int (*rtaudio_cb_t)(void *out, void *in, unsigned int nFrames,
41                             double stream_time, rtaudio_stream_status_t status,
42                             void *userdata);
43
44 typedef enum rtaudio_error {
45   RTAUDIO_ERROR_WARNING,
46   RTAUDIO_ERROR_DEBUG_WARNING,
47   RTAUDIO_ERROR_UNSPECIFIED,
48   RTAUDIO_ERROR_NO_DEVICES_FOUND,
49   RTAUDIO_ERROR_INVALID_DEVICE,
50   RTAUDIO_ERROR_MEMORY_ERROR,
51   RTAUDIO_ERROR_INVALID_PARAMETER,
52   RTAUDIO_ERROR_INVALID_USE,
53   RTAUDIO_ERROR_DRIVER_ERROR,
54   RTAUDIO_ERROR_SYSTEM_ERROR,
55   RTAUDIO_ERROR_THREAD_ERROR,
56 } rtaudio_error_t;
57
58 typedef void (*rtaudio_error_cb_t)(rtaudio_error_t err, const char *msg);
59
60 typedef enum rtaudio_api {
61   RTAUDIO_API_UNSPECIFIED,
62   RTAUDIO_API_LINUX_ALSA,
63   RTAUDIO_API_LINUX_PULSE,
64   RTAUDIO_API_LINUX_OSS,
65   RTAUDIO_API_UNIX_JACK,
66   RTAUDIO_API_MACOSX_CORE,
67   RTAUDIO_API_WINDOWS_WASAPI,
68   RTAUDIO_API_WINDOWS_ASIO,
69   RTAUDIO_API_WINDOWS_DS,
70   RTAUDIO_API_DUMMY,
71   RTAUDIO_API_NUM,
72 } rtaudio_api_t;
73
74 #define NUM_SAMPLE_RATES 16
75 #define MAX_NAME_LENGTH 512
76 typedef struct rtaudio_device_info {
77   int probed;
78   unsigned int output_channels;
79   unsigned int input_channels;
80   unsigned int duplex_channels;
81
82   int is_default_output;
83   int is_default_input;
84
85   rtaudio_format_t native_formats;
86
87   unsigned int preferred_sample_rate;
88   int sample_rates[NUM_SAMPLE_RATES];
89
90   char name[MAX_NAME_LENGTH];
91 } rtaudio_device_info_t;
92
93 typedef struct rtaudio_stream_parameters {
94   unsigned int device_id;
95   unsigned int num_channels;
96   unsigned int first_channel;
97 } rtaudio_stream_parameters_t;
98
99 typedef struct rtaudio_stream_options {
100   rtaudio_stream_flags_t flags;
101   unsigned int num_buffers;
102   int priority;
103   char name[MAX_NAME_LENGTH];
104 } rtaudio_stream_options_t;
105
106 typedef struct rtaudio *rtaudio_t;
107
108 RTAUDIOAPI const char *rtaudio_version(void);
109 RTAUDIOAPI const unsigned int rtaudio_num_compiled_api(void);
110 RTAUDIOAPI const rtaudio_api_t *rtaudio_compiled_api(void);
111 RTAUDIOAPI const char *rtaudio_api_name(rtaudio_api_t api);
112 RTAUDIOAPI const char *rtaudio_api_display_name(rtaudio_api_t api);
113 RTAUDIOAPI rtaudio_api_t rtaudio_compiled_api_by_name(const char *name);
114
115 RTAUDIOAPI const char *rtaudio_error(rtaudio_t audio);
116
117 RTAUDIOAPI rtaudio_t rtaudio_create(rtaudio_api_t api);
118 RTAUDIOAPI void rtaudio_destroy(rtaudio_t audio);
119
120 RTAUDIOAPI rtaudio_api_t rtaudio_current_api(rtaudio_t audio);
121
122 RTAUDIOAPI int rtaudio_device_count(rtaudio_t audio);
123 RTAUDIOAPI rtaudio_device_info_t rtaudio_get_device_info(rtaudio_t audio,
124                                                          int i);
125 RTAUDIOAPI unsigned int rtaudio_get_default_output_device(rtaudio_t audio);
126 RTAUDIOAPI unsigned int rtaudio_get_default_input_device(rtaudio_t audio);
127
128 RTAUDIOAPI int
129 rtaudio_open_stream(rtaudio_t audio, rtaudio_stream_parameters_t *output_params,
130                     rtaudio_stream_parameters_t *input_params,
131                     rtaudio_format_t format, unsigned int sample_rate,
132                     unsigned int *buffer_frames, rtaudio_cb_t cb,
133                     void *userdata, rtaudio_stream_options_t *options,
134                     rtaudio_error_cb_t errcb);
135 RTAUDIOAPI void rtaudio_close_stream(rtaudio_t audio);
136 RTAUDIOAPI int rtaudio_start_stream(rtaudio_t audio);
137 RTAUDIOAPI int rtaudio_stop_stream(rtaudio_t audio);
138 RTAUDIOAPI int rtaudio_abort_stream(rtaudio_t audio);
139
140 RTAUDIOAPI int rtaudio_is_stream_open(rtaudio_t audio);
141 RTAUDIOAPI int rtaudio_is_stream_running(rtaudio_t audio);
142
143 RTAUDIOAPI double rtaudio_get_stream_time(rtaudio_t audio);
144 RTAUDIOAPI void rtaudio_set_stream_time(rtaudio_t audio, double time);
145 RTAUDIOAPI int rtaudio_get_stream_latency(rtaudio_t audio);
146 RTAUDIOAPI unsigned int rtaudio_get_stream_sample_rate(rtaudio_t audio);
147
148 RTAUDIOAPI void rtaudio_show_warnings(rtaudio_t audio, int show);
149
150 #ifdef __cplusplus
151 }
152 #endif
153 #endif /* RTAUDIO_C_H */