home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 November / CDVD1105.ISO / Software / Freeware / programare / bass / Delphi / dynamic / Dynamic_Bass.pas
Encoding:
Pascal/Delphi Source File  |  2005-10-03  |  52.7 KB  |  1,176 lines

  1. {
  2.   BASS 2.2 Audio Library, (c) 1999-2005 Ian Luck.
  3.   Please report bugs/suggestions/etc... to bass@un4seen.com
  4.  
  5.   See the BASS.CHM file for more complete documentation
  6.  
  7.  
  8.   How to install
  9.   ----------------
  10.   Copy DYNAMIC_BASS.PAS to the \LIB subdirectory of your Delphi path or your project dir
  11.  
  12.   Call Load_BASSDLL (eg. in FormCreate) to load BASS before using any functions, and
  13.   Unload_BASSDLL (eg. in FormDestory) to unload it when you're done.
  14. }
  15. unit Dynamic_Bass;
  16.  
  17. interface
  18.  
  19. uses
  20.   Windows,
  21.   SysUtils;
  22.  
  23. const
  24.   // Use these to test for error from functions that return a DWORD or QWORD
  25.   DW_ERROR = Cardinal(-1); // -1 (DWORD)
  26.   QW_ERROR = Int64(-1);    // -1 (QWORD)
  27.  
  28.   // Error codes returned by BASS_GetErrorCode()
  29.   BASS_OK                 = 0;    // all is OK
  30.   BASS_ERROR_MEM          = 1;    // memory error
  31.   BASS_ERROR_FILEOPEN     = 2;    // can't open the file
  32.   BASS_ERROR_DRIVER       = 3;    // can't find a free sound driver
  33.   BASS_ERROR_BUFLOST      = 4;    // the sample buffer was lost - please report this!
  34.   BASS_ERROR_HANDLE       = 5;    // invalid handle
  35.   BASS_ERROR_FORMAT       = 6;    // unsupported sample format
  36.   BASS_ERROR_POSITION     = 7;    // invalid playback position
  37.   BASS_ERROR_INIT         = 8;    // BASS_Init has not been successfully called
  38.   BASS_ERROR_START        = 9;    // BASS_Start has not been successfully called
  39.   BASS_ERROR_ALREADY      = 14;   // already initialized/paused/whatever
  40.   BASS_ERROR_NOPAUSE      = 16;   // not paused
  41.   BASS_ERROR_NOCHAN       = 18;   // can't get a free channel
  42.   BASS_ERROR_ILLTYPE      = 19;   // an illegal type was specified
  43.   BASS_ERROR_ILLPARAM     = 20;   // an illegal parameter was specified
  44.   BASS_ERROR_NO3D         = 21;   // no 3D support
  45.   BASS_ERROR_NOEAX        = 22;   // no EAX support
  46.   BASS_ERROR_DEVICE       = 23;   // illegal device number
  47.   BASS_ERROR_NOPLAY       = 24;   // not playing
  48.   BASS_ERROR_FREQ         = 25;   // illegal sample rate
  49.   BASS_ERROR_NOTFILE      = 27;   // the stream is not a file stream
  50.   BASS_ERROR_NOHW         = 29;   // no hardware voices available
  51.   BASS_ERROR_EMPTY        = 31;   // the MOD music has no sequence data
  52.   BASS_ERROR_NONET        = 32;   // no internet connection could be opened
  53.   BASS_ERROR_CREATE       = 33;   // couldn't create the file
  54.   BASS_ERROR_NOFX         = 34;   // effects are not enabled
  55.   BASS_ERROR_PLAYING      = 35;   // the channel is playing
  56.   BASS_ERROR_NOTAVAIL     = 37;   // requested data is not available
  57.   BASS_ERROR_DECODE       = 38;   // the channel is a "decoding channel"
  58.   BASS_ERROR_DX           = 39;   // a sufficient DirectX version is not installed
  59.   BASS_ERROR_TIMEOUT      = 40;   // connection timedout
  60.   BASS_ERROR_FILEFORM     = 41;   // unsupported file format
  61.   BASS_ERROR_SPEAKER      = 42;   // unavailable speaker
  62.   BASS_ERROR_UNKNOWN      = -1;   // some other mystery error
  63.  
  64.   // Initialization flags
  65.   BASS_DEVICE_8BITS       = 1;    // use 8 bit resolution, else 16 bit
  66.   BASS_DEVICE_MONO        = 2;    // use mono, else stereo
  67.   BASS_DEVICE_3D          = 4;    // enable 3D functionality
  68.   {
  69.     If the BASS_DEVICE_3D flag is not specified when
  70.     initilizing BASS, then the 3D flags (BASS_SAMPLE_3D
  71.     and BASS_MUSIC_3D) are ignored when loading/creating
  72.     a sample/stream/music.
  73.   }
  74.   BASS_DEVICE_LATENCY     = 256;  // calculate device latency (BASS_INFO struct)
  75.   BASS_DEVICE_SPEAKERS    = 2048; // force enabling of speaker assignment
  76.  
  77.   // DirectSound interfaces (for use with BASS_GetDSoundObject)
  78.   BASS_OBJECT_DS          = 1;   // IDirectSound
  79.   BASS_OBJECT_DS3DL       = 2;   // IDirectSound3DListener
  80.  
  81.   // BASS_INFO flags (from DSOUND.H)
  82.   DSCAPS_CONTINUOUSRATE   = $00000010;
  83.   { supports all sample rates between min/maxrate }
  84.   DSCAPS_EMULDRIVER       = $00000020;
  85.   { device does NOT have hardware DirectSound support }
  86.   DSCAPS_CERTIFIED        = $00000040;
  87.   { device driver has been certified by Microsoft }
  88.   {
  89.     The following flags tell what type of samples are
  90.     supported by HARDWARE mixing, all these formats are
  91.     supported by SOFTWARE mixing
  92.   }
  93.   DSCAPS_SECONDARYMONO    = $00000100;     // mono
  94.   DSCAPS_SECONDARYSTEREO  = $00000200;     // stereo
  95.   DSCAPS_SECONDARY8BIT    = $00000400;     // 8 bit
  96.   DSCAPS_SECONDARY16BIT   = $00000800;     // 16 bit
  97.  
  98.   // BASS_RECORDINFO flags (from DSOUND.H)
  99.   DSCCAPS_EMULDRIVER = DSCAPS_EMULDRIVER;
  100.   { device does NOT have hardware DirectSound recording support }
  101.   DSCCAPS_CERTIFIED = DSCAPS_CERTIFIED;
  102.   { device driver has been certified by Microsoft }
  103.  
  104.   // defines for formats field of BASS_RECORDINFO (from MMSYSTEM.H)
  105.   WAVE_FORMAT_1M08       = $00000001;      // 11.025 kHz, Mono,   8-bit
  106.   WAVE_FORMAT_1S08       = $00000002;      // 11.025 kHz, Stereo, 8-bit
  107.   WAVE_FORMAT_1M16       = $00000004;      // 11.025 kHz, Mono,   16-bit
  108.   WAVE_FORMAT_1S16       = $00000008;      // 11.025 kHz, Stereo, 16-bit
  109.   WAVE_FORMAT_2M08       = $00000010;      // 22.05  kHz, Mono,   8-bit
  110.   WAVE_FORMAT_2S08       = $00000020;      // 22.05  kHz, Stereo, 8-bit
  111.   WAVE_FORMAT_2M16       = $00000040;      // 22.05  kHz, Mono,   16-bit
  112.   WAVE_FORMAT_2S16       = $00000080;      // 22.05  kHz, Stereo, 16-bit
  113.   WAVE_FORMAT_4M08       = $00000100;      // 44.1   kHz, Mono,   8-bit
  114.   WAVE_FORMAT_4S08       = $00000200;      // 44.1   kHz, Stereo, 8-bit
  115.   WAVE_FORMAT_4M16       = $00000400;      // 44.1   kHz, Mono,   16-bit
  116.   WAVE_FORMAT_4S16       = $00000800;      // 44.1   kHz, Stereo, 16-bit
  117.  
  118.   // Sample info flags
  119.   BASS_SAMPLE_8BITS       = 1;   // 8 bit
  120.   BASS_SAMPLE_FLOAT       = 256; // 32-bit floating-point
  121.   BASS_SAMPLE_MONO        = 2;   // mono, else stereo
  122.   BASS_SAMPLE_LOOP        = 4;   // looped
  123.   BASS_SAMPLE_3D          = 8;   // 3D functionality enabled
  124.   BASS_SAMPLE_SOFTWARE    = 16;  // it's NOT using hardware mixing
  125.   BASS_SAMPLE_MUTEMAX     = 32;  // muted at max distance (3D only)
  126.   BASS_SAMPLE_VAM         = 64;  // uses the DX7 voice allocation & management
  127.   BASS_SAMPLE_FX          = 128; // old implementation of DX8 effects are enabled
  128.   BASS_SAMPLE_OVER_VOL    = $10000; // override lowest volume
  129.   BASS_SAMPLE_OVER_POS    = $20000; // override longest playing
  130.   BASS_SAMPLE_OVER_DIST   = $30000; // override furthest from listener (3D only)
  131.  
  132.   BASS_STREAM_PRESCAN     = $20000; // enable pin-point seeking (MP3/MP2/MP1)
  133.   BASS_MP3_SETPOS         = BASS_STREAM_PRESCAN;
  134.   BASS_STREAM_AUTOFREE      = $40000; // automatically free the stream when it stop/ends
  135.   BASS_STREAM_RESTRATE      = $80000; // restrict the download rate of internet file streams
  136.   BASS_STREAM_BLOCK       = $100000;// download/play internet file stream in small blocks
  137.   BASS_STREAM_DECODE      = $200000;// don't play the stream, only decode (BASS_ChannelGetData)
  138.   BASS_STREAM_STATUS      = $800000;// give server status info (HTTP/ICY tags) in DOWNLOADPROC
  139.  
  140.   BASS_MUSIC_FLOAT        = BASS_SAMPLE_FLOAT; // 32-bit floating-point
  141.   BASS_MUSIC_MONO         = BASS_SAMPLE_MONO; // force mono mixing (less CPU usage)
  142.   BASS_MUSIC_LOOP         = BASS_SAMPLE_LOOP; // loop music
  143.   BASS_MUSIC_3D           = BASS_SAMPLE_3D; // enable 3D functionality
  144.   BASS_MUSIC_FX           = BASS_SAMPLE_FX; // enable old implementation of DX8 effects
  145.   BASS_MUSIC_AUTOFREE     = BASS_STREAM_AUTOFREE; // automatically free the music when it stop/ends
  146.   BASS_MUSIC_DECODE       = BASS_STREAM_DECODE; // don't play the music, only decode (BASS_ChannelGetData)
  147.   BASS_MUSIC_PRESCAN      = BASS_STREAM_PRESCAN; // calculate playback length
  148.   BASS_MUSIC_CALCLEN      = BASS_MUSIC_PRESCAN;
  149.   BASS_MUSIC_RAMP         = $200;  // normal ramping
  150.   BASS_MUSIC_RAMPS        = $400;  // sensitive ramping
  151.   BASS_MUSIC_SURROUND     = $800;  // surround sound
  152.   BASS_MUSIC_SURROUND2    = $1000; // surround sound (mode 2)
  153.   BASS_MUSIC_FT2MOD       = $2000; // play .MOD as FastTracker 2 does
  154.   BASS_MUSIC_PT1MOD       = $4000; // play .MOD as ProTracker 1 does
  155.   BASS_MUSIC_NONINTER     = $10000; // non-interpolated mixing
  156.   BASS_MUSIC_POSRESET     = $8000; // stop all notes when moving position
  157.   BASS_MUSIC_POSRESETEX   = $400000; // stop all notes and reset bmp/etc when moving position
  158.   BASS_MUSIC_STOPBACK     = $80000; // stop the music on a backwards jump effect
  159.   BASS_MUSIC_NOSAMPLE     = $100000; // don't load the samples
  160.  
  161.   // Speaker assignment flags
  162.   BASS_SPEAKER_FRONT      = $1000000;  // front speakers
  163.   BASS_SPEAKER_REAR       = $2000000;  // rear/side speakers
  164.   BASS_SPEAKER_CENLFE     = $3000000;  // center & LFE speakers (5.1)
  165.   BASS_SPEAKER_REAR2      = $4000000;  // rear center speakers (7.1)
  166.   BASS_SPEAKER_LEFT       = $10000000; // modifier: left
  167.   BASS_SPEAKER_RIGHT      = $20000000; // modifier: right
  168.   BASS_SPEAKER_FRONTLEFT  = BASS_SPEAKER_FRONT or BASS_SPEAKER_LEFT;
  169.   BASS_SPEAKER_FRONTRIGHT = BASS_SPEAKER_FRONT or BASS_SPEAKER_RIGHT;
  170.   BASS_SPEAKER_REARLEFT   = BASS_SPEAKER_REAR or BASS_SPEAKER_LEFT;
  171.   BASS_SPEAKER_REARRIGHT  = BASS_SPEAKER_REAR or BASS_SPEAKER_RIGHT;
  172.   BASS_SPEAKER_CENTER     = BASS_SPEAKER_CENLFE or BASS_SPEAKER_LEFT;
  173.   BASS_SPEAKER_LFE        = BASS_SPEAKER_CENLFE or BASS_SPEAKER_RIGHT;
  174.   BASS_SPEAKER_REAR2LEFT  = BASS_SPEAKER_REAR2 or BASS_SPEAKER_LEFT;
  175.   BASS_SPEAKER_REAR2RIGHT = BASS_SPEAKER_REAR2 or BASS_SPEAKER_RIGHT;
  176.  
  177.   BASS_UNICODE            = $80000000;
  178.  
  179.   BASS_RECORD_PAUSE       = $8000; // start recording paused
  180.  
  181.   // DX7 voice allocation flags
  182.   BASS_VAM_HARDWARE       = 1;
  183.   {
  184.     Play the sample in hardware. If no hardware voices are available then
  185.     the "play" call will fail
  186.   }
  187.   BASS_VAM_SOFTWARE       = 2;
  188.   {
  189.     Play the sample in software (ie. non-accelerated). No other VAM flags
  190.     may be used together with this flag.
  191.   }
  192.  
  193.   // DX7 voice management flags
  194.   {
  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
  197.     for the new buffer. NOTE: only samples loaded/created with the
  198.     BASS_SAMPLE_VAM flag are considered for termination by the DX7 voice
  199.     management.
  200.   }
  201.   BASS_VAM_TERM_TIME      = 4;
  202.   {
  203.     If there are no free hardware voices, the buffer to be terminated will be
  204.     the one with the least time left to play.
  205.   }
  206.   BASS_VAM_TERM_DIST      = 8;
  207.   {
  208.     If there are no free hardware voices, the buffer to be terminated will be
  209.     one that was loaded/created with the BASS_SAMPLE_MUTEMAX flag and is
  210.     beyond
  211.     it's max distance. If there are no buffers that match this criteria, then
  212.     the "play" call will fail.
  213.   }
  214.   BASS_VAM_TERM_PRIO      = 16;
  215.   {
  216.     If there are no free hardware voices, the buffer to be terminated will be
  217.     the one with the lowest priority.
  218.   }
  219.  
  220.   // BASS_CHANNELINFO types
  221.   BASS_CTYPE_SAMPLE       = 1;
  222.   BASS_CTYPE_RECORD       = 2;
  223.   BASS_CTYPE_STREAM       = $10000;
  224.   BASS_CTYPE_STREAM_WAV   = $10001;
  225.   BASS_CTYPE_STREAM_OGG   = $10002;
  226.   BASS_CTYPE_STREAM_MP1   = $10003;
  227.   BASS_CTYPE_STREAM_MP2   = $10004;
  228.   BASS_CTYPE_STREAM_MP3   = $10005;
  229.   BASS_CTYPE_STREAM_AIFF  = $10006;
  230.   BASS_CTYPE_MUSIC_MOD    = $20000;
  231.   BASS_CTYPE_MUSIC_MTM    = $20001;
  232.   BASS_CTYPE_MUSIC_S3M    = $20002;
  233.   BASS_CTYPE_MUSIC_XM     = $20003;
  234.   BASS_CTYPE_MUSIC_IT     = $20004;
  235.   BASS_CTYPE_MUSIC_MO3    = $00100; // mo3 flag
  236.  
  237.   // 3D channel modes
  238.   BASS_3DMODE_NORMAL      = 0;
  239.   { normal 3D processing }
  240.   BASS_3DMODE_RELATIVE    = 1;
  241.   {
  242.     The channel's 3D position (position/velocity/
  243.     orientation) are relative to the listener. When the
  244.     listener's position/velocity/orientation is changed
  245.     with BASS_Set3DPosition, the channel's position
  246.     relative to the listener does not change.
  247.   }
  248.   BASS_3DMODE_OFF         = 2;
  249.   {
  250.     Turn off 3D processing on the channel, the sound will
  251.     be played in the center.
  252.   }
  253.  
  254.   // EAX environments, use with BASS_SetEAXParameters
  255.   EAX_ENVIRONMENT_OFF               = -1;
  256.   EAX_ENVIRONMENT_GENERIC           = 0;
  257.   EAX_ENVIRONMENT_PADDEDCELL        = 1;
  258.   EAX_ENVIRONMENT_ROOM              = 2;
  259.   EAX_ENVIRONMENT_BATHROOM          = 3;
  260.   EAX_ENVIRONMENT_LIVINGROOM        = 4;
  261.   EAX_ENVIRONMENT_STONEROOM         = 5;
  262.   EAX_ENVIRONMENT_AUDITORIUM        = 6;
  263.   EAX_ENVIRONMENT_CONCERTHALL       = 7;
  264.   EAX_ENVIRONMENT_CAVE              = 8;
  265.   EAX_ENVIRONMENT_ARENA             = 9;
  266.   EAX_ENVIRONMENT_HANGAR            = 10;
  267.   EAX_ENVIRONMENT_CARPETEDHALLWAY   = 11;
  268.   EAX_ENVIRONMENT_HALLWAY           = 12;
  269.   EAX_ENVIRONMENT_STONECORRIDOR     = 13;
  270.   EAX_ENVIRONMENT_ALLEY             = 14;
  271.   EAX_ENVIRONMENT_FOREST            = 15;
  272.   EAX_ENVIRONMENT_CITY              = 16;
  273.   EAX_ENVIRONMENT_MOUNTAINS         = 17;
  274.   EAX_ENVIRONMENT_QUARRY            = 18;
  275.   EAX_ENVIRONMENT_PLAIN             = 19;
  276.   EAX_ENVIRONMENT_PARKINGLOT        = 20;
  277.   EAX_ENVIRONMENT_SEWERPIPE         = 21;
  278.   EAX_ENVIRONMENT_UNDERWATER        = 22;
  279.   EAX_ENVIRONMENT_DRUGGED           = 23;
  280.   EAX_ENVIRONMENT_DIZZY             = 24;
  281.   EAX_ENVIRONMENT_PSYCHOTIC         = 25;
  282.   // total number of environments
  283.   EAX_ENVIRONMENT_COUNT             = 26;
  284.  
  285.   // software 3D mixing algorithm modes (used with BASS_Set3DAlgorithm)
  286.   BASS_3DALG_DEFAULT                = 0;
  287.   {
  288.     default algorithm (currently translates to BASS_3DALG_OFF)
  289.   }
  290.   BASS_3DALG_OFF                    = 1;
  291.   {
  292.     Uses normal left and right panning. The vertical axis is ignored except
  293.     for scaling of volume due to distance. Doppler shift and volume scaling
  294.     are still applied, but the 3D filtering is not performed. This is the
  295.     most CPU efficient software implementation, but provides no virtual 3D
  296.     audio effect. Head Related Transfer Function processing will not be done.
  297.     Since only normal stereo panning is used, a channel using this algorithm
  298.     may be accelerated by a 2D hardware voice if no free 3D hardware voices
  299.     are available.
  300.   }
  301.   BASS_3DALG_FULL                   = 2;
  302.   {
  303.     This algorithm gives the highest quality 3D audio effect, but uses more
  304.     CPU. Requires Windows 98 2nd Edition or Windows 2000 that uses WDM
  305.     drivers, if this mode is not available then BASS_3DALG_OFF will be used
  306.     instead.
  307.   }
  308.   BASS_3DALG_LIGHT                  = 3;
  309.   {
  310.     This algorithm gives a good 3D audio effect, and uses less CPU than the
  311.     FULL mode. Requires Windows 98 2nd Edition or Windows 2000 that uses WDM
  312.     drivers, if this mode is not available then BASS_3DALG_OFF will be used
  313.     instead.
  314.   }
  315.  
  316.   {
  317.     Sync types (with BASS_ChannelSetSync() "param" and
  318.     SYNCPROC "data" definitions) & flags.
  319.   }
  320.   BASS_SYNC_POS                     = 0;
  321.   {
  322.     Sync when a channel reaches a position.
  323.     param: position in bytes
  324.     data : not used
  325.   }
  326.   BASS_SYNC_END                     = 2;
  327.   {
  328.     Sync when a channel reaches the end.
  329.     param: not used
  330.     data : not used
  331.   }
  332.   BASS_SYNC_META                    = 4;
  333.   {
  334.     Sync when metadata is received in a stream.
  335.     param: not used
  336.     data : pointer to the metadata
  337.   }
  338.   BASS_SYNC_SLIDE                   = 5;
  339.   {
  340.     Sync when an attribute slide is completed.
  341.     param: not used
  342.     data : the type of slide completed (one of the BASS_SLIDE_xxx values)
  343.   }
  344.   BASS_SYNC_STALL                   = 6;
  345.   {
  346.     Sync when playback has stalled.
  347.     param: not used
  348.     data : 0=stalled, 1=resumed
  349.   }
  350.   BASS_SYNC_DOWNLOAD                = 7;
  351.   {
  352.     Sync when downloading of an internet (or "buffered" user file) stream has ended.
  353.     param: not used
  354.     data : not used
  355.   }
  356.   BASS_SYNC_FREE                    = 8;
  357.   {
  358.     Sync when a channel is freed.
  359.     param: not used
  360.     data : not used
  361.   }
  362.   BASS_SYNC_MUSICPOS                = 10;
  363.   {
  364.     Sync when a MOD music reaches an order:row position.
  365.     param: LOWORD=order (0=first, -1=all) HIWORD=row (0=first, -1=all)
  366.     data : LOWORD=order HIWORD=row
  367.   }
  368.   BASS_SYNC_MUSICINST               = 1;
  369.   {
  370.     Sync when an instrument (sample for the non-instrument based formats)
  371.     is played in a MOD music (not including retrigs).
  372.     param: LOWORD=instrument (1=first) HIWORD=note (0=c0...119=b9, -1=all)
  373.     data : LOWORD=note HIWORD=volume (0-64)
  374.   }
  375.   BASS_SYNC_MUSICFX                 = 3;
  376.   {
  377.     Sync when the "sync" effect (XM/MTM/MOD: E8x/Wxx, IT/S3M: S2x) is used.
  378.     param: 0:data=pos, 1:data="x" value
  379.     data : param=0: LOWORD=order HIWORD=row, param=1: "x" value
  380.   }
  381.   BASS_SYNC_MESSAGE                 = $20000000;
  382.   { FLAG: post a Windows message (instead of callback)
  383.     When using a window message "callback", the message to post is given in the "proc"
  384.     parameter of BASS_ChannelSetSync, and is posted to the window specified in the BASS_Init
  385.     call. The message parameters are: WPARAM = data, LPARAM = user.
  386.   }
  387.   BASS_SYNC_MIXTIME                 = $40000000;
  388.   { FLAG: sync at mixtime, else at playtime }
  389.   BASS_SYNC_ONETIME                 = $80000000;
  390.   { FLAG: sync only once, else continuously }
  391.  
  392.   // BASS_ChannelIsActive return values
  393.   BASS_ACTIVE_STOPPED = 0;
  394.   BASS_ACTIVE_PLAYING = 1;
  395.   BASS_ACTIVE_STALLED = 2;
  396.   BASS_ACTIVE_PAUSED  = 3;
  397.  
  398.   // BASS_ChannelIsSliding return flags
  399.   BASS_SLIDE_FREQ     = 1;
  400.   BASS_SLIDE_VOL      = 2;
  401.   BASS_SLIDE_PAN      = 4;
  402.  
  403.   // BASS_ChannelGetData flags
  404.   BASS_DATA_AVAILABLE = 0;        // query how much data is buffered
  405.   BASS_DATA_FLOAT    = $40000000; // flag: return floating-point sample data
  406.   BASS_DATA_FFT512   = $80000000; // 512 sample FFT
  407.   BASS_DATA_FFT1024  = $80000001; // 1024 FFT
  408.   BASS_DATA_FFT2048  = $80000002; // 2048 FFT
  409.   BASS_DATA_FFT4096  = $80000003; // 4096 FFT
  410.   BASS_DATA_FFT_INDIVIDUAL = $10; // FFT flag: FFT for each channel, else all combined
  411.   BASS_DATA_FFT_NOWINDOW = $20;   // FFT flag: no Hanning window
  412.  
  413.   // BASS_StreamGetTags flags : what's returned
  414.   BASS_TAG_ID3   = 0; // ID3v1 tags : 128 byte block
  415.   BASS_TAG_ID3V2 = 1; // ID3v2 tags : variable length block
  416.   BASS_TAG_OGG   = 2; // OGG comments : array of null-terminated strings
  417.   BASS_TAG_HTTP  = 3; // HTTP headers : array of null-terminated strings
  418.   BASS_TAG_ICY   = 4; // ICY headers : array of null-terminated strings
  419.   BASS_TAG_META  = 5; // ICY metadata : null-terminated string
  420.  
  421.   BASS_FX_CHORUS      = 0;      // GUID_DSFX_STANDARD_CHORUS
  422.   BASS_FX_COMPRESSOR  = 1;      // GUID_DSFX_STANDARD_COMPRESSOR
  423.   BASS_FX_DISTORTION  = 2;      // GUID_DSFX_STANDARD_DISTORTION
  424.   BASS_FX_ECHO        = 3;      // GUID_DSFX_STANDARD_ECHO
  425.   BASS_FX_FLANGER     = 4;      // GUID_DSFX_STANDARD_FLANGER
  426.   BASS_FX_GARGLE      = 5;      // GUID_DSFX_STANDARD_GARGLE
  427.   BASS_FX_I3DL2REVERB = 6;      // GUID_DSFX_STANDARD_I3DL2REVERB
  428.   BASS_FX_PARAMEQ     = 7;      // GUID_DSFX_STANDARD_PARAMEQ
  429.   BASS_FX_REVERB      = 8;      // GUID_DSFX_WAVES_REVERB
  430.  
  431.   BASS_FX_PHASE_NEG_180 = 0;
  432.   BASS_FX_PHASE_NEG_90  = 1;
  433.   BASS_FX_PHASE_ZERO    = 2;
  434.   BASS_FX_PHASE_90      = 3;
  435.   BASS_FX_PHASE_180     = 4;
  436.  
  437.   // BASS_RecordSetInput flags
  438.   BASS_INPUT_OFF    = $10000;
  439.   BASS_INPUT_ON     = $20000;
  440.   BASS_INPUT_LEVEL  = $40000;
  441.  
  442.   BASS_INPUT_TYPE_MASK    = $ff000000;
  443.   BASS_INPUT_TYPE_UNDEF   = $00000000;
  444.   BASS_INPUT_TYPE_DIGITAL = $01000000;
  445.   BASS_INPUT_TYPE_LINE    = $02000000;
  446.   BASS_INPUT_TYPE_MIC     = $03000000;
  447.   BASS_INPUT_TYPE_SYNTH   = $04000000;
  448.   BASS_INPUT_TYPE_CD      = $05000000;
  449.   BASS_INPUT_TYPE_PHONE   = $06000000;
  450.   BASS_INPUT_TYPE_SPEAKER = $07000000;
  451.   BASS_INPUT_TYPE_WAVE    = $08000000;
  452.   BASS_INPUT_TYPE_AUX     = $09000000;
  453.   BASS_INPUT_TYPE_ANALOG  = $0a000000;
  454.  
  455.   // BASS_SetNetConfig flags
  456.   BASS_NET_TIMEOUT  = 0;
  457.   BASS_NET_BUFFER   = 1;
  458.  
  459.   // BASS_StreamGetFilePosition modes
  460.   BASS_FILEPOS_CURRENT    = 0;
  461.   BASS_FILEPOS_DECODE     = BASS_FILEPOS_CURRENT;
  462.   BASS_FILEPOS_DOWNLOAD   = 1;
  463.   BASS_FILEPOS_END        = 2;
  464.   BASS_FILEPOS_START      = 3;
  465.  
  466.   // STREAMFILEPROC actions
  467.   BASS_FILE_CLOSE   = 0;
  468.   BASS_FILE_READ    = 1;
  469.   BASS_FILE_LEN     = 3;
  470.   BASS_FILE_SEEK    = 4;
  471.  
  472.   BASS_STREAMPROC_END = $80000000; // end of user stream flag
  473.  
  474.   // BASS_MusicSet/GetAttribute options
  475.   BASS_MUSIC_ATTRIB_AMPLIFY    = 0;
  476.   BASS_MUSIC_ATTRIB_PANSEP     = 1;
  477.   BASS_MUSIC_ATTRIB_PSCALER    = 2;
  478.   BASS_MUSIC_ATTRIB_BPM        = 3;
  479.   BASS_MUSIC_ATTRIB_SPEED      = 4;
  480.   BASS_MUSIC_ATTRIB_VOL_GLOBAL = 5;
  481.   BASS_MUSIC_ATTRIB_VOL_CHAN   = $100; // + channel #
  482.   BASS_MUSIC_ATTRIB_VOL_INST   = $200; // + instrument #
  483.  
  484.   // BASS_Set/GetConfig options
  485.   BASS_CONFIG_BUFFER        = 0;
  486.   BASS_CONFIG_UPDATEPERIOD  = 1;
  487.   BASS_CONFIG_MAXVOL        = 3;
  488.   BASS_CONFIG_GVOL_SAMPLE   = 4;
  489.   BASS_CONFIG_GVOL_STREAM   = 5;
  490.   BASS_CONFIG_GVOL_MUSIC    = 6;
  491.   BASS_CONFIG_CURVE_VOL     = 7;
  492.   BASS_CONFIG_CURVE_PAN     = 8;
  493.   BASS_CONFIG_FLOATDSP      = 9;
  494.   BASS_CONFIG_3DALGORITHM   = 10;
  495.   BASS_CONFIG_NET_TIMEOUT   = 11;
  496.   BASS_CONFIG_NET_BUFFER    = 12;
  497.   BASS_CONFIG_PAUSE_NOPLAY  = 13;
  498.   BASS_CONFIG_NET_NOPROXY   = 14;
  499.   BASS_CONFIG_NET_PREBUF    = 15;
  500.  
  501. type
  502.   DWORD = cardinal;
  503.   BOOL = LongBool;
  504.   FLOAT = Single;
  505.   QWORD = int64;        // 64-bit (replace "int64" with "comp" if using Delphi 3)
  506.  
  507.   HMUSIC = DWORD;       // MOD music handle
  508.   HSAMPLE = DWORD;      // sample handle
  509.   HCHANNEL = DWORD;     // playing sample's channel handle
  510.   HSTREAM = DWORD;      // sample stream handle
  511.   HRECORD = DWORD;      // recording handle
  512.   HSYNC = DWORD;        // synchronizer handle
  513.   HDSP = DWORD;         // DSP handle
  514.   HFX = DWORD;          // DX8 effect handle
  515.   HPLUGIN = DWORD;      // Plugin handle
  516.  
  517.   BASS_INFO = record
  518.     flags: DWORD;       // device capabilities (DSCAPS_xxx flags)
  519.     hwsize: DWORD;      // size of total device hardware memory
  520.     hwfree: DWORD;      // size of free device hardware memory
  521.     freesam: DWORD;     // number of free sample slots in the hardware
  522.     free3d: DWORD;      // number of free 3D sample slots in the hardware
  523.     minrate: DWORD;     // min sample rate supported by the hardware
  524.     maxrate: DWORD;     // max sample rate supported by the hardware
  525.     eax: BOOL;          // device supports EAX? (always FALSE if BASS_DEVICE_3D was not used)
  526.     minbuf: DWORD;      // recommended minimum buffer length in ms (requires BASS_DEVICE_LATENCY)
  527.     dsver: DWORD;       // DirectSound version
  528.     latency: DWORD;     // delay (in ms) before start of playback (requires BASS_DEVICE_LATENCY)
  529.     initflags: DWORD;   // "flags" parameter of BASS_Init call
  530.     speakers: DWORD;    // number of speakers available
  531.     driver: PChar;      // driver
  532.   end;
  533.  
  534.   BASS_RECORDINFO = record
  535.     flags: DWORD;       // device capabilities (DSCCAPS_xxx flags)
  536.     formats: DWORD;     // supported standard formats (WAVE_FORMAT_xxx flags)
  537.     inputs: DWORD;      // number of inputs
  538.     singlein: BOOL;     // only 1 input can be set at a time
  539.     driver: PChar;      // driver
  540.   end;
  541.  
  542.   BASS_CHANNELINFO = record
  543.     freq: DWORD;        // default playback rate
  544.     chans: DWORD;       // channels
  545.     flags: DWORD;       // BASS_SAMPLE/STREAM/MUSIC/SPEAKER flags
  546.     ctype: DWORD;       // type of channel
  547.     origres: DWORD;     // original resolution
  548.   end;
  549.  
  550.   // Sample info structure
  551.   BASS_SAMPLE = record
  552.     freq: DWORD;        // default playback rate
  553.     volume: DWORD;      // default volume (0-100)
  554.     pan: Integer;       // default pan (-100=left, 0=middle, 100=right)
  555.     flags: DWORD;       // BASS_SAMPLE_xxx flags
  556.     length: DWORD;      // length (in samples, not bytes)
  557.     max: DWORD;         // maximum simultaneous playbacks
  558.     origres: DWORD;     // original resolution
  559.     chans: DWORD;       // number of channels
  560.     {
  561.       The following are the sample's default 3D attributes
  562.       (if the sample is 3D, BASS_SAMPLE_3D is in flags)
  563.       see BASS_ChannelSet3DAttributes
  564.     }
  565.     mode3d: DWORD;      // BASS_3DMODE_xxx mode
  566.     mindist: FLOAT;     // minimum distance
  567.     maxdist: FLOAT;     // maximum distance
  568.     iangle: DWORD;      // angle of inside projection cone
  569.     oangle: DWORD;      // angle of outside projection cone
  570.     outvol: DWORD;      // delta-volume outside the projection cone
  571.     {
  572.       The following are the defaults used if the sample uses the DirectX 7
  573.       voice allocation/management features.
  574.     }
  575.     vam: DWORD;         // voice allocation/management flags (BASS_VAM_xxx)
  576.     priority: DWORD;    // priority (0=lowest, $ffffffff=highest)
  577.   end;
  578.  
  579.   // 3D vector (for 3D positions/velocities/orientations)
  580.   BASS_3DVECTOR = record
  581.     x: FLOAT;           // +=right, -=left
  582.     y: FLOAT;           // +=up, -=down
  583.     z: FLOAT;           // +=front, -=behind
  584.   end;
  585.  
  586.   BASS_FXCHORUS = record
  587.     fWetDryMix: FLOAT;
  588.     fDepth: FLOAT;
  589.     fFeedback: FLOAT;
  590.     fFrequency: FLOAT;
  591.     lWaveform: DWORD;   // 0=triangle, 1=sine
  592.     fDelay: FLOAT;
  593.     lPhase: DWORD;      // BASS_FX_PHASE_xxx
  594.   end;
  595.  
  596.   BASS_FXCOMPRESSOR = record
  597.     fGain: FLOAT;
  598.     fAttack: FLOAT;
  599.     fRelease: FLOAT;
  600.     fThreshold: FLOAT;
  601.     fRatio: FLOAT;
  602.     fPredelay: FLOAT;
  603.   end;
  604.  
  605.   BASS_FXDISTORTION = record
  606.     fGain: FLOAT;
  607.     fEdge: FLOAT;
  608.     fPostEQCenterFrequency: FLOAT;
  609.     fPostEQBandwidth: FLOAT;
  610.     fPreLowpassCutoff: FLOAT;
  611.   end;
  612.  
  613.   BASS_FXECHO = record
  614.     fWetDryMix: FLOAT;
  615.     fFeedback: FLOAT;
  616.     fLeftDelay: FLOAT;
  617.     fRightDelay: FLOAT;
  618.     lPanDelay: BOOL;
  619.   end;
  620.  
  621.   BASS_FXFLANGER = record
  622.     fWetDryMix: FLOAT;
  623.     fDepth: FLOAT;
  624.     fFeedback: FLOAT;
  625.     fFrequency: FLOAT;
  626.     lWaveform: DWORD;   // 0=triangle, 1=sine
  627.     fDelay: FLOAT;
  628.     lPhase: DWORD;      // BASS_FX_PHASE_xxx
  629.   end;
  630.  
  631.   BASS_FXGARGLE = record
  632.     dwRateHz: DWORD;               // Rate of modulation in hz
  633.     dwWaveShape: DWORD;            // 0=triangle, 1=square
  634.   end;
  635.  
  636.   BASS_FXI3DL2REVERB = record
  637.     lRoom: Longint;                // [-10000, 0]      default: -1000 mB
  638.     lRoomHF: Longint;              // [-10000, 0]      default: 0 mB
  639.     flRoomRolloffFactor: FLOAT;    // [0.0, 10.0]      default: 0.0
  640.     flDecayTime: FLOAT;            // [0.1, 20.0]      default: 1.49s
  641.     flDecayHFRatio: FLOAT;         // [0.1, 2.0]       default: 0.83
  642.     lReflections: Longint;         // [-10000, 1000]   default: -2602 mB
  643.     flReflectionsDelay: FLOAT;     // [0.0, 0.3]       default: 0.007 s
  644.     lReverb: Longint;              // [-10000, 2000]   default: 200 mB
  645.     flReverbDelay: FLOAT;          // [0.0, 0.1]       default: 0.011 s
  646.     flDiffusion: FLOAT;            // [0.0, 100.0]     default: 100.0 %
  647.     flDensity: FLOAT;              // [0.0, 100.0]     default: 100.0 %
  648.     flHFReference: FLOAT;          // [20.0, 20000.0]  default: 5000.0 Hz
  649.   end;
  650.  
  651.   BASS_FXPARAMEQ = record
  652.     fCenter: FLOAT;
  653.     fBandwidth: FLOAT;
  654.     fGain: FLOAT;
  655.   end;
  656.  
  657.   BASS_FXREVERB = record
  658.     fInGain: FLOAT;                // [-96.0,0.0]            default: 0.0 dB
  659.     fReverbMix: FLOAT;             // [-96.0,0.0]            default: 0.0 db
  660.     fReverbTime: FLOAT;            // [0.001,3000.0]         default: 1000.0 ms
  661.     fHighFreqRTRatio: FLOAT;       // [0.001,0.999]          default: 0.001
  662.   end;
  663.  
  664.   // callback function types
  665.   STREAMPROC = function(handle: HSTREAM; buffer: Pointer; length: DWORD; user: DWORD): DWORD; stdcall;
  666.   {
  667.     User stream callback function. NOTE: A stream function should obviously be as
  668.     quick as possible, other streams (and MOD musics) can't be mixed until
  669.     it's finished.
  670.     handle : The stream that needs writing
  671.     buffer : Buffer to write the samples in
  672.     length : Number of bytes to write
  673.     user   : The 'user' parameter value given when calling BASS_StreamCreate
  674.     RETURN : Number of bytes written. Set the BASS_STREAMPROC_END flag to end
  675.              the stream.
  676.   }
  677.  
  678.   STREAMFILEPROC = function(action, param1, param2, user: DWORD): DWORD; stdcall;
  679.   {  
  680.     User file stream callback function.
  681.     action : The action to perform, one of BASS_FILE_xxx values.
  682.     param1 : Depends on "action"
  683.     param2 : Depends on "action"
  684.     user   : The 'user' parameter value given when calling BASS_StreamCreate
  685.     RETURN : Depends on "action"
  686.   }
  687.  
  688.   DOWNLOADPROC = procedure(buffer: Pointer; length: DWORD; user: DWORD); stdcall;
  689.   {
  690.     Internet stream download callback function.
  691.     buffer : Buffer containing the downloaded data... NULL=end of download
  692.     length : Number of bytes in the buffer
  693.     user   : The 'user' parameter value given when calling BASS_StreamCreateURL
  694.   }
  695.  
  696.   SYNCPROC = procedure(handle: HSYNC; channel, data: DWORD; user: DWORD); stdcall;
  697.   {
  698.     Sync callback function. NOTE: a sync callback function should be very
  699.     quick as other syncs cannot be processed until it has finished. If the
  700.     sync is a "mixtime" sync, then other streams and MOD musics can not be
  701.     mixed until it's finished either.
  702.     handle : The sync that has occured
  703.     channel: Channel that the sync occured in
  704.     data   : Additional data associated with the sync's occurance
  705.     user   : The 'user' parameter given when calling BASS_ChannelSetSync
  706.   }
  707.  
  708.   DSPPROC = procedure(handle: HDSP; channel: DWORD; buffer: Pointer; length: DWORD; user: DWORD); stdcall;
  709.   {
  710.     DSP callback function. NOTE: A DSP function should obviously be as quick
  711.     as possible... other DSP functions, streams and MOD musics can not be
  712.     processed until it's finished.
  713.     handle : The DSP handle
  714.     channel: Channel that the DSP is being applied to
  715.     buffer : Buffer to apply the DSP to
  716.     length : Number of bytes in the buffer
  717.     user   : The 'user' parameter given when calling BASS_ChannelSetDSP
  718.   }
  719.  
  720.   RECORDPROC = function(handle: HRECORD; buffer: Pointer; length: DWORD; user: DWORD): BOOL; stdcall;
  721.   {
  722.     Recording callback function.
  723.     handle : The recording handle
  724.     buffer : Buffer containing the recorded sample data
  725.     length : Number of bytes
  726.     user   : The 'user' parameter value given when calling BASS_RecordStart
  727.     RETURN : TRUE = continue recording, FALSE = stop
  728.   }
  729.  
  730.  
  731. // Vars that will hold our dynamically loaded functions...hopefully I didn't miss one of them...if I did miss one (stupid, I know !-; ) please let me know which one it was !
  732. var BASS_SetConfig:function(option, value: DWORD): DWORD; stdcall;
  733. var BASS_GetConfig:function(option: DWORD): DWORD; stdcall;
  734. var BASS_GetVersion:function: DWORD; stdcall;
  735. var BASS_GetDeviceDescription:function(device: DWORD): PChar; stdcall;
  736. var BASS_ErrorGetCode:function: DWORD; stdcall;
  737. var BASS_Init:function(device: Integer; freq, flags: DWORD; win: HWND; clsid: PGUID): BOOL; stdcall;
  738. var BASS_SetDevice:function(device: DWORD): BOOL; stdcall;
  739. var BASS_GetDevice:function: DWORD; stdcall;
  740. var BASS_Free:function: BOOL; stdcall;
  741. var BASS_GetDSoundObject:function(obj: DWORD): Pointer; stdcall;
  742. var BASS_GetInfo:function(var info: BASS_INFO): BOOL; stdcall;
  743. var BASS_Update:function: BOOL; stdcall;
  744. var BASS_GetCPU:function: FLOAT; stdcall;
  745. var BASS_Start:function: BOOL; stdcall;
  746. var BASS_Stop:function: BOOL; stdcall;
  747. var BASS_Pause:function: BOOL; stdcall;
  748. var BASS_SetVolume:function(volume: DWORD): BOOL; stdcall;
  749. var BASS_GetVolume:function: Integer; stdcall;
  750.  
  751. var BASS_PluginLoad:function(f: PChar): HPLUGIN; stdcall;
  752. var BASS_PluginFree:function(handle: HPLUGIN): BOOL; stdcall;
  753.  
  754. var BASS_Set3DFactors:function(distf, rollf, doppf: FLOAT): BOOL; stdcall;
  755. var BASS_Get3DFactors:function(var distf, rollf, doppf: FLOAT): BOOL; stdcall;
  756. var BASS_Set3DPosition:function(var pos, vel, front, top: BASS_3DVECTOR): BOOL; stdcall;
  757. var BASS_Get3DPosition:function(var pos, vel, front, top: BASS_3DVECTOR): BOOL; stdcall;
  758. var BASS_Apply3D:procedure; stdcall;
  759. var BASS_SetEAXParameters:function(env: Integer; vol, decay, damp: FLOAT): BOOL; stdcall;
  760. var BASS_GetEAXParameters:function(var env: DWORD; var vol, decay, damp: FLOAT): BOOL; stdcall;
  761.  
  762. var BASS_MusicLoad:function(mem: BOOL; f: Pointer; offset, length, flags, freq: DWORD): HMUSIC; stdcall;
  763. var BASS_MusicFree:function(handle: HMUSIC): BOOL; stdcall;
  764. var BASS_MusicSetAttribute:function(handle: HMUSIC; attrib,value: DWORD): DWORD; stdcall;
  765. var BASS_MusicGetAttribute:function(handle: HMUSIC; attrib: DWORD): DWORD; stdcall;
  766. var BASS_MusicGetName:function(handle: HMUSIC): PChar; stdcall;
  767. var BASS_MusicGetOrders:function(handle: HMUSIC): DWORD; stdcall;
  768. var BASS_MusicGetOrderPosition:function(handle: HMUSIC): DWORD; stdcall;
  769.  
  770. var BASS_SampleLoad:function(mem: BOOL; f: Pointer; offset, length, max, flags: DWORD): HSAMPLE; stdcall;
  771. var BASS_SampleCreate:function(length, freq, chans, max, flags: DWORD): Pointer; stdcall;
  772. var BASS_SampleCreateDone:function: HSAMPLE; stdcall;
  773. var BASS_SampleFree:function(handle: HSAMPLE): BOOL; stdcall;
  774. var BASS_SampleGetInfo:function(handle: HSAMPLE; var info: BASS_SAMPLE): BOOL; stdcall;
  775. var BASS_SampleSetInfo:function(handle: HSAMPLE; var info: BASS_SAMPLE): BOOL; stdcall;
  776. var BASS_SampleGetChannel:function(handle: HSAMPLE; onlynew: BOOL): HCHANNEL; stdcall;
  777. var BASS_SampleStop:function(handle: HSAMPLE): BOOL; stdcall;
  778.  
  779. var BASS_StreamCreate:function(freq, chans, flags: DWORD; proc: Pointer; user: DWORD): HSTREAM; stdcall;
  780. var BASS_StreamCreateFile:function(mem: BOOL; f: Pointer; offset, length, flags: DWORD): HSTREAM; stdcall;
  781. var BASS_StreamCreateURL:function(URL:PChar; offset:DWORD; flags:DWORD; proc:DOWNLOADPROC; user:DWORD):HSTREAM; stdcall;
  782. var BASS_StreamCreateFileUser:function(buffered: BOOL; flags: DWORD; proc:STREAMFILEPROC; user:DWORD): HSTREAM; stdcall;
  783. var BASS_StreamFree:function(handle: HSTREAM): BOOL; stdcall;
  784. var BASS_StreamGetTags:function(handle: HSTREAM; tags : DWORD): PChar; stdcall;
  785. var BASS_StreamGetFilePosition:function(handle:HSTREAM; mode:DWORD) : DWORD;stdcall;
  786.  
  787. var BASS_RecordGetDeviceDescription:function(devnum: DWORD):PChar;stdcall;
  788. var BASS_RecordInit:function(device: Integer):BOOL;stdcall;
  789. var BASS_RecordSetDevice:function(device: DWORD): BOOL; stdcall;
  790. var BASS_RecordGetDevice:function: DWORD; stdcall;
  791. var BASS_RecordFree:function:BOOL;stdcall;
  792. var BASS_RecordGetInfo:function(var info:BASS_RECORDINFO):BOOL;stdcall;
  793. var BASS_RecordGetInputName:function(input:Integer):PChar;stdcall;
  794. var BASS_RecordSetInput:function(input:Integer; setting:DWORD):BOOL;stdcall;
  795. var BASS_RecordGetInput:function(input:Integer):DWORD;stdcall;
  796. var BASS_RecordStart:function(freq,chans,flags:DWORD; proc:RECORDPROC; user:DWORD):HRECORD;stdcall;
  797.  
  798. var BASS_ChannelBytes2Seconds:function(handle: DWORD; pos: QWORD): FLOAT; stdcall;
  799. var BASS_ChannelSeconds2Bytes:function(handle: DWORD; pos: FLOAT): QWORD; stdcall;
  800. var BASS_ChannelGetDevice:function(handle: DWORD): DWORD; stdcall;
  801. var BASS_ChannelIsActive:function(handle: DWORD): DWORD; stdcall;
  802. var BASS_ChannelGetInfo:function(handle: DWORD; var info:BASS_CHANNELINFO):BOOL;stdcall;
  803. var BASS_ChannelSetFlags:function(handle, flags: DWORD): BOOL; stdcall;
  804. var BASS_ChannelPreBuf:function(handle,length: DWORD): BOOL; stdcall;
  805. var BASS_ChannelPlay:function(handle: HSTREAM; restart: BOOL): BOOL; stdcall;
  806. var BASS_ChannelStop:function(handle: DWORD): BOOL; stdcall;
  807. var BASS_ChannelPause:function(handle: DWORD): BOOL; stdcall;
  808. var BASS_ChannelSetAttributes:function(handle: DWORD; freq, volume, pan: Integer): BOOL; stdcall;
  809. var BASS_ChannelGetAttributes:function(handle: DWORD; var freq, volume: DWORD; var pan: Integer): BOOL; stdcall;
  810. var BASS_ChannelSlideAttributes:function(handle: DWORD; freq, volume, pan: Integer; time: DWORD): BOOL; stdcall;
  811. var BASS_ChannelIsSliding:function(handle: DWORD): DWORD; stdcall;
  812. var BASS_ChannelSet3DAttributes:function(handle: DWORD; mode: Integer; min, max: FLOAT; iangle, oangle, outvol: Integer): BOOL; stdcall;
  813. var BASS_ChannelGet3DAttributes:function(handle: DWORD; var mode: DWORD; var min, max: FLOAT; var iangle, oangle, outvol: DWORD): BOOL; stdcall;
  814. var BASS_ChannelSet3DPosition:function(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; stdcall;
  815. var BASS_ChannelGet3DPosition:function(handle: DWORD; var pos, orient, vel: BASS_3DVECTOR): BOOL; stdcall;
  816. var BASS_ChannelGetLength:function(handle: DWORD): QWORD; stdcall;
  817. var BASS_ChannelSetPosition:function(handle: DWORD; pos: QWORD): BOOL; stdcall;
  818. var BASS_ChannelGetPosition:function(handle: DWORD): QWORD; stdcall;
  819. var BASS_ChannelGetLevel:function(handle: DWORD): DWORD; stdcall;
  820. var BASS_ChannelGetData:function(handle: DWORD; buffer: Pointer; length: DWORD): DWORD; stdcall;
  821. var BASS_ChannelSetSync:function(handle: DWORD; stype: DWORD; param: QWORD; proc: SYNCPROC; user: DWORD): HSYNC; stdcall;
  822. var BASS_ChannelRemoveSync:function(handle: DWORD; sync: HSYNC): BOOL; stdcall;
  823. var BASS_ChannelSetDSP:function(handle: DWORD; proc: DSPPROC; user: DWORD; priority: Integer): HDSP; stdcall;
  824. var BASS_ChannelRemoveDSP:function(handle: DWORD; dsp: HDSP): BOOL; stdcall;
  825. var BASS_ChannelSetEAXMix:function(handle: DWORD; mix: FLOAT): BOOL; stdcall;
  826. var BASS_ChannelGetEAXMix:function(handle: DWORD; var mix: FLOAT): BOOL; stdcall;
  827. var BASS_ChannelSetLink:function(handle, chan: DWORD): BOOL; stdcall;
  828. var BASS_ChannelRemoveLink:function(handle, chan: DWORD): BOOL; stdcall;
  829. var BASS_ChannelSetFX:function(handle, etype: DWORD; priority: Integer): HFX; stdcall;
  830. var BASS_ChannelRemoveFX:function(handle: DWORD; fx: HFX): BOOL; stdcall;
  831.  
  832. var BASS_FXSetParameters:function(handle: HFX; par: Pointer): BOOL; stdcall;
  833. var BASS_FXGetParameters:function(handle: HFX; par: Pointer): BOOL; stdcall;
  834.  
  835. {ok, now we need something that loads our DLL and gets rid of it as well...}
  836.  
  837. const BASS_Handle:Thandle=0; // this will hold our handle for the dll; it functions nicely as a mutli-dll prevention unit as well...
  838.  
  839. Function Load_BASSDLL (const dllfilename:string) :boolean; // well, this functions uses sub-space field harmonics to erase all your credit cards in a 30 meter area...look at it's name, what do you think it does ?
  840.  
  841. Procedure Unload_BASSDLL; // another mystery function ???
  842. {
  843.   This function frees the dynamically linked-in functions from memory...don't forget to call it once you're done !
  844.   Best place to put this is probably the OnDestroy of your Main-Form;
  845.   suggested use in OnDestroy :
  846.   - Call BASS_Free to get rid of everything that's eating memory (automatically called, but just to be on the safe-side !),
  847.   - Then call this function.
  848. }
  849.  
  850.  
  851. function BASS_SetEAXPreset(env: Integer): BOOL;
  852. {
  853.   This function is defined in the implementation part of this unit.
  854.   It is not part of BASS.DLL but an extra function which makes it easier
  855.   to set the predefined EAX environments.
  856.   env    : a EAX_ENVIRONMENT_xxx constant
  857. }
  858.  
  859. implementation
  860.  
  861. Function Load_BASSDLL (const dllfilename:string) :boolean;
  862. const szBassDll = 'bass.dll' + #0;
  863. var
  864.   oldmode:integer;
  865.   P: PChar;
  866.   s: string;
  867.   dllfile: array[0..MAX_PATH + 1] of Char;
  868. begin
  869.   Result := False;
  870.   if BASS_Handle<>0 then result:=true {is it already there ?}
  871.   else begin {go & load the dll}
  872.     s := dllfilename;
  873.     if Length(s) = 0 then begin
  874.       P := nil;
  875.       if SearchPath(nil, PChar(szBassDll), nil, MAX_PATH, dllfile, P) > 0 then
  876.         s := StrPas(dllfile)
  877.       else exit;
  878.       end;
  879.     oldmode:=SetErrorMode($8001);
  880.     s := s + #0;
  881.     BASS_Handle:=LoadLibrary(pchar(s)); // obtain the handle we want
  882.     SetErrorMode(oldmode);
  883.     if BASS_Handle<>0 then
  884.        begin {now we tie the functions to the VARs from above}
  885.  
  886. @BASS_SetConfig:=GetProcAddress(BASS_Handle,pchar('BASS_SetConfig'));
  887. @BASS_GetConfig:=GetProcAddress(BASS_Handle,pchar('BASS_GetConfig'));
  888. @BASS_GetVersion:=GetProcAddress(BASS_Handle,pchar('BASS_GetVersion'));
  889. @BASS_GetDeviceDescription:=GetProcAddress(BASS_Handle,pchar('BASS_GetDeviceDescription'));
  890. @BASS_ErrorGetCode:=GetProcAddress(BASS_Handle,pchar('BASS_ErrorGetCode'));
  891. @BASS_Init:=GetProcAddress(BASS_Handle,pchar('BASS_Init'));
  892. @BASS_SetDevice:=GetProcAddress(BASS_Handle,pchar('BASS_SetDevice'));
  893. @BASS_GetDevice:=GetProcAddress(BASS_Handle,pchar('BASS_GetDevice'));
  894. @BASS_Free:=GetProcAddress(BASS_Handle,pchar('BASS_Free'));
  895. @BASS_GetDSoundObject:=GetProcAddress(BASS_Handle,pchar('BASS_GetDSoundObject'));
  896. @BASS_GetInfo:=GetProcAddress(BASS_Handle,pchar('BASS_GetInfo'));
  897. @BASS_Update:=GetProcAddress(BASS_Handle,pchar('BASS_Update'));
  898. @BASS_GetCPU:=GetProcAddress(BASS_Handle,pchar('BASS_GetCPU'));
  899. @BASS_Start:=GetProcAddress(BASS_Handle,pchar('BASS_Start'));
  900. @BASS_Stop:=GetProcAddress(BASS_Handle,pchar('BASS_Stop'));
  901. @BASS_Pause:=GetProcAddress(BASS_Handle,pchar('BASS_Pause'));
  902. @BASS_SetVolume:=GetProcAddress(BASS_Handle,pchar('BASS_SetVolume'));
  903. @BASS_GetVolume:=GetProcAddress(BASS_Handle,pchar('BASS_GetVolume'));
  904.  
  905. @BASS_PluginLoad:=GetProcAddress(BASS_Handle,pchar('BASS_PluginLoad'));
  906. @BASS_PluginFree:=GetProcAddress(BASS_Handle,pchar('BASS_PluginFree'));
  907.  
  908. @BASS_Set3DFactors:=GetProcAddress(BASS_Handle,pchar('BASS_Set3DFactors'));
  909. @BASS_Get3DFactors:=GetProcAddress(BASS_Handle,pchar('BASS_Get3DFactors'));
  910. @BASS_Set3DPosition:=GetProcAddress(BASS_Handle,pchar('BASS_Set3DPosition'));
  911. @BASS_Get3DPosition:=GetProcAddress(BASS_Handle,pchar('BASS_Get3DPosition'));
  912. @BASS_Apply3D:=GetProcAddress(BASS_Handle,pchar('BASS_Apply3D'));
  913. @BASS_SetEAXParameters:=GetProcAddress(BASS_Handle,pchar('BASS_SetEAXParameters'));
  914. @BASS_GetEAXParameters:=GetProcAddress(BASS_Handle,pchar('BASS_GetEAXParameters'));
  915.  
  916. @BASS_MusicLoad:=GetProcAddress(BASS_Handle,pchar('BASS_MusicLoad'));
  917. @BASS_MusicFree:=GetProcAddress(BASS_Handle,pchar('BASS_MusicFree'));
  918. @BASS_MusicSetAttribute:=GetProcAddress(BASS_Handle,pchar('BASS_MusicSetAttribute'));
  919. @BASS_MusicGetAttribute:=GetProcAddress(BASS_Handle,pchar('BASS_MusicGetAttribute'));
  920. @BASS_MusicGetName:=GetProcAddress(BASS_Handle,pchar('BASS_MusicGetName'));
  921. @BASS_MusicGetOrders:=GetProcAddress(BASS_Handle,pchar('BASS_MusicGetOrders'));
  922. @BASS_MusicGetOrderPosition:=GetProcAddress(BASS_Handle,pchar('BASS_MusicGetOrderPosition'));
  923.  
  924. @BASS_SampleLoad:=GetProcAddress(BASS_Handle,pchar('BASS_SampleLoad'));
  925. @BASS_SampleCreate:=GetProcAddress(BASS_Handle,pchar('BASS_SampleCreate'));
  926. @BASS_SampleCreateDone:=GetProcAddress(BASS_Handle,pchar('BASS_SampleCreateDone'));
  927. @BASS_SampleFree:=GetProcAddress(BASS_Handle,pchar('BASS_SampleFree'));
  928. @BASS_SampleGetInfo:=GetProcAddress(BASS_Handle,pchar('BASS_SampleGetInfo'));
  929. @BASS_SampleSetInfo:=GetProcAddress(BASS_Handle,pchar('BASS_SampleSetInfo'));
  930. @BASS_SampleGetChannel:=GetProcAddress(BASS_Handle,pchar('BASS_SampleGetChannel'));
  931. @BASS_SampleStop:=GetProcAddress(BASS_Handle,pchar('BASS_SampleStop'));
  932.  
  933. @BASS_StreamCreate:=GetProcAddress(BASS_Handle,pchar('BASS_StreamCreate'));
  934. @BASS_StreamCreateFile:=GetProcAddress(BASS_Handle,pchar('BASS_StreamCreateFile'));
  935. @BASS_StreamCreateURL:=GetProcAddress(BASS_Handle,pchar('BASS_StreamCreateURL'));
  936. @BASS_StreamCreateFileUser:=GetProcAddress(BASS_Handle,pchar('BASS_StreamCreateFileUser'));
  937. @BASS_StreamFree:=GetProcAddress(BASS_Handle,pchar('BASS_StreamFree'));
  938. @BASS_StreamGetTags:=GetProcAddress(BASS_Handle,pchar('BASS_StreamGetTags'));
  939. @BASS_StreamGetFilePosition:=GetProcAddress(BASS_Handle,pchar('BASS_StreamGetFilePosition'));
  940.  
  941. @BASS_RecordGetDeviceDescription:=GetProcAddress(BASS_Handle,pchar('BASS_RecordGetDeviceDescription'));
  942. @BASS_RecordInit:=GetProcAddress(BASS_Handle,pchar('BASS_RecordInit'));
  943. @BASS_RecordSetDevice:=GetProcAddress(BASS_Handle,pchar('BASS_RecordSetDevice'));
  944. @BASS_RecordGetDevice:=GetProcAddress(BASS_Handle,pchar('BASS_RecordGetDevice'));
  945. @BASS_RecordFree:=GetProcAddress(BASS_Handle,pchar('BASS_RecordFree'));
  946. @BASS_RecordGetInfo:=GetProcAddress(BASS_Handle,pchar('BASS_RecordGetInfo'));
  947. @BASS_RecordGetInputName:=GetProcAddress(BASS_Handle,pchar('BASS_RecordGetInputName'));
  948. @BASS_RecordSetInput:=GetProcAddress(BASS_Handle,pchar('BASS_RecordSetInput'));
  949. @BASS_RecordGetInput:=GetProcAddress(BASS_Handle,pchar('BASS_RecordGetInput'));
  950. @BASS_RecordStart:=GetProcAddress(BASS_Handle,pchar('BASS_RecordStart'));
  951.  
  952. @BASS_ChannelBytes2Seconds:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelBytes2Seconds'));
  953. @BASS_ChannelSeconds2Bytes:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSeconds2Bytes'));
  954. @BASS_ChannelGetDevice:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelGetDevice'));
  955. @BASS_ChannelIsActive:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelIsActive'));
  956. @BASS_ChannelGetInfo:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelGetInfo'));
  957. @BASS_ChannelSetFlags:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSetFlags'));
  958. @BASS_ChannelPreBuf:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelPreBuf'));
  959. @BASS_ChannelPlay:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelPlay'));
  960. @BASS_ChannelStop:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelStop'));
  961. @BASS_ChannelPause:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelPause'));
  962. @BASS_ChannelSetAttributes:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSetAttributes'));
  963. @BASS_ChannelGetAttributes:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelGetAttributes'));
  964. @BASS_ChannelSlideAttributes:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSlideAttributes'));
  965. @BASS_ChannelIsSliding:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelIsSliding'));
  966. @BASS_ChannelSet3DAttributes:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSet3DAttributes'));
  967. @BASS_ChannelGet3DAttributes:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelGet3DAttributes'));
  968. @BASS_ChannelSet3DPosition:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSet3DPosition'));
  969. @BASS_ChannelGet3DPosition:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelGet3DPosition'));
  970. @BASS_ChannelGetLength:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelGetLength'));
  971. @BASS_ChannelSetPosition:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSetPosition'));
  972. @BASS_ChannelGetPosition:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelGetPosition'));
  973. @BASS_ChannelGetLevel:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelGetLevel'));
  974. @BASS_ChannelGetData:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelGetData'));
  975. @BASS_ChannelSetSync:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSetSync'));
  976. @BASS_ChannelRemoveSync:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelRemoveSync'));
  977. @BASS_ChannelSetDSP:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSetDSP'));
  978. @BASS_ChannelRemoveDSP:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelRemoveDSP'));
  979. @BASS_ChannelSetEAXMix:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSetEAXMix'));
  980. @BASS_ChannelGetEAXMix:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelGetEAXMix'));
  981. @BASS_ChannelSetLink:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSetLink'));
  982. @BASS_ChannelRemoveLink:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelRemoveLink'));
  983. @BASS_ChannelSetFX:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelSetFX'));
  984. @BASS_ChannelRemoveFX:=GetProcAddress(BASS_Handle,pchar('BASS_ChannelRemoveFX'));
  985.  
  986. @BASS_FXSetParameters:=GetProcAddress(BASS_Handle,pchar('BASS_FXSetParameters'));
  987. @BASS_FXGetParameters:=GetProcAddress(BASS_Handle,pchar('BASS_FXGetParameters'));
  988.  
  989.       {now check if everything is linked in correctly}
  990.       if
  991. (@BASS_SetConfig=nil)  or
  992. (@BASS_GetConfig=nil)  or
  993. (@BASS_GetVersion=nil)  or
  994. (@BASS_GetDeviceDescription=nil)  or
  995. (@BASS_ErrorGetCode=nil)  or
  996. (@BASS_Init=nil)  or
  997. (@BASS_SetDevice=nil)  or
  998. (@BASS_GetDevice=nil)  or
  999. (@BASS_Free=nil)  or
  1000. (@BASS_GetDSoundObject=nil)  or
  1001. (@BASS_GetInfo=nil)  or
  1002. (@BASS_Update=nil)  or
  1003. (@BASS_GetCPU=nil)  or
  1004. (@BASS_Start=nil)  or
  1005. (@BASS_Stop=nil)  or
  1006. (@BASS_Pause=nil)  or
  1007. (@BASS_SetVolume=nil)  or
  1008. (@BASS_GetVolume=nil)  or
  1009.  
  1010. (@BASS_PluginLoad=nil) or
  1011. (@BASS_PluginFree=nil) or
  1012.  
  1013. (@BASS_Set3DFactors=nil)  or
  1014. (@BASS_Get3DFactors=nil)  or
  1015. (@BASS_Set3DPosition=nil)  or
  1016. (@BASS_Get3DPosition=nil)  or
  1017. (@BASS_Apply3D=nil)  or
  1018. (@BASS_SetEAXParameters=nil)  or
  1019. (@BASS_GetEAXParameters=nil)  or
  1020.  
  1021. (@BASS_MusicLoad=nil)  or
  1022. (@BASS_MusicFree=nil)  or
  1023. (@BASS_MusicSetAttribute=nil)  or
  1024. (@BASS_MusicGetAttribute=nil)  or
  1025. (@BASS_MusicGetName=nil)  or
  1026. (@BASS_MusicGetOrders=nil)  or
  1027. (@BASS_MusicGetOrderPosition=nil)  or
  1028.  
  1029. (@BASS_SampleLoad=nil)  or
  1030. (@BASS_SampleCreate=nil)  or
  1031. (@BASS_SampleCreateDone=nil)  or
  1032. (@BASS_SampleFree=nil)  or
  1033. (@BASS_SampleGetInfo=nil)  or
  1034. (@BASS_SampleSetInfo=nil)  or
  1035. (@BASS_SampleGetChannel=nil)  or
  1036. (@BASS_SampleStop=nil)  or
  1037.  
  1038. (@BASS_StreamCreate=nil)  or
  1039. (@BASS_StreamCreateFile=nil)  or
  1040. (@BASS_StreamCreateURL=nil)  or
  1041. (@BASS_StreamCreateFileUser=nil)  or
  1042. (@BASS_StreamFree=nil)  or
  1043. (@BASS_StreamGetTags=nil)  or
  1044. (@BASS_StreamGetFilePosition=nil)  or
  1045.  
  1046. (@BASS_RecordGetDeviceDescription=nil)  or
  1047. (@BASS_RecordInit=nil)  or
  1048. (@BASS_RecordSetDevice=nil)  or
  1049. (@BASS_RecordGetDevice=nil)  or
  1050. (@BASS_RecordFree=nil)  or
  1051. (@BASS_RecordGetInfo=nil)  or
  1052. (@BASS_RecordGetInputName=nil)  or
  1053. (@BASS_RecordSetInput=nil)  or
  1054. (@BASS_RecordGetInput=nil)  or
  1055. (@BASS_RecordStart=nil)  or
  1056.  
  1057. (@BASS_ChannelBytes2Seconds=nil)  or
  1058. (@BASS_ChannelSeconds2Bytes=nil)  or
  1059. (@BASS_ChannelGetDevice=nil)  or
  1060. (@BASS_ChannelIsActive=nil)  or
  1061. (@BASS_ChannelGetInfo=nil)  or
  1062. (@BASS_ChannelSetFlags=nil)  or
  1063. (@BASS_ChannelPreBuf=nil)  or
  1064. (@BASS_ChannelPlay=nil)  or
  1065. (@BASS_ChannelStop=nil)  or
  1066. (@BASS_ChannelPause=nil)  or
  1067. (@BASS_ChannelSetAttributes=nil)  or
  1068. (@BASS_ChannelGetAttributes=nil)  or
  1069. (@BASS_ChannelSlideAttributes=nil)  or
  1070. (@BASS_ChannelIsSliding=nil)  or
  1071. (@BASS_ChannelSet3DAttributes=nil)  or
  1072. (@BASS_ChannelGet3DAttributes=nil)  or
  1073. (@BASS_ChannelSet3DPosition=nil)  or
  1074. (@BASS_ChannelGet3DPosition=nil)  or
  1075. (@BASS_ChannelGetLength=nil)  or
  1076. (@BASS_ChannelSetPosition=nil)  or
  1077. (@BASS_ChannelGetPosition=nil)  or
  1078. (@BASS_ChannelGetLevel=nil)  or
  1079. (@BASS_ChannelGetData=nil)  or
  1080. (@BASS_ChannelSetSync=nil)  or
  1081. (@BASS_ChannelRemoveSync=nil)  or
  1082. (@BASS_ChannelSetDSP=nil)  or
  1083. (@BASS_ChannelRemoveDSP=nil)  or
  1084. (@BASS_ChannelSetEAXMix=nil)  or
  1085. (@BASS_ChannelGetEAXMix=nil)  or
  1086. (@BASS_ChannelSetLink=nil)  or
  1087. (@BASS_ChannelRemoveLink=nil)  or
  1088. (@BASS_ChannelSetFX=nil)  or
  1089. (@BASS_ChannelRemoveFX=nil)  or
  1090.  
  1091. (@BASS_FXSetParameters=nil)  or
  1092. (@BASS_FXGetParameters=nil)
  1093.  
  1094.          then
  1095.           begin {if something went wrong during linking, free library & reset handle}
  1096.             FreeLibrary(BASS_Handle);
  1097.            BASS_Handle:=0;
  1098.          end;
  1099.        end;
  1100.     result:=(BASS_Handle<>0);
  1101.   end;
  1102. end;
  1103.  
  1104. Procedure Unload_BASSDLL;
  1105. begin
  1106.   if BASS_Handle<>0 then
  1107.      begin
  1108.        BASS_Free; // make sure we release everything
  1109.        FreeLibrary(BASS_Handle);
  1110.      end;
  1111.   BASS_Handle:=0;
  1112. end;
  1113.  
  1114. function BASS_SetEAXPreset(env: Integer): BOOL;
  1115. begin
  1116.   case (env) of
  1117.     EAX_ENVIRONMENT_GENERIC:
  1118.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_GENERIC, 0.5, 1.493, 0.5);
  1119.     EAX_ENVIRONMENT_PADDEDCELL:
  1120.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PADDEDCELL, 0.25, 0.1, 0);
  1121.     EAX_ENVIRONMENT_ROOM:
  1122.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ROOM, 0.417, 0.4, 0.666);
  1123.     EAX_ENVIRONMENT_BATHROOM:
  1124.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_BATHROOM, 0.653, 1.499, 0.166);
  1125.     EAX_ENVIRONMENT_LIVINGROOM:
  1126.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_LIVINGROOM, 0.208, 0.478, 0);
  1127.     EAX_ENVIRONMENT_STONEROOM:
  1128.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_STONEROOM, 0.5, 2.309, 0.888);
  1129.     EAX_ENVIRONMENT_AUDITORIUM:
  1130.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_AUDITORIUM, 0.403, 4.279, 0.5);
  1131.     EAX_ENVIRONMENT_CONCERTHALL:
  1132.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CONCERTHALL, 0.5, 3.961, 0.5);
  1133.     EAX_ENVIRONMENT_CAVE:
  1134.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CAVE, 0.5, 2.886, 1.304);
  1135.     EAX_ENVIRONMENT_ARENA:
  1136.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ARENA, 0.361, 7.284, 0.332);
  1137.     EAX_ENVIRONMENT_HANGAR:
  1138.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_HANGAR, 0.5, 10.0, 0.3);
  1139.     EAX_ENVIRONMENT_CARPETEDHALLWAY:
  1140.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CARPETEDHALLWAY, 0.153, 0.259, 2.0);
  1141.     EAX_ENVIRONMENT_HALLWAY:
  1142.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_HALLWAY, 0.361, 1.493, 0);
  1143.     EAX_ENVIRONMENT_STONECORRIDOR:
  1144.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_STONECORRIDOR, 0.444, 2.697, 0.638);
  1145.     EAX_ENVIRONMENT_ALLEY:
  1146.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_ALLEY, 0.25, 1.752, 0.776);
  1147.     EAX_ENVIRONMENT_FOREST:
  1148.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_FOREST, 0.111, 3.145, 0.472);
  1149.     EAX_ENVIRONMENT_CITY:
  1150.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_CITY, 0.111, 2.767, 0.224);
  1151.     EAX_ENVIRONMENT_MOUNTAINS:
  1152.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_MOUNTAINS, 0.194, 7.841, 0.472);
  1153.     EAX_ENVIRONMENT_QUARRY:
  1154.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_QUARRY, 1, 1.499, 0.5);
  1155.     EAX_ENVIRONMENT_PLAIN:
  1156.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PLAIN, 0.097, 2.767, 0.224);
  1157.     EAX_ENVIRONMENT_PARKINGLOT:
  1158.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PARKINGLOT, 0.208, 1.652, 1.5);
  1159.     EAX_ENVIRONMENT_SEWERPIPE:
  1160.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_SEWERPIPE, 0.652, 2.886, 0.25);
  1161.     EAX_ENVIRONMENT_UNDERWATER:
  1162.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_UNDERWATER, 1, 1.499, 0);
  1163.     EAX_ENVIRONMENT_DRUGGED:
  1164.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_DRUGGED, 0.875, 8.392, 1.388);
  1165.     EAX_ENVIRONMENT_DIZZY:
  1166.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_DIZZY, 0.139, 17.234, 0.666);
  1167.     EAX_ENVIRONMENT_PSYCHOTIC:
  1168.       Result := BASS_SetEAXParameters(EAX_ENVIRONMENT_PSYCHOTIC, 0.486, 7.563, 0.806);
  1169.     else
  1170.       Result := FALSE;
  1171.   end;
  1172. end;
  1173.  
  1174. end.
  1175.  
  1176.