You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

154 lines
4.7KB

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