Bass.h
上传用户:sz83729876
上传日期:2013-03-07
资源大小:4140k
文件大小:59k
源码类别:

OpenGL

开发平台:

Windows_Unix

  1. /* BASS 1.7 C/C++ header file, copyright (c) 1999-2002 Ian Luck.
  2.    Please report bugs/suggestions/etc... to bass@un4seen.com
  3.    See the BASS.CHM file for more complete documentation */
  4. #ifndef BASS_H
  5. #define BASS_H
  6. #include <wtypes.h>
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. #ifndef BASSDEF
  11. #define BASSDEF(f) WINAPI f
  12. #endif
  13. typedef unsigned __int64 QWORD; // 64-bit
  14. typedef DWORD HMUSIC; // MOD music handle
  15. typedef DWORD HSAMPLE; // sample handle
  16. typedef DWORD HCHANNEL; // playing sample's channel handle
  17. typedef DWORD HSTREAM; // sample stream handle
  18. typedef DWORD HSYNC; // synchronizer handle
  19. typedef DWORD HDSP; // DSP handle
  20. typedef DWORD HFX; // DX8 effect handle
  21. // Error codes returned by BASS_GetErrorCode
  22. #define BASS_OK 0 // all is OK
  23. #define BASS_ERROR_MEM 1 // memory error
  24. #define BASS_ERROR_FILEOPEN 2 // can't open the file
  25. #define BASS_ERROR_DRIVER 3 // can't find a free/valid driver
  26. #define BASS_ERROR_BUFLOST 4 // the sample buffer was lost - please report this!
  27. #define BASS_ERROR_HANDLE 5 // invalid handle
  28. #define BASS_ERROR_FORMAT 6 // unsupported format
  29. #define BASS_ERROR_POSITION 7 // invalid playback position
  30. #define BASS_ERROR_INIT 8 // BASS_Init has not been successfully called
  31. #define BASS_ERROR_START 9 // BASS_Start has not been successfully called
  32. #define BASS_ERROR_INITCD 10 // can't initialize CD
  33. #define BASS_ERROR_CDINIT 11 // BASS_CDInit has not been successfully called
  34. #define BASS_ERROR_NOCD 12 // no CD in drive
  35. #define BASS_ERROR_CDTRACK 13 // can't play the selected CD track
  36. #define BASS_ERROR_ALREADY 14 // already initialized
  37. #define BASS_ERROR_CDVOL 15 // CD has no volume control
  38. #define BASS_ERROR_NOPAUSE 16 // not paused
  39. #define BASS_ERROR_NOTAUDIO 17 // not an audio track
  40. #define BASS_ERROR_NOCHAN 18 // can't get a free channel
  41. #define BASS_ERROR_ILLTYPE 19 // an illegal type was specified
  42. #define BASS_ERROR_ILLPARAM 20 // an illegal parameter was specified
  43. #define BASS_ERROR_NO3D 21 // no 3D support
  44. #define BASS_ERROR_NOEAX 22 // no EAX support
  45. #define BASS_ERROR_DEVICE 23 // illegal device number
  46. #define BASS_ERROR_NOPLAY 24 // not playing
  47. #define BASS_ERROR_FREQ 25 // illegal sample rate
  48. #define BASS_ERROR_NOA3D 26 // A3D.DLL is not installed
  49. #define BASS_ERROR_NOTFILE 27 // the stream is not a file stream (WAV/MP3/MP2/MP1/OGG)
  50. #define BASS_ERROR_NOHW 29 // no hardware voices available
  51. #define BASS_ERROR_EMPTY 31 // the MOD music has no sequence data
  52. #define BASS_ERROR_NONET 32 // no internet connection could be opened
  53. #define BASS_ERROR_CREATE 33 // couldn't create the file
  54. #define BASS_ERROR_NOFX 34 // effects are not available
  55. #define BASS_ERROR_PLAYING 35 // the channel is playing
  56. #define BASS_ERROR_NOTAVAIL 37 // requested data is not available
  57. #define BASS_ERROR_DECODE 38 // the channel is a "decoding channel"
  58. #define BASS_ERROR_DX 39 // a sufficient DirectX version is not installed
  59. #define BASS_ERROR_TIMEOUT 40 // connection timedout
  60. #define BASS_ERROR_UNKNOWN -1 // some other mystery error
  61. // Device setup flags
  62. #define BASS_DEVICE_8BITS 1 // use 8 bit resolution, else 16 bit
  63. #define BASS_DEVICE_MONO 2 // use mono, else stereo
  64. #define BASS_DEVICE_3D 4 // enable 3D functionality
  65. /* If the BASS_DEVICE_3D flag is not specified when initilizing BASS,
  66. then the 3D flags (BASS_SAMPLE_3D and BASS_MUSIC_3D) are ignored when
  67. loading/creating a sample/stream/music. */
  68. #define BASS_DEVICE_LEAVEVOL 32 // leave the volume as it is
  69. #define BASS_DEVICE_NOTHREAD 128 // update buffers manually (using BASS_Update)
  70. #define BASS_DEVICE_LATENCY 256 // calculate device latency (BASS_INFO struct)
  71. #define BASS_DEVICE_VOL1000 512 // 0-1000 volume range (else 0-100)
  72. #define BASS_DEVICE_BALANCE 1024 // allow left/right balance control with BASS_SetVolume
  73. // DirectSound interfaces (for use with BASS_GetDSoundObject)
  74. #define BASS_OBJECT_DS 1 // IDirectSound
  75. #define BASS_OBJECT_DS3DL 2 // IDirectSound3DListener
  76. typedef struct {
  77. DWORD size; // size of this struct (set this before calling the function)
  78. DWORD flags; // device capabilities (DSCAPS_xxx flags)
  79. DWORD hwsize; // size of total device hardware memory
  80. DWORD hwfree; // size of free device hardware memory
  81. DWORD freesam; // number of free sample slots in the hardware
  82. DWORD free3d; // number of free 3D sample slots in the hardware
  83. DWORD minrate; // min sample rate supported by the hardware
  84. DWORD maxrate; // max sample rate supported by the hardware
  85. BOOL eax; // device supports EAX? (always FALSE if BASS_DEVICE_3D was not used)
  86. DWORD minbuf; // recommended minimum buffer length in ms (requires BASS_DEVICE_LATENCY)
  87. DWORD dsver; // DirectSound version (use to check for DX5/7/8 functions)
  88. DWORD latency; // delay (in ms) before start of playback (requires BASS_DEVICE_LATENCY)
  89. } BASS_INFO;
  90. // BASS_INFO flags (from DSOUND.H)
  91. #define DSCAPS_CONTINUOUSRATE 0x00000010
  92. /* supports all sample rates between min/maxrate */
  93. #define DSCAPS_EMULDRIVER 0x00000020
  94. /* device does NOT have hardware DirectSound support */
  95. #define DSCAPS_CERTIFIED 0x00000040
  96. /* device driver has been certified by Microsoft */
  97. /* The following flags tell what type of samples are supported by HARDWARE
  98. mixing, all these formats are supported by SOFTWARE mixing */
  99. #define DSCAPS_SECONDARYMONO 0x00000100 // mono
  100. #define DSCAPS_SECONDARYSTEREO 0x00000200 // stereo
  101. #define DSCAPS_SECONDARY8BIT 0x00000400 // 8 bit
  102. #define DSCAPS_SECONDARY16BIT 0x00000800 // 16 bit
  103. typedef struct {
  104. DWORD size; // size of this struct (set this before calling the function)
  105. DWORD flags; // device capabilities (DSCCAPS_xxx flags)
  106. DWORD formats; // supported standard formats (WAVE_FORMAT_xxx flags)
  107. DWORD inputs; // number of inputs
  108. BOOL singlein; // TRUE = only 1 input can be set at a time
  109. } BASS_RECORDINFO;
  110. // BASS_RECORDINFO flags (from DSOUND.H)
  111. #define DSCCAPS_EMULDRIVER DSCAPS_EMULDRIVER
  112. /* device does NOT have hardware DirectSound recording support */
  113. #define DSCCAPS_CERTIFIED DSCAPS_CERTIFIED
  114. /* device driver has been certified by Microsoft */
  115. // defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H)
  116. #define WAVE_FORMAT_1M08       0x00000001       /* 11.025 kHz, Mono,   8-bit  */
  117. #define WAVE_FORMAT_1S08       0x00000002       /* 11.025 kHz, Stereo, 8-bit  */
  118. #define WAVE_FORMAT_1M16       0x00000004       /* 11.025 kHz, Mono,   16-bit */
  119. #define WAVE_FORMAT_1S16       0x00000008       /* 11.025 kHz, Stereo, 16-bit */
  120. #define WAVE_FORMAT_2M08       0x00000010       /* 22.05  kHz, Mono,   8-bit  */
  121. #define WAVE_FORMAT_2S08       0x00000020       /* 22.05  kHz, Stereo, 8-bit  */
  122. #define WAVE_FORMAT_2M16       0x00000040       /* 22.05  kHz, Mono,   16-bit */
  123. #define WAVE_FORMAT_2S16       0x00000080       /* 22.05  kHz, Stereo, 16-bit */
  124. #define WAVE_FORMAT_4M08       0x00000100       /* 44.1   kHz, Mono,   8-bit  */
  125. #define WAVE_FORMAT_4S08       0x00000200       /* 44.1   kHz, Stereo, 8-bit  */
  126. #define WAVE_FORMAT_4M16       0x00000400       /* 44.1   kHz, Mono,   16-bit */
  127. #define WAVE_FORMAT_4S16       0x00000800       /* 44.1   kHz, Stereo, 16-bit */
  128. // Music flags
  129. #define BASS_MUSIC_RAMP 1 // normal ramping
  130. #define BASS_MUSIC_RAMPS 2 // sensitive ramping
  131. /* Ramping doesn't take a lot of extra processing and improves
  132. the sound quality by removing "clicks". Sensitive ramping will
  133. leave sharp attacked samples, unlike normal ramping. */
  134. #define BASS_MUSIC_LOOP 4 // loop music
  135. #define BASS_MUSIC_FT2MOD 16 // play .MOD as FastTracker 2 does
  136. #define BASS_MUSIC_PT1MOD 32 // play .MOD as ProTracker 1 does
  137. #define BASS_MUSIC_MONO 64 // force mono mixing (less CPU usage)
  138. #define BASS_MUSIC_3D 128 // enable 3D functionality
  139. #define BASS_MUSIC_POSRESET 256 // stop all notes when moving position
  140. #define BASS_MUSIC_SURROUND 512 // surround sound
  141. #define BASS_MUSIC_SURROUND2 1024 // surround sound (mode 2)
  142. #define BASS_MUSIC_STOPBACK 2048 // stop the music on a backwards jump effect
  143. #define BASS_MUSIC_FX 4096 // enable old implementation of DX8 effects
  144. #define BASS_MUSIC_CALCLEN 8192 // calculate playback length
  145. #define BASS_MUSIC_DECODE 0x200000// don't play the music, only decode (BASS_ChannelGetData)
  146. #define BASS_MUSIC_NOSAMPLE 0x400000// don't load the samples
  147. // Sample info structure & flags
  148. typedef struct {
  149. DWORD freq; // default playback rate
  150. DWORD volume; // default volume (0-100)
  151. int pan; // default pan (-100=left, 0=middle, 100=right)
  152. DWORD flags; // BASS_SAMPLE_xxx flags
  153. DWORD length; // length (in samples, not bytes)
  154. DWORD max; // maximum simultaneous playbacks
  155. /* The following are the sample's default 3D attributes (if the sample
  156. is 3D, BASS_SAMPLE_3D is in flags) see BASS_ChannelSet3DAttributes */
  157. DWORD mode3d; // BASS_3DMODE_xxx mode
  158. float mindist; // minimum distance
  159. float maxdist; // maximum distance
  160. DWORD iangle; // angle of inside projection cone
  161. DWORD oangle; // angle of outside projection cone
  162. DWORD outvol; // delta-volume outside the projection cone
  163. /* The following are the defaults used if the sample uses the DirectX 7
  164. voice allocation/management features. */
  165. DWORD vam; // voice allocation/management flags (BASS_VAM_xxx)
  166. DWORD priority; // priority (0=lowest, 0xffffffff=highest)
  167. } BASS_SAMPLE;
  168. #define BASS_SAMPLE_8BITS 1 // 8 bit, else 16 bit
  169. #define BASS_SAMPLE_MONO 2 // mono, else stereo
  170. #define BASS_SAMPLE_LOOP 4 // looped
  171. #define BASS_SAMPLE_3D 8 // 3D functionality enabled
  172. #define BASS_SAMPLE_SOFTWARE 16 // it's NOT using hardware mixing
  173. #define BASS_SAMPLE_MUTEMAX 32 // muted at max distance (3D only)
  174. #define BASS_SAMPLE_VAM 64 // uses the DX7 voice allocation & management
  175. #define BASS_SAMPLE_FX 128 // old implementation of DX8 effects are enabled
  176. #define BASS_SAMPLE_OVER_VOL 0x10000 // override lowest volume
  177. #define BASS_SAMPLE_OVER_POS 0x20000 // override longest playing
  178. #define BASS_SAMPLE_OVER_DIST 0x30000 // override furthest from listener (3D only)
  179. #define BASS_MP3_HALFRATE 0x10000 // reduced quality MP3/MP2/MP1 (half sample rate)
  180. #define BASS_MP3_SETPOS 0x20000 // enable pin-point seeking on the MP3/MP2/MP1/OGG
  181. #define BASS_STREAM_AUTOFREE 0x40000 // automatically free the stream when it stop/ends
  182. #define BASS_STREAM_RESTRATE 0x80000 // restrict the download rate of internet file streams
  183. #define BASS_STREAM_BLOCK 0x100000// download/play internet file stream (MPx/OGG) in small blocks
  184. #define BASS_STREAM_DECODE 0x200000// don't play the stream, only decode (BASS_ChannelGetData)
  185. #define BASS_STREAM_META 0x400000// request metadata from a Shoutcast stream
  186. #define BASS_STREAM_FILEPROC 0x800000// use a STREAMFILEPROC callback
  187. // DX7 voice allocation flags
  188. #define BASS_VAM_HARDWARE 1
  189. /* Play the sample in hardware. If no hardware voices are available then
  190. the "play" call will fail */
  191. #define BASS_VAM_SOFTWARE 2
  192. /* Play the sample in software (ie. non-accelerated). No other VAM flags
  193. may be used together with this flag. */
  194. // DX7 voice management flags
  195. /* These flags enable hardware resource stealing... if the hardware has no
  196. available voices, a currently playing buffer will be stopped to make room for
  197. the new buffer. NOTE: only samples loaded/created with the BASS_SAMPLE_VAM
  198. flag are considered for termination by the DX7 voice management. */
  199. #define BASS_VAM_TERM_TIME 4
  200. /* If there are no free hardware voices, the buffer to be terminated will be
  201. the one with the least time left to play. */
  202. #define BASS_VAM_TERM_DIST 8
  203. /* If there are no free hardware voices, the buffer to be terminated will be
  204. one that was loaded/created with the BASS_SAMPLE_MUTEMAX flag and is beyond
  205. it's max distance. If there are no buffers that match this criteria, then the
  206. "play" call will fail. */
  207. #define BASS_VAM_TERM_PRIO 16
  208. /* If there are no free hardware voices, the buffer to be terminated will be
  209. the one with the lowest priority. */
  210. // 3D vector (for 3D positions/velocities/orientations)
  211. typedef struct {
  212. float x; // +=right, -=left
  213. float y; // +=up, -=down
  214. float z; // +=front, -=behind
  215. } BASS_3DVECTOR;
  216. // 3D channel modes
  217. #define BASS_3DMODE_NORMAL 0
  218. /* normal 3D processing */
  219. #define BASS_3DMODE_RELATIVE 1
  220. /* The channel's 3D position (position/velocity/orientation) are relative to
  221. the listener. When the listener's position/velocity/orientation is changed
  222. with BASS_Set3DPosition, the channel's position relative to the listener does
  223. not change. */
  224. #define BASS_3DMODE_OFF 2
  225. /* Turn off 3D processing on the channel, the sound will be played
  226. in the center. */
  227. // EAX environments, use with BASS_SetEAXParameters
  228. enum
  229. {
  230.     EAX_ENVIRONMENT_GENERIC,
  231.     EAX_ENVIRONMENT_PADDEDCELL,
  232.     EAX_ENVIRONMENT_ROOM,
  233.     EAX_ENVIRONMENT_BATHROOM,
  234.     EAX_ENVIRONMENT_LIVINGROOM,
  235.     EAX_ENVIRONMENT_STONEROOM,
  236.     EAX_ENVIRONMENT_AUDITORIUM,
  237.     EAX_ENVIRONMENT_CONCERTHALL,
  238.     EAX_ENVIRONMENT_CAVE,
  239.     EAX_ENVIRONMENT_ARENA,
  240.     EAX_ENVIRONMENT_HANGAR,
  241.     EAX_ENVIRONMENT_CARPETEDHALLWAY,
  242.     EAX_ENVIRONMENT_HALLWAY,
  243.     EAX_ENVIRONMENT_STONECORRIDOR,
  244.     EAX_ENVIRONMENT_ALLEY,
  245.     EAX_ENVIRONMENT_FOREST,
  246.     EAX_ENVIRONMENT_CITY,
  247.     EAX_ENVIRONMENT_MOUNTAINS,
  248.     EAX_ENVIRONMENT_QUARRY,
  249.     EAX_ENVIRONMENT_PLAIN,
  250.     EAX_ENVIRONMENT_PARKINGLOT,
  251.     EAX_ENVIRONMENT_SEWERPIPE,
  252.     EAX_ENVIRONMENT_UNDERWATER,
  253.     EAX_ENVIRONMENT_DRUGGED,
  254.     EAX_ENVIRONMENT_DIZZY,
  255.     EAX_ENVIRONMENT_PSYCHOTIC,
  256.     EAX_ENVIRONMENT_COUNT // total number of environments
  257. };
  258. // EAX presets, usage: BASS_SetEAXParameters(EAX_PRESET_xxx)
  259. #define EAX_PRESET_GENERIC         EAX_ENVIRONMENT_GENERIC,0.5F,1.493F,0.5F
  260. #define EAX_PRESET_PADDEDCELL      EAX_ENVIRONMENT_PADDEDCELL,0.25F,0.1F,0.0F
  261. #define EAX_PRESET_ROOM            EAX_ENVIRONMENT_ROOM,0.417F,0.4F,0.666F
  262. #define EAX_PRESET_BATHROOM        EAX_ENVIRONMENT_BATHROOM,0.653F,1.499F,0.166F
  263. #define EAX_PRESET_LIVINGROOM      EAX_ENVIRONMENT_LIVINGROOM,0.208F,0.478F,0.0F
  264. #define EAX_PRESET_STONEROOM       EAX_ENVIRONMENT_STONEROOM,0.5F,2.309F,0.888F
  265. #define EAX_PRESET_AUDITORIUM      EAX_ENVIRONMENT_AUDITORIUM,0.403F,4.279F,0.5F
  266. #define EAX_PRESET_CONCERTHALL     EAX_ENVIRONMENT_CONCERTHALL,0.5F,3.961F,0.5F
  267. #define EAX_PRESET_CAVE            EAX_ENVIRONMENT_CAVE,0.5F,2.886F,1.304F
  268. #define EAX_PRESET_ARENA           EAX_ENVIRONMENT_ARENA,0.361F,7.284F,0.332F
  269. #define EAX_PRESET_HANGAR          EAX_ENVIRONMENT_HANGAR,0.5F,10.0F,0.3F
  270. #define EAX_PRESET_CARPETEDHALLWAY EAX_ENVIRONMENT_CARPETEDHALLWAY,0.153F,0.259F,2.0F
  271. #define EAX_PRESET_HALLWAY         EAX_ENVIRONMENT_HALLWAY,0.361F,1.493F,0.0F
  272. #define EAX_PRESET_STONECORRIDOR   EAX_ENVIRONMENT_STONECORRIDOR,0.444F,2.697F,0.638F
  273. #define EAX_PRESET_ALLEY           EAX_ENVIRONMENT_ALLEY,0.25F,1.752F,0.776F
  274. #define EAX_PRESET_FOREST          EAX_ENVIRONMENT_FOREST,0.111F,3.145F,0.472F
  275. #define EAX_PRESET_CITY            EAX_ENVIRONMENT_CITY,0.111F,2.767F,0.224F
  276. #define EAX_PRESET_MOUNTAINS       EAX_ENVIRONMENT_MOUNTAINS,0.194F,7.841F,0.472F
  277. #define EAX_PRESET_QUARRY          EAX_ENVIRONMENT_QUARRY,1.0F,1.499F,0.5F
  278. #define EAX_PRESET_PLAIN           EAX_ENVIRONMENT_PLAIN,0.097F,2.767F,0.224F
  279. #define EAX_PRESET_PARKINGLOT      EAX_ENVIRONMENT_PARKINGLOT,0.208F,1.652F,1.5F
  280. #define EAX_PRESET_SEWERPIPE       EAX_ENVIRONMENT_SEWERPIPE,0.652F,2.886F,0.25F
  281. #define EAX_PRESET_UNDERWATER      EAX_ENVIRONMENT_UNDERWATER,1.0F,1.499F,0.0F
  282. #define EAX_PRESET_DRUGGED         EAX_ENVIRONMENT_DRUGGED,0.875F,8.392F,1.388F
  283. #define EAX_PRESET_DIZZY           EAX_ENVIRONMENT_DIZZY,0.139F,17.234F,0.666F
  284. #define EAX_PRESET_PSYCHOTIC       EAX_ENVIRONMENT_PSYCHOTIC,0.486F,7.563F,0.806F
  285. // software 3D mixing algorithm modes (used with BASS_Set3DAlgorithm)
  286. #define BASS_3DALG_DEFAULT 0
  287. /* default algorithm (currently translates to BASS_3DALG_OFF) */
  288. #define BASS_3DALG_OFF 1
  289. /* Uses normal left and right panning. The vertical axis is ignored except for
  290. scaling of volume due to distance. Doppler shift and volume scaling are still
  291. applied, but the 3D filtering is not performed. This is the most CPU efficient
  292. software implementation, but provides no virtual 3D audio effect. Head Related
  293. Transfer Function processing will not be done. Since only normal stereo panning
  294. is used, a channel using this algorithm may be accelerated by a 2D hardware
  295. voice if no free 3D hardware voices are available. */
  296. #define BASS_3DALG_FULL 2
  297. /* This algorithm gives the highest quality 3D audio effect, but uses more CPU.
  298. Requires Windows 98 2nd Edition or Windows 2000 that uses WDM drivers, if this
  299. mode is not available then BASS_3DALG_OFF will be used instead. */
  300. #define BASS_3DALG_LIGHT 3
  301. /* This algorithm gives a good 3D audio effect, and uses less CPU than the FULL
  302. mode. Requires Windows 98 2nd Edition or Windows 2000 that uses WDM drivers, if
  303. this mode is not available then BASS_3DALG_OFF will be used instead. */
  304. typedef DWORD (CALLBACK STREAMPROC)(HSTREAM handle, void *buffer, DWORD length, DWORD user);
  305. /* User stream callback function. NOTE: A stream function should obviously be as quick
  306. as possible, other streams (and MOD musics) can't be mixed until it's finished.
  307. handle : The stream that needs writing
  308. buffer : Buffer to write the samples in
  309. length : Number of bytes to write
  310. user   : The 'user' parameter value given when calling BASS_StreamCreate
  311. RETURN : Number of bytes written. If less than "length" then the
  312.          stream is assumed to be at the end, and is stopped. */
  313. // STREAMFILEPROC actions
  314. #define BASS_FILE_CLOSE 0
  315. #define BASS_FILE_READ 1
  316. #define BASS_FILE_QUERY 2
  317. #define BASS_FILE_LEN 3
  318. typedef DWORD (CALLBACK STREAMFILEPROC)(DWORD action,DWORD param1,DWORD param2,DWORD user);
  319. /* User file stream callback function.
  320. action : The action to perform, one of BASS_FILE_xxx values.
  321. param1 : Depends on "action"
  322. param2 : Depends on "action"
  323. user   : The 'user' parameter value given when calling BASS_StreamCreate
  324. RETURN : Depends on "action" */
  325. /* Sync types (with BASS_ChannelSetSync "param" and SYNCPROC "data"
  326. definitions) & flags. */
  327. #define BASS_SYNC_MUSICPOS 0
  328. #define BASS_SYNC_POS 0
  329. /* Sync when a music or stream reaches a position.
  330. if HMUSIC...
  331. param: LOWORD=order (0=first, -1=all) HIWORD=row (0=first, -1=all)
  332. data : LOWORD=order HIWORD=row
  333. if HSTREAM...
  334. param: position in bytes
  335. data : not used */
  336. #define BASS_SYNC_MUSICINST 1
  337. /* Sync when an instrument (sample for the non-instrument based formats)
  338. is played in a music (not including retrigs).
  339. param: LOWORD=instrument (1=first) HIWORD=note (0=c0...119=b9, -1=all)
  340. data : LOWORD=note HIWORD=volume (0-64) */
  341. #define BASS_SYNC_END 2
  342. /* Sync when a music or file stream reaches the end.
  343. param: not used
  344. data : 1 = the sync is triggered by a backward jump in a MOD music, otherwise not used */
  345. #define BASS_SYNC_MUSICFX 3
  346. /* Sync when the "sync" effect (XM/MTM/MOD: E8x/Wxx, IT/S3M: S2x) is used.
  347. param: 0:data=pos, 1:data="x" value
  348. data : param=0: LOWORD=order HIWORD=row, param=1: "x" value */
  349. #define BASS_SYNC_META 4
  350. /* Sync when metadata is received in a Shoutcast stream.
  351. param: not used
  352. data : pointer to the metadata */
  353. #define BASS_SYNC_SLIDE 5
  354. /* Sync when an attribute slide is completed.
  355. param: not used
  356. data : the type of slide completed (one of the BASS_SLIDE_xxx values) */
  357. #define BASS_SYNC_MESSAGE 0x20000000 // FLAG: post a Windows message (instead of callback)
  358. /* When using a window message "callback", the message to post is given in the "proc"
  359. parameter of BASS_ChannelSetSync, and is posted to the window specified in the BASS_Init
  360. call. The message parameters are: WPARAM = data, LPARAM = user. */
  361. #define BASS_SYNC_MIXTIME 0x40000000 // FLAG: sync at mixtime, else at playtime
  362. #define BASS_SYNC_ONETIME 0x80000000 // FLAG: sync only once, else continuously
  363. typedef void (CALLBACK SYNCPROC)(HSYNC handle, DWORD channel, DWORD data, DWORD user);
  364. /* Sync callback function. NOTE: a sync callback function should be very
  365. quick as other syncs cannot be processed until it has finished. If the sync
  366. is a "mixtime" sync, then other streams and MOD musics can not be mixed
  367. until it's finished either.
  368. handle : The sync that has occured
  369. channel: Channel that the sync occured in
  370. data   : Additional data associated with the sync's occurance
  371. user   : The 'user' parameter given when calling BASS_ChannelSetSync */
  372. typedef void (CALLBACK DSPPROC)(HDSP handle, DWORD channel, void *buffer, DWORD length, DWORD user);
  373. /* DSP callback function. NOTE: A DSP function should obviously be as quick as
  374. possible... other DSP functions, streams and MOD musics can not be processed
  375. until it's finished.
  376. handle : The DSP handle
  377. channel: Channel that the DSP is being applied to
  378. buffer : Buffer to apply the DSP to
  379. length : Number of bytes in the buffer
  380. user   : The 'user' parameter given when calling BASS_ChannelSetDSP */
  381. typedef BOOL (CALLBACK RECORDPROC)(void *buffer, DWORD length, DWORD user);
  382. /* Recording callback function.
  383. buffer : Buffer containing the recorded sample data
  384. length : Number of bytes
  385. user   : The 'user' parameter value given when calling BASS_RecordStart
  386. RETURN : TRUE = continue recording, FALSE = stop */
  387. // BASS_ChannelGetData flags
  388. #define BASS_DATA_AVAILABLE 0 // query how much data is buffered
  389. #define BASS_DATA_FFT512 0x80000000 // 512 sample FFT
  390. #define BASS_DATA_FFT1024 0x80000001 // 1024 FFT
  391. #define BASS_DATA_FFT2048 0x80000002 // 2048 FFT
  392. #define BASS_DATA_FFT512S 0x80000010 // stereo 512 sample FFT
  393. #define BASS_DATA_FFT1024S 0x80000011 // stereo 1024 FFT
  394. #define BASS_DATA_FFT2048S 0x80000012 // stereo 2048 FFT
  395. // BASS_StreamGetTags flags : what's returned
  396. #define BASS_TAG_ID3 0 // ID3v1 tags : 128 byte block
  397. #define BASS_TAG_ID3V2 1 // ID3v2 tags : variable length block
  398. #define BASS_TAG_OGG 2 // OGG comments : array of null-terminated strings
  399. #define BASS_TAG_HTTP 3 // HTTP headers : array of null-terminated strings
  400. #define BASS_TAG_ICY 4 // ICY headers : array of null-terminated strings
  401. #define BASS_TAG_META 5 // ICY metadata : null-terminated string
  402. // DX8 effect types, use with BASS_ChannelSetFX
  403. enum
  404. {
  405. BASS_FX_CHORUS, // GUID_DSFX_STANDARD_CHORUS
  406. BASS_FX_COMPRESSOR, // GUID_DSFX_STANDARD_COMPRESSOR
  407. BASS_FX_DISTORTION, // GUID_DSFX_STANDARD_DISTORTION
  408. BASS_FX_ECHO, // GUID_DSFX_STANDARD_ECHO
  409. BASS_FX_FLANGER, // GUID_DSFX_STANDARD_FLANGER
  410. BASS_FX_GARGLE, // GUID_DSFX_STANDARD_GARGLE
  411. BASS_FX_I3DL2REVERB, // GUID_DSFX_STANDARD_I3DL2REVERB
  412. BASS_FX_PARAMEQ, // GUID_DSFX_STANDARD_PARAMEQ
  413. BASS_FX_REVERB // GUID_DSFX_WAVES_REVERB
  414. };
  415. typedef struct {
  416.     float       fWetDryMix;
  417.     float       fDepth;
  418.     float       fFeedback;
  419.     float       fFrequency;
  420.     DWORD       lWaveform; // 0=triangle, 1=sine
  421.     float       fDelay;
  422.     DWORD       lPhase; // BASS_FX_PHASE_xxx
  423. } BASS_FXCHORUS; // DSFXChorus
  424. typedef struct {
  425.     float   fGain;
  426.     float   fAttack;
  427.     float   fRelease;
  428.     float   fThreshold;
  429.     float   fRatio;
  430.     float   fPredelay;
  431. } BASS_FXCOMPRESSOR; // DSFXCompressor
  432. typedef struct {
  433.     float   fGain;
  434.     float   fEdge;
  435.     float   fPostEQCenterFrequency;
  436.     float   fPostEQBandwidth;
  437.     float   fPreLowpassCutoff;
  438. } BASS_FXDISTORTION; // DSFXDistortion
  439. typedef struct {
  440.     float   fWetDryMix;
  441.     float   fFeedback;
  442.     float   fLeftDelay;
  443.     float   fRightDelay;
  444.     BOOL    lPanDelay;
  445. } BASS_FXECHO; // DSFXEcho
  446. typedef struct {
  447.     float       fWetDryMix;
  448.     float       fDepth;
  449.     float       fFeedback;
  450.     float       fFrequency;
  451.     DWORD       lWaveform; // 0=triangle, 1=sine
  452.     float       fDelay;
  453.     DWORD       lPhase; // BASS_FX_PHASE_xxx
  454. } BASS_FXFLANGER; // DSFXFlanger
  455. typedef struct {
  456.     DWORD       dwRateHz;               // Rate of modulation in hz
  457.     DWORD       dwWaveShape;            // 0=triangle, 1=square
  458. } BASS_FXGARGLE; // DSFXGargle
  459. typedef struct {
  460.     int     lRoom;                  // [-10000, 0]      default: -1000 mB
  461.     int     lRoomHF;                // [-10000, 0]      default: 0 mB
  462.     float   flRoomRolloffFactor;    // [0.0, 10.0]      default: 0.0
  463.     float   flDecayTime;            // [0.1, 20.0]      default: 1.49s
  464.     float   flDecayHFRatio;         // [0.1, 2.0]       default: 0.83
  465.     int     lReflections;           // [-10000, 1000]   default: -2602 mB
  466.     float   flReflectionsDelay;     // [0.0, 0.3]       default: 0.007 s
  467.     int     lReverb;                // [-10000, 2000]   default: 200 mB
  468.     float   flReverbDelay;          // [0.0, 0.1]       default: 0.011 s
  469.     float   flDiffusion;            // [0.0, 100.0]     default: 100.0 %
  470.     float   flDensity;              // [0.0, 100.0]     default: 100.0 %
  471.     float   flHFReference;          // [20.0, 20000.0]  default: 5000.0 Hz
  472. } BASS_FXI3DL2REVERB; // DSFXI3DL2Reverb
  473. typedef struct {
  474.     float   fCenter;
  475.     float   fBandwidth;
  476.     float   fGain;
  477. } BASS_FXPARAMEQ; // DSFXParamEq
  478. typedef struct {
  479.     float   fInGain;                // [-96.0,0.0]            default: 0.0 dB
  480.     float   fReverbMix;             // [-96.0,0.0]            default: 0.0 db
  481.     float   fReverbTime;            // [0.001,3000.0]         default: 1000.0 ms
  482.     float   fHighFreqRTRatio;       // [0.001,0.999]          default: 0.001
  483. } BASS_FXREVERB; // DSFXWavesReverb
  484. #define BASS_FX_PHASE_NEG_180        0
  485. #define BASS_FX_PHASE_NEG_90         1
  486. #define BASS_FX_PHASE_ZERO           2
  487. #define BASS_FX_PHASE_90             3
  488. #define BASS_FX_PHASE_180            4
  489. #define CDCHANNEL 0 // CD channel, for use with BASS_Channel functions
  490. #define RECORDCHAN 1 // Recording channel, for use with BASS_Channel functions
  491. // BASS_ChannelIsActive return values
  492. #define BASS_ACTIVE_STOPPED 0
  493. #define BASS_ACTIVE_PLAYING 1
  494. #define BASS_ACTIVE_STALLED 2
  495. #define BASS_ACTIVE_PAUSED 3
  496. // BASS_ChannelIsSliding return flags
  497. #define BASS_SLIDE_FREQ 1
  498. #define BASS_SLIDE_VOL 2
  499. #define BASS_SLIDE_PAN 4
  500. // BASS_CDGetID flags
  501. #define BASS_CDID_IDENTITY 0
  502. #define BASS_CDID_UPC 1
  503. #define BASS_CDID_CDDB 2
  504. #define BASS_CDID_CDDB2 3
  505. // BASS_RecordSetInput flags
  506. #define BASS_INPUT_OFF 0x10000
  507. #define BASS_INPUT_ON 0x20000
  508. #define BASS_INPUT_LEVEL 0x40000
  509. // BASS_SetNetConfig flags
  510. #define BASS_NET_TIMEOUT 0
  511. #define BASS_NET_BUFFER 1
  512. DWORD BASSDEF(BASS_GetVersion)();
  513. /* Retrieve the version number of BASS that is loaded.
  514. RETURN : The BASS version (LOWORD.HIWORD) */
  515. char *BASSDEF(BASS_GetDeviceDescription)(DWORD devnum);
  516. /* Get the text description of a device. This function can be used to
  517. enumerate the available devices.
  518. devnum : The device (0=first)
  519. RETURN : The text description of the device (NULL=error) */
  520. float BASSDEF(BASS_SetBufferLength)(float length);
  521. /* Set the amount that BASS mixes ahead new musics/streams. Changing
  522. this setting does not affect musics/streams that have already been
  523. loaded/created. Increasing the buffer length, decreases the chance of
  524. the sound possibly breaking-up on slower computers, but increase DSP
  525. latency. The default length is 0.5 secs.
  526. length : The buffer length in seconds
  527. RETURN : The actual new buffer length */
  528. DWORD BASSDEF(BASS_SetNetConfig)(DWORD option, DWORD value);
  529. /* Set an internet config option.
  530. option : The option to set (one of the BASS_NET_xxx flags)
  531. value  : The new value
  532. RETURN : The old value (-1=error) */
  533. void BASSDEF(BASS_SetGlobalVolumes)(int musvol, int samvol, int strvol);
  534. /* Set the global music/sample/stream volume levels.
  535. musvol : MOD music global volume level (0-100, -1=leave current)
  536. samvol : Sample global volume level (0-100, -1=leave current)
  537. strvol : Stream global volume level (0-100, -1=leave current) */
  538. void BASSDEF(BASS_GetGlobalVolumes)(DWORD *musvol, DWORD *samvol, DWORD *strvol);
  539. /* Retrieve the global music/sample/stream volume levels.
  540. musvol : MOD music global volume level (NULL=don't retrieve it)
  541. samvol : Sample global volume level (NULL=don't retrieve it)
  542. strvol : Stream global volume level (NULL=don't retrieve it) */
  543. void BASSDEF(BASS_SetLogCurves)(BOOL volume, BOOL pan);
  544. /* Make the volume/panning values translate to a logarithmic curve,
  545. or a linear "curve" (the default).
  546. volume : volume curve (FALSE=linear, TRUE=log)
  547. pan    : panning curve (FALSE=linear, TRUE=log) */
  548. void BASSDEF(BASS_Set3DAlgorithm)(DWORD algo);
  549. /* Set the 3D algorithm for software mixed 3D channels (does not affect
  550. hardware mixed channels). Changing the mode only affects subsequently
  551. created or loaded samples/streams/musics, not those that already exist.
  552. Requires DirectX 7 or above.
  553. algo   : algorithm flag (BASS_3DALG_xxx) */
  554. DWORD BASSDEF(BASS_ErrorGetCode)();
  555. /* Get the BASS_ERROR_xxx error code. Use this function to get the
  556. reason for an error. */
  557. void BASSDEF(BASS_SetCLSID)(GUID *clsid);
  558. /* Set the class identifier of the object to create, that will be used
  559. to initialize DirectSound.
  560. clsid  : Class identifier of the object to create (NULL=use default) */
  561. BOOL BASSDEF(BASS_Init)(int device, DWORD freq, DWORD flags, HWND win);
  562. /* Initialize the digital output. This must be called before all following
  563. BASS functions (except CD and recording functions).
  564. device : Device to use (0=first, -1=default, -2=no sound)
  565. freq   : Output sample rate
  566. flags  : BASS_DEVICE_xxx flags (optional HIWORD=update period)
  567. win    : Owner window (0=current foreground window)
  568. NOTE: The "no sound" device (device=-2), allows loading and "playing"
  569. of MOD musics only (all sample/stream functions and most other functions
  570. fail). This is so that you can still use the MOD musics as synchronizers
  571. when there is no soundcard present. When using device -2, you should still
  572. set the other arguments as you would do normally. */
  573. void BASSDEF(BASS_Free)();
  574. /* Free all resources used by the digital output, including all musics
  575. and samples. */
  576. void *BASSDEF(BASS_GetDSoundObject)(DWORD object);
  577. /* Retrieve a pointer to a DirectSound interface. This can be used by
  578. advanced users to "plugin" external functionality.
  579. object : The interface to retrieve (BASS_OBJECT_xxx)
  580. RETURN : A pointer to the requested interface (NULL=error) */
  581. void BASSDEF(BASS_GetInfo)(BASS_INFO *info);
  582. /* Retrieve some information on the device being used.
  583. info   : Pointer to store info at */
  584. BOOL BASSDEF(BASS_Update)();
  585. /* Update the HMUSIC/HSTREAM channel buffers. */
  586. float BASSDEF(BASS_GetCPU)();
  587. /* Get the current CPU usage of BASS. This includes the time taken to mix
  588. the MOD musics and sample streams, and also the time taken by any user
  589. DSP functions. It does not include plain sample mixing which is done by
  590. the output device (hardware accelerated) or DirectSound (emulated). Audio
  591. CD playback requires no CPU usage.
  592. RETURN : The CPU usage percentage (floating-point) */
  593. BOOL BASSDEF(BASS_Start)();
  594. /* Start the digital output. */
  595. BOOL BASSDEF(BASS_Stop)();
  596. /* Stop the digital output, stopping all musics/samples/streams. */
  597. BOOL BASSDEF(BASS_Pause)();
  598. /* Stop the digital output, pausing all musics/samples/streams. Use
  599. BASS_Start to resume the digital output. */
  600. BOOL BASSDEF(BASS_SetVolume)(DWORD volume);
  601. /* Set the digital output master volume.
  602. volume : Desired volume level (0-100) */
  603. int BASSDEF(BASS_GetVolume)();
  604. /* Get the digital output master volume.
  605. RETURN : The volume level (0-100, -1=error) */
  606. BOOL BASSDEF(BASS_Set3DFactors)(float distf, float rollf, float doppf);
  607. /* Set the factors that affect the calculations of 3D sound.
  608. distf  : Distance factor (0.0-10.0, 1.0=use meters, 0.3=use feet, <0.0=leave current)
  609.          By default BASS measures distances in meters, you can change this
  610.          setting if you are using a different unit of measurement.
  611. roolf  : Rolloff factor, how fast the sound quietens with distance
  612.          (0.0=no rolloff, 1.0=real world, 2.0=2x real... 10.0=max, <0.0=leave current)
  613. doppf  : Doppler factor (0.0=no doppler, 1.0=real world, 2.0=2x real... 10.0=max, <0.0=leave current)
  614.          The doppler effect is the way a sound appears to change frequency when it is
  615.          moving towards or away from you. The listener and sound velocity settings are
  616.          used to calculate this effect, this "doppf" value can be used to lessen or
  617.          exaggerate the effect. */
  618. BOOL BASSDEF(BASS_Get3DFactors)(float *distf, float *rollf, float *doppf);
  619. /* Get the factors that affect the calculations of 3D sound.
  620. distf  : Distance factor (NULL=don't get it)
  621. roolf  : Rolloff factor (NULL=don't get it)
  622. doppf  : Doppler factor (NULL=don't get it) */
  623. BOOL BASSDEF(BASS_Set3DPosition)(BASS_3DVECTOR *pos, BASS_3DVECTOR *vel, BASS_3DVECTOR *front, BASS_3DVECTOR *top);
  624. /* Set the position/velocity/orientation of the listener (ie. the player/viewer).
  625. pos    : Position of the listener (NULL=leave current)
  626. vel    : Listener's velocity, used to calculate doppler effect (NULL=leave current)
  627. front  : Direction that listener's front is pointing (NULL=leave current)
  628. top    : Direction that listener's top is pointing (NULL=leave current)
  629.          NOTE: front & top must both be set in a single call */
  630. BOOL BASSDEF(BASS_Get3DPosition)(BASS_3DVECTOR *pos, BASS_3DVECTOR *vel, BASS_3DVECTOR *front, BASS_3DVECTOR *top);
  631. /* Get the position/velocity/orientation of the listener.
  632. pos    : Position of the listener (NULL=don't get it)
  633. vel    : Listener's velocity (NULL=don't get it)
  634. front  : Direction that listener's front is pointing (NULL=don't get it)
  635. top    : Direction that listener's top is pointing (NULL=don't get it)
  636.          NOTE: front & top must both be retrieved in a single call */
  637. BOOL BASSDEF(BASS_Apply3D)();
  638. /* Apply changes made to the 3D system. This must be called to apply any changes
  639. made with BASS_Set3DFactors, BASS_Set3DPosition, BASS_ChannelSet3DAttributes or
  640. BASS_ChannelSet3DPosition. It improves performance to have DirectSound do all the
  641. required recalculating at the same time like this, rather than recalculating after
  642. every little change is made. NOTE: This is automatically called when starting a 3D
  643. sample with BASS_SamplePlay3D/Ex. */
  644. BOOL BASSDEF(BASS_SetEAXParameters)(int env, float vol, float decay, float damp);
  645. /* Set the type of EAX environment and it's parameters. Obviously, EAX functions
  646. have no effect if no EAX supporting device (ie. SB Live) is used.
  647. env    : Reverb environment (EAX_ENVIRONMENT_xxx, -1=leave current)
  648. vol    : Volume of the reverb (0.0=off, 1.0=max, <0.0=leave current)
  649. decay  : Time in seconds it takes the reverb to diminish by 60dB (0.1-20.0, <0.0=leave current)
  650. damp   : The damping, high or low frequencies decay faster (0.0=high decays quickest,
  651.          1.0=low/high decay equally, 2.0=low decays quickest, <0.0=leave current) */
  652. BOOL BASSDEF(BASS_GetEAXParameters)(DWORD *env, float *vol, float *decay, float *damp);
  653. /* Get the current EAX parameters.
  654. env    : Reverb environment (NULL=don't get it)
  655. vol    : Reverb volume (NULL=don't get it)
  656. decay  : Decay duration (NULL=don't get it)
  657. damp   : The damping (NULL=don't get it) */
  658. HMUSIC BASSDEF(BASS_MusicLoad)(BOOL mem, void *file, DWORD offset, DWORD length, DWORD flags);
  659. /* Load a music (MO3/XM/MOD/S3M/IT/MTM). The amplification and pan
  660. seperation are initially set to 50, use BASS_MusicSetAmplify
  661. and BASS_MusicSetPanSep to adjust them.
  662. mem    : TRUE = Load music from memory
  663. file   : Filename (mem=FALSE) or memory location (mem=TRUE)
  664. offset : File offset to load the music from (only used if mem=FALSE)
  665. length : Data length (only used if mem=FALSE, 0=use to end of file)
  666. flags  : BASS_MUSIC_xxx flags
  667. RETURN : The loaded music's handle (NULL=error) */
  668. void BASSDEF(BASS_MusicFree)(HMUSIC handle);
  669. /* Free a music's resources.
  670. handle : Music handle */
  671. char *BASSDEF(BASS_MusicGetName)(HMUSIC handle);
  672. /* Retrieves a music's name.
  673. handle : Music handle
  674. RETURN : The music's name (NULL=error) */
  675. DWORD BASSDEF(BASS_MusicGetLength)(HMUSIC handle, BOOL playlen);
  676. /* Retrieves the length of a music in patterns (how many "orders" there are)
  677. or in output bytes (requires BASS_MUSIC_CALCLEN was used with BASS_MusicLoad).
  678. handle : Music handle
  679. playlen: TRUE=get the playback length, FALSE=get the pattern length
  680. RETURN : The length of the music (-1=error) */
  681. BOOL BASSDEF(BASS_MusicPreBuf)(HMUSIC handle);
  682. /* Pre-buffer initial sample data ready for playback.
  683. handle : Handle of music */
  684. BOOL BASSDEF(BASS_MusicPlay)(HMUSIC handle);
  685. /* Play a music. Playback continues from where it was last stopped/paused.
  686. Multiple musics may be played simultaneously.
  687. handle : Handle of music to play */
  688. BOOL BASSDEF(BASS_MusicPlayEx)(HMUSIC handle, DWORD pos, int flags, BOOL reset);
  689. /* Play a music, specifying start position and playback flags.
  690. handle : Handle of music to play
  691. pos    : Position to start playback from, LOWORD=order HIWORD=row
  692. flags  : BASS_MUSIC_xxx flags. These flags overwrite the defaults
  693.          specified when the music was loaded. (-1=use current flags)
  694. reset  : TRUE = Stop all current playing notes and reset bpm/etc... */
  695. BOOL BASSDEF(BASS_MusicSetAmplify)(HMUSIC handle, DWORD amp);
  696. /* Set a music's amplification level.
  697. handle : Music handle
  698. amp    : Amplification level (0-100) */
  699. BOOL BASSDEF(BASS_MusicSetPanSep)(HMUSIC handle, DWORD pan);
  700. /* Set a music's pan seperation.
  701. handle : Music handle
  702. pan    : Pan seperation (0-100, 50=linear) */
  703. BOOL BASSDEF(BASS_MusicSetPositionScaler)(HMUSIC handle, DWORD scale);
  704. /* Set a music's "GetPosition" scaler
  705. When you call BASS_ChannelGetPosition, the "row" (HIWORD) will be
  706. scaled by this value. By using a higher scaler, you can get a more
  707. precise position indication.
  708. handle : Music handle
  709. scale  : The scaler (1-256) */
  710. BOOL BASSDEF(BASS_MusicSetChannelVol)(HMUSIC handle, DWORD channel, DWORD volume);
  711. /* Set the volume level of a channel in a music
  712. handle : Music handle
  713. channel: Channel number (0=first)
  714. volume : Volume level (0-100) */
  715. int BASSDEF(BASS_MusicGetChannelVol)(HMUSIC handle, DWORD channel);
  716. /* Get the volume level of a channel in a music
  717. handle : Music handle
  718. channel: Channel number (0=first)
  719. RETURN : The channel's volume (-1=error) */
  720. HSAMPLE BASSDEF(BASS_SampleLoad)(BOOL mem, void *file, DWORD offset, DWORD length, DWORD max, DWORD flags);
  721. /* Load a WAV/MP3/MP2/MP1 sample. If you're loading a sample with 3D
  722. functionality, then you should use BASS_GetInfo and BASS_SetInfo to set
  723. the default 3D parameters. You can also use these two functions to set
  724. the sample's default frequency/volume/pan/looping.
  725. mem    : TRUE = Load sample from memory
  726. file   : Filename (mem=FALSE) or memory location (mem=TRUE)
  727. offset : File offset to load the sample from (only used if mem=FALSE)
  728. length : Data length (only used if mem=FALSE, 0=use to end of file)
  729. max    : Maximum number of simultaneous playbacks (1-65535)
  730. flags  : BASS_SAMPLE_xxx flags (only the LOOP/3D/SOFTWARE/VAM/MUTEMAX/OVER_xxx flags are used)
  731. RETURN : The loaded sample's handle (NULL=error) */
  732. void* BASSDEF(BASS_SampleCreate)(DWORD length, DWORD freq, DWORD max, DWORD flags);
  733. /* Create a sample. This function allows you to generate custom samples, or
  734. load samples that are not in the WAV format. A pointer is returned to the
  735. memory location at which you should write the sample's data. After writing
  736. the data, call BASS_SampleCreateDone to get the new sample's handle.
  737. length : The sample's length (in samples, NOT bytes)
  738. freq   : default sample rate
  739. max    : Maximum number of simultaneous playbacks (1-65535)
  740. flags  : BASS_SAMPLE_xxx flags
  741. RETURN : Memory location to write the sample's data (NULL=error) */
  742. HSAMPLE BASSDEF(BASS_SampleCreateDone)();
  743. /* Finished creating a new sample.
  744. RETURN : The new sample's handle (NULL=error) */
  745. void BASSDEF(BASS_SampleFree)(HSAMPLE handle);
  746. /* Free a sample's resources.
  747. handle : Sample handle */
  748. BOOL BASSDEF(BASS_SampleGetInfo)(HSAMPLE handle, BASS_SAMPLE *info);
  749. /* Retrieve a sample's current default attributes.
  750. handle : Sample handle
  751. info   : Pointer to store sample info */
  752. BOOL BASSDEF(BASS_SampleSetInfo)(HSAMPLE handle, BASS_SAMPLE *info);
  753. /* Set a sample's default attributes.
  754. handle : Sample handle
  755. info   : Sample info, only the freq/volume/pan/3D attributes and
  756.          looping/override method flags are used */
  757. HCHANNEL BASSDEF(BASS_SamplePlay)(HSAMPLE handle);
  758. /* Play a sample, using the sample's default attributes.
  759. handle : Handle of sample to play
  760. RETURN : Handle of channel used to play the sample (NULL=error) */
  761. HCHANNEL BASSDEF(BASS_SamplePlayEx)(HSAMPLE handle, DWORD start, int freq, int volume, int pan, BOOL loop);
  762. /* Play a sample, using specified attributes.
  763. handle : Handle of sample to play
  764. start  : Playback start position (in samples, not bytes)
  765. freq   : Playback rate (-1=default)
  766. volume : Volume (-1=default, 0=silent, 100=max)
  767. pan    : Pan position (-101=default, -100=left, 0=middle, 100=right)
  768. loop   : TRUE = Loop sample (-1=default)
  769. RETURN : Handle of channel used to play the sample (NULL=error) */
  770. HCHANNEL BASSDEF(BASS_SamplePlay3D)(HSAMPLE handle, BASS_3DVECTOR *pos, BASS_3DVECTOR *orient, BASS_3DVECTOR *vel);
  771. /* Play a 3D sample, setting it's 3D position, orientation and velocity.
  772. handle : Handle of sample to play
  773. pos    : position of the sound (NULL = x/y/z=0.0)
  774. orient : orientation of the sound, this is irrelevant if it's an
  775.          omnidirectional sound source (NULL = x/y/z=0.0)
  776. vel    : velocity of the sound (NULL = x/y/z=0.0)
  777. RETURN : Handle of channel used to play the sample (NULL=error) */
  778. HCHANNEL BASSDEF(BASS_SamplePlay3DEx)(HSAMPLE handle, BASS_3DVECTOR *pos, BASS_3DVECTOR *orient, BASS_3DVECTOR *vel, DWORD start, int freq, int volume, BOOL loop);
  779. /* Play a 3D sample, using specified attributes.
  780. handle : Handle of sample to play
  781. pos    : position of the sound (NULL = x/y/z=0.0)
  782. orient : orientation of the sound, this is irrelevant if it's an
  783.          omnidirectional sound source (NULL = x/y/z=0.0)
  784. vel    : velocity of the sound (NULL = x/y/z=0.0)
  785. start  : Playback start position (in samples, not bytes)
  786. freq   : Playback rate (-1=default)
  787. volume : Volume (-1=default, 0=silent, 100=max)
  788. loop   : TRUE = Loop sample (-1=default)
  789. RETURN : Handle of channel used to play the sample (NULL=error) */
  790. BOOL BASSDEF(BASS_SampleStop)(HSAMPLE handle);
  791. /* Stops all instances of a sample. For example, if a sample is playing
  792. simultaneously 3 times, calling this function will stop all 3 of them,
  793. which is obviously simpler than calling BASS_ChannelStop 3 times.
  794. handle : Handle of sample to stop */
  795. HSTREAM BASSDEF(BASS_StreamCreate)(DWORD freq, DWORD flags, void *proc, DWORD user);
  796. /* Create a user sample stream.
  797. freq   : Stream playback rate (100-100000)
  798. flags  : BASS_SAMPLE_xxx flags (only the 8BITS/MONO/3D flags are used)
  799. proc   : User defined stream writing function
  800. user   : The 'user' value passed to the callback function
  801. RETURN : The created stream's handle (NULL=error) */
  802. HSTREAM BASSDEF(BASS_StreamCreateFile)(BOOL mem, void *file, DWORD offset, DWORD length, DWORD flags);
  803. /* Create a sample stream from an MP3/MP2/MP1/OGG or WAV file.
  804. mem    : TRUE = Stream file from memory
  805. file   : Filename (mem=FALSE) or memory location (mem=TRUE)
  806. offset : File offset of the stream data
  807. length : File length (0=use whole file if mem=FALSE)
  808. flags  : Flags
  809. RETURN : The created stream's handle (NULL=error) */
  810. HSTREAM BASSDEF(BASS_StreamCreateURL)(char *url, DWORD offset, DWORD flags, char *save);
  811. /* Create a sample stream from an MP3/MP2/MP1/OGG or WAV file on the internet,
  812. optionally saving a local copy to disk.
  813. url    : The URL (beginning with "http://" or "ftp://")
  814. offset : File offset of start streaming from
  815. flags  : Flags
  816. save   : Filename to save the streamed file as locally (NULL=don't save)
  817. RETURN : The created stream's handle (NULL=error) */
  818. void BASSDEF(BASS_StreamFree)(HSTREAM handle);
  819. /* Free a sample stream's resources.
  820. handle : Stream handle */
  821. QWORD BASSDEF(BASS_StreamGetLength)(HSTREAM handle);
  822. /* Retrieves the playback length (in bytes) of a file stream. It's not always
  823. possible to 100% accurately guess the length of a stream, so the length returned
  824. may be only an approximation when using some WAV codecs.
  825. handle : Stream handle 
  826. RETURN : The length (0=streaming in blocks, -1=error) */
  827. char *BASSDEF(BASS_StreamGetTags)(HSTREAM handle, DWORD tags);
  828. /* Retrieves the requested tags/headers, if available.
  829. handle : Stream handle
  830. tags   : A BASS_TAG_xxx flag
  831. RETURN : Pointer to the tags (NULL=error) */
  832. BOOL BASSDEF(BASS_StreamPreBuf)(HSTREAM handle);
  833. /* Pre-buffer initial sample data ready for playback.
  834. handle : Handle of stream */
  835. BOOL BASSDEF(BASS_StreamPlay)(HSTREAM handle, BOOL flush, DWORD flags);
  836. /* Play a sample stream, optionally flushing the buffer first.
  837. handle : Handle of stream to play
  838. flush  : Flush buffer contents. If you stop a stream and then want to
  839.          continue it from where it stopped, don't flush it. Flushing
  840.          a file stream causes it to restart from the beginning.
  841. flags  : BASS_SAMPLE_LOOP flag (only affects file streams) */
  842. DWORD BASSDEF(BASS_StreamGetFilePosition)(HSTREAM handle, DWORD mode);
  843. /* Retrieves the file position of the decoding, the download (if streaming from
  844. the internet), or the end (total length). Obviously only works with file streams.
  845. handle : Stream handle
  846. mode   : The position to retrieve (0=decoding, 1=download, 2=end)
  847. RETURN : The position (-1=error) */
  848. BOOL BASSDEF(BASS_CDInit)(char *drive, DWORD flags);
  849. /* Initialize the CD functions, must be called before any other CD
  850. functions. The volume is initially set to 100 (the maximum), use
  851. BASS_ChannelSetAttributes to adjust it.
  852. drive  : The CD drive, for example: "d:" (NULL=use default drive)
  853. flags  : BASS_DEVICE_LEAVEVOL=leave the volume as it is */
  854. void BASSDEF(BASS_CDFree)();
  855. /* Free resources used by the CD. */
  856. BOOL BASSDEF(BASS_CDInDrive)();
  857. /* Check if there is a CD in the drive. */
  858. BOOL BASSDEF(BASS_CDDoor)(BOOL open);
  859. /* Opens or closes the CD door.
  860. open   : TRUE=open the door */
  861. char *BASSDEF(BASS_CDGetID)(DWORD id);
  862. /* Retrieves identification info from the CD in the drive.
  863. id     : One of the BASS_CDID_xxx flags
  864. RETURN : ID string (NULL=error) */
  865. DWORD BASSDEF(BASS_CDGetTracks)();
  866. /* Retrieves the number of tracks on the CD
  867. RETURN : The number of tracks (-1=error) */
  868. BOOL BASSDEF(BASS_CDPlay)(DWORD track, BOOL loop, BOOL wait);
  869. /* Play a CD track.
  870. track  : Track number to play (1=first)
  871. loop   : TRUE = Loop the track
  872. wait   : TRUE = don't return until playback has started (some drives
  873.                 will always wait anyway) */
  874. DWORD BASSDEF(BASS_CDGetTrackLength)(DWORD track);
  875. /* Retrieves the playback length (in milliseconds) of a cd track.
  876. track  : The CD track (1=first)
  877. RETURN : The length (-1=error) */
  878. char *BASSDEF(BASS_RecordGetDeviceDescription)(DWORD devnum);
  879. /* Get the text description of a recording device. This function can be
  880. used to enumerate the available devices.
  881. devnum : The device (0=first)
  882. RETURN : The text description of the device (NULL=error) */
  883. BOOL BASSDEF(BASS_RecordInit)(int device);
  884. /* Initialize a recording device.
  885. device : Device to use (0=first, -1=default) */
  886. void BASSDEF(BASS_RecordFree)();
  887. /* Free all resources used by the recording device. */
  888. void BASSDEF(BASS_RecordGetInfo)(BASS_RECORDINFO *info);
  889. /* Retrieve some information on the recording device being used.
  890. info   : Pointer to store info at */
  891. char *BASSDEF(BASS_RecordGetInputName)(DWORD input);
  892. /* Get the text description of a recording input.
  893. input  : Input number (0=first)
  894. RETURN : The text description (NULL=error) */
  895. BOOL BASSDEF(BASS_RecordSetInput)(DWORD input, DWORD setting);
  896. /* Adjust the setting of a recording input.
  897. input  : Input number (0=first)
  898. setting: BASS_INPUT flags (if BASS_INPUT_LEVEL used, LOWORD=volume) */
  899. DWORD BASSDEF(BASS_RecordGetInput)(DWORD input);
  900. /* Retrieve the setting of a recording input.
  901. input  : Input number (0=first)
  902. RETURN : The setting (LOWORD=volume, with BASS_INPUT_OFF flag if off, -1=error) */
  903. BOOL BASSDEF(BASS_RecordStart)(DWORD freq, DWORD flags, RECORDPROC *proc, DWORD user);
  904. /* Start recording. Use BASS_ChannelStop to stop recording.
  905. freq   : Sampling rate
  906. flags  : BASS_SAMPLE_8BITS/MONO flags (optional HIWORD=update period)
  907. proc   : User defined function to receive the recorded data
  908. user   : The 'user' value passed to the callback function */
  909. /* A "channel" can be a playing sample (HCHANNEL), a MOD music (HMUSIC), a
  910. sample stream (HSTREAM), the CD (CDCHANNEL), or recording (RECORDCHAN). The
  911. following functions can be used with one or more of these channel types. */
  912. float BASSDEF(BASS_ChannelBytes2Seconds)(DWORD handle, QWORD pos);
  913. /* Translate a byte position into time (seconds)
  914. handle : Handle of channel (HCHANNEL/HMUSIC/HSTREAM, or RECORDCHAN, also HSAMPLE)
  915. pos    : The position to translate
  916. RETURN : The millisecond position (<0=error) */
  917. QWORD BASSDEF(BASS_ChannelSeconds2Bytes)(DWORD handle, float pos);
  918. /* Translate a time (seconds) position into bytes
  919. handle : Handle of channel (HCHANNEL/HMUSIC/HSTREAM, or RECORDCHAN, also HSAMPLE)
  920. pos    : The position to translate
  921. RETURN : The byte position (-1=error) */
  922. DWORD BASSDEF(BASS_ChannelIsActive)(DWORD handle);
  923. /* Check if a channel is active (playing) or stalled.
  924. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM, or CDCHANNEL/RECORDCHAN)
  925. RETURN : One of the BASS_ACTIVE_xxx values */
  926. DWORD BASSDEF(BASS_ChannelGetFlags)(DWORD handle);
  927. /* Get some info about a channel.
  928. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM)
  929. RETURN : BASS_SAMPLE_xxx flags (-1=error) */
  930. BOOL BASSDEF(BASS_ChannelStop)(DWORD handle);
  931. /* Stop a channel.
  932. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM, or CDCHANNEL/RECORDCHAN) */
  933. BOOL BASSDEF(BASS_ChannelPause)(DWORD handle);
  934. /* Pause a channel.
  935. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM, or CDCHANNEL/RECORDCHAN) */
  936. BOOL BASSDEF(BASS_ChannelResume)(DWORD handle);
  937. /* Resume a paused channel.
  938. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM, or CDCHANNEL/RECORDCHAN) */
  939. BOOL BASSDEF(BASS_ChannelSetAttributes)(DWORD handle, int freq, int volume, int pan);
  940. /* Update a channel's attributes. The actual setting may not be exactly
  941. as specified, depending on the accuracy of the device and drivers.
  942. NOTE: Only the volume can be adjusted for the CD "channel", but not all
  943. soundcards allow controlling of the CD volume level.
  944. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM, or CDCHANNEL)
  945. freq   : Playback rate (100-100000, 0=original, -1=leave current)
  946. volume : Volume (-1=leave current, 0=silent, 100=max)
  947. pan    : Pan position (-101=current, -100=left, 0=middle, 100=right)
  948.          panning has no effect on 3D channels */
  949. BOOL BASSDEF(BASS_ChannelGetAttributes)(DWORD handle, DWORD *freq, DWORD *volume, int *pan);
  950. /* Retrieve a channel's attributes. Only the volume is available for
  951. the CD "channel" (if allowed by the soundcard/drivers).
  952. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM, or CDCHANNEL)
  953. freq   : Pointer to store playback rate (NULL=don't retrieve it)
  954. volume : Pointer to store volume (NULL=don't retrieve it)
  955. pan    : Pointer to store pan position (NULL=don't retrieve it) */
  956. BOOL BASSDEF(BASS_ChannelSlideAttributes)(DWORD handle, int freq, int volume, int pan, DWORD time);
  957. /* Slide a channel's attributes over a period of time.
  958. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM, or CDCHANNEL)
  959. freq   : Playback rate (100-100000, -1=leave current)
  960. volume : Volume (-1=leave current, 0=silent, 100=max, -2 = fadeout and stop channel)
  961. pan    : Pan position (-101=current, -100=left, 0=middle, 100=right)
  962. time   : Duration of the slide (in milliseconds) */
  963. DWORD BASSDEF(BASS_ChannelIsSliding)(DWORD handle);
  964. /* Check if a channel's attributes (freq/vol/pan) are sliding.
  965. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM, or CDCHANNEL)
  966. RETURN : Combination of the BASS_SLIDE_xxx flags */
  967. BOOL BASSDEF(BASS_ChannelSet3DAttributes)(DWORD handle, int mode, float min, float max, int iangle, int oangle, int outvol);
  968. /* Set a channel's 3D attributes.
  969. handle : Channel handle (HCHANNEL/HSTREAM/HMUSIC)
  970. mode   : BASS_3DMODE_xxx mode (-1=leave current setting)
  971. min    : minimum distance, volume stops increasing within this distance (<0.0=leave current)
  972. max    : maximum distance, volume stops decreasing past this distance (<0.0=leave current)
  973. iangle : angle of inside projection cone in degrees (360=omnidirectional, -1=leave current)
  974. oangle : angle of outside projection cone in degrees (-1=leave current)
  975.          NOTE: iangle & oangle must both be set in a single call
  976. outvol : delta-volume outside the projection cone (0=silent, 100=same as inside)
  977. The iangle/oangle angles decide how wide the sound is projected around the
  978. orientation angle. Within the inside angle the volume level is the channel
  979. level as set with BASS_ChannelSetAttributes, from the inside to the outside
  980. angles the volume gradually changes by the "outvol" setting. */
  981. BOOL BASSDEF(BASS_ChannelGet3DAttributes)(DWORD handle, DWORD *mode, float *min, float *max, DWORD *iangle, DWORD *oangle, DWORD *outvol);
  982. /* Retrieve a channel's 3D attributes.
  983. handle : Channel handle (HCHANNEL/HSTREAM/HMUSIC)
  984. mode   : BASS_3DMODE_xxx mode (NULL=don't retrieve it)
  985. min    : minumum distance (NULL=don't retrieve it)
  986. max    : maximum distance (NULL=don't retrieve it)
  987. iangle : angle of inside projection cone (NULL=don't retrieve it)
  988. oangle : angle of outside projection cone (NULL=don't retrieve it)
  989.          NOTE: iangle & oangle must both be retrieved in a single call
  990. outvol : delta-volume outside the projection cone (NULL=don't retrieve it) */
  991. BOOL BASSDEF(BASS_ChannelSet3DPosition)(DWORD handle, BASS_3DVECTOR *pos, BASS_3DVECTOR *orient, BASS_3DVECTOR *vel);
  992. /* Update a channel's 3D position, orientation and velocity. The velocity
  993. is only used to calculate the doppler effect.
  994. handle : Channel handle (HCHANNEL/HSTREAM/HMUSIC)
  995. pos    : position of the sound (NULL=leave current)
  996. orient : orientation of the sound, this is irrelevant if it's an
  997.          omnidirectional sound source (NULL=leave current)
  998. vel    : velocity of the sound (NULL=leave current) */
  999. BOOL BASSDEF(BASS_ChannelGet3DPosition)(DWORD handle, BASS_3DVECTOR *pos, BASS_3DVECTOR *orient, BASS_3DVECTOR *vel);
  1000. /* Retrieve a channel's current 3D position, orientation and velocity.
  1001. handle : Channel handle (HCHANNEL/HSTREAM/HMUSIC)
  1002. pos    : position of the sound (NULL=don't retrieve it)
  1003. orient : orientation of the sound, this is irrelevant if it's an
  1004.          omnidirectional sound source (NULL=don't retrieve it)
  1005. vel    : velocity of the sound (NULL=don't retrieve it) */
  1006. BOOL BASSDEF(BASS_ChannelSetPosition)(DWORD handle, QWORD pos);
  1007. /* Set the current playback position of a channel.
  1008. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM, or CDCHANNEL)
  1009. pos    : the position
  1010.     if HCHANNEL: position in bytes
  1011.     if HMUSIC: LOWORD=order HIWORD=row ... use MAKELONG(order,row)
  1012.     if HSTREAM: position in bytes, file streams only
  1013.     if CDCHANNEL: position in milliseconds from start of track */
  1014. QWORD BASSDEF(BASS_ChannelGetPosition)(DWORD handle);
  1015. /* Get the current playback position of a channel.
  1016. handle : Channel handle (HCHANNEL/HMUSIC/HSTREAM, or CDCHANNEL)
  1017. RETURN : the position (-1=error)
  1018. if HCHANNEL: position in bytes
  1019. if HMUSIC: LOWORD=order HIWORD=row (see BASS_MusicSetPositionScaler)
  1020. if HSTREAM: total bytes played since the stream was last flushed
  1021. if CDCHANNEL: position in milliseconds from start of track */
  1022. DWORD BASSDEF(BASS_ChannelGetLevel)(DWORD handle);
  1023. /* Calculate a channel's current output level.
  1024. handle : Channel handle (HMUSIC/HSTREAM, or RECORDCHAN)
  1025. RETURN : LOWORD=left level (0-128) HIWORD=right level (0-128) (-1=error) */
  1026. DWORD BASSDEF(BASS_ChannelGetData)(DWORD handle, void *buffer, DWORD length);
  1027. /* Retrieves upto "length" bytes of the channel's current sample data. This is
  1028. useful if you wish to "visualize" the sound.
  1029. handle : Channel handle (HMUSIC/HSTREAM, or RECORDCHAN)
  1030. buffer : Location to write the data
  1031. length : Number of bytes of wanted, or a BASS_DATA_xxx flag
  1032. RETURN : Number of bytes actually written to the buffer (-1=error) */
  1033. HSYNC BASSDEF(BASS_ChannelSetSync)(DWORD handle, DWORD type, QWORD param, SYNCPROC *proc, DWORD user);
  1034. /* Setup a sync on a channel. Multiple syncs may be used per channel.
  1035. handle : Channel handle
  1036. type   : Sync type (BASS_SYNC_xxx type & flags)
  1037. param  : Sync parameters (see the BASS_SYNC_xxx type description)
  1038. proc   : User defined callback function (window message if using BASS_SYNC_MESSAGE flag)
  1039. user   : The 'user' value passed to the callback function
  1040. RETURN : Sync handle (NULL=error) */
  1041. BOOL BASSDEF(BASS_ChannelRemoveSync)(DWORD handle, HSYNC sync);
  1042. /* Remove a sync from a channel
  1043. handle : Channel handle
  1044. sync   : Handle of sync to remove */
  1045. HDSP BASSDEF(BASS_ChannelSetDSP)(DWORD handle, DSPPROC *proc, DWORD user);
  1046. /* Setup a user DSP function on a channel. When multiple DSP functions
  1047. are used on a channel, they are called in the order that they were added.
  1048. handle : Channel handle (HMUSIC/HSTREAM)
  1049. proc   : User defined callback function
  1050. user   : The 'user' value passed to the callback function
  1051. RETURN : DSP handle (NULL=error) */
  1052. BOOL BASSDEF(BASS_ChannelRemoveDSP)(DWORD handle, HDSP dsp);
  1053. /* Remove a DSP function from a channel
  1054. handle : Channel handle (HMUSIC/HSTREAM)
  1055. dsp    : Handle of DSP to remove */
  1056. HFX BASSDEF(BASS_ChannelSetFX)(DWORD handle, DWORD type);
  1057. /* Setup a DX8 effect on a channel. Use BASS_FXSetParameters
  1058. to set the effect parameters. Obviously requires DX8.
  1059. handle : Channel handle (HMUSIC/HSTREAM)
  1060. type   : Type of effect to setup (BASS_FX_xxx)
  1061. RETURN : FX handle (NULL=error) */
  1062. BOOL BASSDEF(BASS_ChannelRemoveFX)(DWORD handle, HFX fx);
  1063. /* Remove a DX8 effect from a channel.
  1064. handle : Channel handle (HMUSIC/HSTREAM)
  1065. fx     : Handle of FX to remove */
  1066. BOOL BASSDEF(BASS_ChannelSetEAXMix)(DWORD handle, float mix);
  1067. /* Set the wet(reverb)/dry(no reverb) mix ratio on the channel. By default
  1068. the distance of the sound from the listener is used to calculate the mix.
  1069. NOTE: The channel must have 3D functionality enabled for the EAX environment
  1070. to have any affect on it.
  1071. handle : Channel handle (HCHANNEL/HSTREAM/HMUSIC)
  1072. mix    : The ratio (0.0=reverb off, 1.0=max reverb, -1.0=let EAX calculate
  1073.          the reverb mix based on the distance) */
  1074. BOOL BASSDEF(BASS_ChannelGetEAXMix)(DWORD handle, float *mix);
  1075. /* Get the wet(reverb)/dry(no reverb) mix ratio on the channel.
  1076. handle : Channel handle (HCHANNEL/HSTREAM/HMUSIC)
  1077. mix    : Pointer to store the ratio at */
  1078. BOOL BASSDEF(BASS_ChannelSetLink)(DWORD handle, DWORD chan);
  1079. /* Set a link between 2 channels. When the 1st is played/stopped/paused/resumed
  1080. the 2nd channel is also played/stopped/paused/resumed.
  1081. handle : Handle of channel to link "chan" to (HMUSIC/HSTREAM)
  1082. chan   : Handle of channel to link to "handle" (HMUSIC/HSTREAM) */
  1083. BOOL BASSDEF(BASS_ChannelRemoveLink)(DWORD handle, DWORD chan);
  1084. /* Remove a link from a channel.
  1085. handle : Handle of channel to unlink with "chan" (HMUSIC/HSTREAM)
  1086. chan   : Handle of channel to unlink from "handle" (HMUSIC/HSTREAM) */
  1087. BOOL BASSDEF(BASS_FXSetParameters)(HFX handle, void *par);
  1088. /* Set the parameters of a DX8 effect.
  1089. handle : FX handle
  1090. par    : Pointer to the parameter structure */
  1091. BOOL BASSDEF(BASS_FXGetParameters)(HFX handle, void *par);
  1092. /* Retrieve the parameters of a DX8 effect.
  1093. handle : FX handle
  1094. par    : Pointer to the parameter structure */
  1095. #ifdef __cplusplus
  1096. }
  1097. #endif
  1098. #endif