basswasapi.h 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. /*
  2. BASSWASAPI 2.4 C/C++ header file
  3. Copyright (c) 2009-2020 Un4seen Developments Ltd.
  4. See the BASSWASAPI.CHM file for more detailed documentation
  5. */
  6. #ifndef BASSWASAPI_H
  7. #define BASSWASAPI_H
  8. #include "bass.h"
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. #ifndef BASSWASAPIDEF
  13. #define BASSWASAPIDEF(f) WINAPI f
  14. #endif
  15. // Additional error codes returned by BASS_ErrorGetCode
  16. #define BASS_ERROR_WASAPI 5000 // no WASAPI
  17. #define BASS_ERROR_WASAPI_BUFFER 5001 // buffer size is invalid
  18. #define BASS_ERROR_WASAPI_CATEGORY 5002 // can't set category
  19. #define BASS_ERROR_WASAPI_DENIED 5003 // access denied
  20. // Device info structure
  21. typedef struct {
  22. const char *name;
  23. const char *id;
  24. DWORD type;
  25. DWORD flags;
  26. float minperiod;
  27. float defperiod;
  28. DWORD mixfreq;
  29. DWORD mixchans;
  30. } BASS_WASAPI_DEVICEINFO;
  31. typedef struct {
  32. DWORD initflags;
  33. DWORD freq;
  34. DWORD chans;
  35. DWORD format;
  36. DWORD buflen;
  37. float volmax;
  38. float volmin;
  39. float volstep;
  40. } BASS_WASAPI_INFO;
  41. // BASS_WASAPI_DEVICEINFO "type"
  42. #define BASS_WASAPI_TYPE_NETWORKDEVICE 0
  43. #define BASS_WASAPI_TYPE_SPEAKERS 1
  44. #define BASS_WASAPI_TYPE_LINELEVEL 2
  45. #define BASS_WASAPI_TYPE_HEADPHONES 3
  46. #define BASS_WASAPI_TYPE_MICROPHONE 4
  47. #define BASS_WASAPI_TYPE_HEADSET 5
  48. #define BASS_WASAPI_TYPE_HANDSET 6
  49. #define BASS_WASAPI_TYPE_DIGITAL 7
  50. #define BASS_WASAPI_TYPE_SPDIF 8
  51. #define BASS_WASAPI_TYPE_HDMI 9
  52. #define BASS_WASAPI_TYPE_UNKNOWN 10
  53. // BASS_WASAPI_DEVICEINFO flags
  54. #define BASS_DEVICE_ENABLED 1
  55. #define BASS_DEVICE_DEFAULT 2
  56. #define BASS_DEVICE_INIT 4
  57. #define BASS_DEVICE_LOOPBACK 8
  58. #define BASS_DEVICE_INPUT 16
  59. #define BASS_DEVICE_UNPLUGGED 32
  60. #define BASS_DEVICE_DISABLED 64
  61. // BASS_WASAPI_Init flags
  62. #define BASS_WASAPI_EXCLUSIVE 1
  63. #define BASS_WASAPI_AUTOFORMAT 2
  64. #define BASS_WASAPI_BUFFER 4
  65. #define BASS_WASAPI_EVENT 16
  66. #define BASS_WASAPI_SAMPLES 32
  67. #define BASS_WASAPI_DITHER 64
  68. #define BASS_WASAPI_RAW 128
  69. #define BASS_WASAPI_ASYNC 0x100
  70. #define BASS_WASAPI_CATEGORY_MASK 0xf000
  71. #define BASS_WASAPI_CATEGORY_OTHER 0x0000
  72. #define BASS_WASAPI_CATEGORY_FOREGROUNDONLYMEDIA 0x1000
  73. #define BASS_WASAPI_CATEGORY_BACKGROUNDCAPABLEMEDIA 0x2000
  74. #define BASS_WASAPI_CATEGORY_COMMUNICATIONS 0x3000
  75. #define BASS_WASAPI_CATEGORY_ALERTS 0x4000
  76. #define BASS_WASAPI_CATEGORY_SOUNDEFFECTS 0x5000
  77. #define BASS_WASAPI_CATEGORY_GAMEEFFECTS 0x6000
  78. #define BASS_WASAPI_CATEGORY_GAMEMEDIA 0x7000
  79. #define BASS_WASAPI_CATEGORY_GAMECHAT 0x8000
  80. #define BASS_WASAPI_CATEGORY_SPEECH 0x9000
  81. #define BASS_WASAPI_CATEGORY_MOVIE 0xa000
  82. #define BASS_WASAPI_CATEGORY_MEDIA 0xb000
  83. // BASS_WASAPI_INFO "format"
  84. #define BASS_WASAPI_FORMAT_FLOAT 0
  85. #define BASS_WASAPI_FORMAT_8BIT 1
  86. #define BASS_WASAPI_FORMAT_16BIT 2
  87. #define BASS_WASAPI_FORMAT_24BIT 3
  88. #define BASS_WASAPI_FORMAT_32BIT 4
  89. // BASS_WASAPI_Set/GetVolume modes
  90. #define BASS_WASAPI_CURVE_DB 0
  91. #define BASS_WASAPI_CURVE_LINEAR 1
  92. #define BASS_WASAPI_CURVE_WINDOWS 2
  93. #define BASS_WASAPI_VOL_SESSION 8
  94. typedef DWORD (CALLBACK WASAPIPROC)(void *buffer, DWORD length, void *user);
  95. /* WASAPI callback function.
  96. buffer : Buffer containing the sample data
  97. length : Number of bytes
  98. user : The 'user' parameter given when calling BASS_WASAPI_Init
  99. RETURN : The number of bytes written (output devices), 0/1 = stop/continue (input devices) */
  100. // Special WASAPIPROCs
  101. #define WASAPIPROC_PUSH (WASAPIPROC*)0 // push output
  102. #define WASAPIPROC_BASS (WASAPIPROC*)-1 // BASS channel
  103. typedef void (CALLBACK WASAPINOTIFYPROC)(DWORD notify, DWORD device, void *user);
  104. /* WASAPI device notification callback function.
  105. notify : The notification (BASS_WASAPI_NOTIFY_xxx)
  106. device : Device that the notification applies to
  107. user : The 'user' parameter given when calling BASS_WASAPI_SetNotify */
  108. // Device notifications
  109. #define BASS_WASAPI_NOTIFY_ENABLED 0
  110. #define BASS_WASAPI_NOTIFY_DISABLED 1
  111. #define BASS_WASAPI_NOTIFY_DEFOUTPUT 2
  112. #define BASS_WASAPI_NOTIFY_DEFINPUT 3
  113. #define BASS_WASAPI_NOTIFY_FAIL 0x100
  114. DWORD BASSWASAPIDEF(BASS_WASAPI_GetVersion)();
  115. BOOL BASSWASAPIDEF(BASS_WASAPI_SetNotify)(WASAPINOTIFYPROC *proc, void *user);
  116. BOOL BASSWASAPIDEF(BASS_WASAPI_GetDeviceInfo)(DWORD device, BASS_WASAPI_DEVICEINFO *info);
  117. float BASSWASAPIDEF(BASS_WASAPI_GetDeviceLevel)(DWORD device, int chan);
  118. BOOL BASSWASAPIDEF(BASS_WASAPI_SetDevice)(DWORD device);
  119. DWORD BASSWASAPIDEF(BASS_WASAPI_GetDevice)();
  120. DWORD BASSWASAPIDEF(BASS_WASAPI_CheckFormat)(DWORD device, DWORD freq, DWORD chans, DWORD flags);
  121. BOOL BASSWASAPIDEF(BASS_WASAPI_Init)(int device, DWORD freq, DWORD chans, DWORD flags, float buffer, float period, WASAPIPROC *proc, void *user);
  122. BOOL BASSWASAPIDEF(BASS_WASAPI_Free)();
  123. BOOL BASSWASAPIDEF(BASS_WASAPI_GetInfo)(BASS_WASAPI_INFO *info);
  124. float BASSWASAPIDEF(BASS_WASAPI_GetCPU)();
  125. BOOL BASSWASAPIDEF(BASS_WASAPI_Lock)(BOOL lock);
  126. BOOL BASSWASAPIDEF(BASS_WASAPI_Start)();
  127. BOOL BASSWASAPIDEF(BASS_WASAPI_Stop)(BOOL reset);
  128. BOOL BASSWASAPIDEF(BASS_WASAPI_IsStarted)();
  129. BOOL BASSWASAPIDEF(BASS_WASAPI_SetVolume)(DWORD mode, float volume);
  130. float BASSWASAPIDEF(BASS_WASAPI_GetVolume)(DWORD mode);
  131. BOOL BASSWASAPIDEF(BASS_WASAPI_SetMute)(DWORD mode, BOOL mute);
  132. BOOL BASSWASAPIDEF(BASS_WASAPI_GetMute)(DWORD mode);
  133. DWORD BASSWASAPIDEF(BASS_WASAPI_PutData)(void *buffer, DWORD length);
  134. DWORD BASSWASAPIDEF(BASS_WASAPI_GetData)(void *buffer, DWORD length);
  135. DWORD BASSWASAPIDEF(BASS_WASAPI_GetLevel)();
  136. BOOL BASSWASAPIDEF(BASS_WASAPI_GetLevelEx)(float *levels, float length, DWORD flags);
  137. #ifdef __cplusplus
  138. }
  139. #endif
  140. #endif