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.

147 lines
4.5KB

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