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