Bass2.1 Befehle

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Suco-X

Betreff: Bass2.1 Befehle

BeitragSa, Jul 02, 2005 0:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Habe mir mal die Mühe gemacht die Funktionen und Variablen von der Bass Lib für Blitz Max bereit zu machen. Download der Lib gibt es hier: http://www.un4seen.com/
Den unteren Code in eine Datei Packen und in euer Projekt Inkludieren/Importieren. Die Bass.dll muss natürlich im gleichen Ordner sein.
Falls ich was übersehen habe, bitte bescheid sagen.

Code: [AUSKLAPPEN]


Rem
Bass.dll Version 2.1 Blitz Max Portierung von Suco-X
Sollten Fehler gefunden werden, bitte bei mir im BlitzForum Melden(PN oder im bass Thread)
Version 1.1
Mfg Suco
End Rem




' Error codes returned by BASS_ErrorGetCode
Const BASS_OK            = 0   ' all is OK
Const BASS_ERROR_MEM      =1   ' memory error
Const BASS_ERROR_FILEOPEN   =2   ' can't open the file
Const BASS_ERROR_DRIVER   =3   ' can't find a free/valid driver
Const BASS_ERROR_BUFLOST   =4   ' the sample buffer was lost
Const BASS_ERROR_HANDLE   =5   ' invalid handle
Const BASS_ERROR_FORMAT   =6   ' unsupported sample format
Const BASS_ERROR_POSITION   =7   ' invalid playback position
Const BASS_ERROR_INIT      =8   ' BASS_Init has Not been successfully called
Const BASS_ERROR_START   =9   ' BASS_Start has Not been successfully called
Const BASS_ERROR_ALREADY   =14   ' already initialized/paused/whatever
Const BASS_ERROR_NOPAUSE   =16   ' Not paused
Const BASS_ERROR_NOCHAN   =18   ' can't get a free channel
Const BASS_ERROR_ILLTYPE   =19   ' an illegal Type was specified
Const BASS_ERROR_ILLPARAM   =20   ' an illegal parameter was specified
Const BASS_ERROR_NO3D      =21   ' no 3D support
Const BASS_ERROR_NOEAX   =22   ' no EAX support
Const BASS_ERROR_DEVICE   =23   ' illegal device number
Const BASS_ERROR_NOPLAY   =24   ' Not playing
Const BASS_ERROR_FREQ      =25   ' illegal sample rate
Const BASS_ERROR_NOTFILE   =27   ' the stream is Not a file stream
Const BASS_ERROR_NOHW      =29   ' no hardware voices available
Const BASS_ERROR_EMPTY   =31   ' the Mod music has no sequence data
Const BASS_ERROR_NONET   =32   ' no internet connection could be opened
Const BASS_ERROR_CREATE   =33   ' couldn't create the file
Const BASS_ERROR_NOFX      =34   ' effects are Not available
Const BASS_ERROR_PLAYING   =35   ' the channel is playing
Const BASS_ERROR_NOTAVAIL   =37   ' requested data is Not available
Const BASS_ERROR_DECODE   =38   ' the channel is a "decoding channel"
Const BASS_ERROR_DX      =39   ' a sufficient DirectX version is Not installed
Const BASS_ERROR_TIMEOUT   =40   ' connection timedout
Const BASS_ERROR_FILEFORM   =41   ' unsupported file format
Const BASS_ERROR_SPEAKER   =42   ' unavailable speaker
Const BASS_ERROR_UNKNOWN   =-1   ' some other mystery error

' Initialization flags
Const BASS_DEVICE_8BITS    = 1   ' use 8 bit resolution, Else 16 bit
Const BASS_DEVICE_MONO    = 2   ' use mono, Else stereo
Const BASS_DEVICE_3D    =   4   ' enable 3D functionality

Rem
If the BASS_DEVICE_3D flag is Not specified when initilizing BASS,
Then the 3D flags (BASS_SAMPLE_3D And BASS_MUSIC_3D) are ignored when
loading/creating a sample/stream/music.
End Rem

Const BASS_DEVICE_LATENCY   = 256   ' calculate device latency (BASS_INFO struct)
Const BASS_DEVICE_SPEAKERS = 2048   ' force enabling of speaker assignment

' DirectSound interfaces (For use with BASS_GetDSoundObject)
Const BASS_OBJECT_DS   =   1   ' IDirectSound
Const BASS_OBJECT_DS3DL   =   2   ' IDirectSound3DListener

Type BASS_INFO
   Field size:Int      ' size of this struct (set this before calling the Function)
   Field flags:Int   ' device capabilities (DSCAPS_xxx flags)
   Field hwsize:Int   ' size of total device hardware memory
   Field hwfree:Int   ' size of free device hardware memory
   Field freesam:Int   ' number of free sample slots in the hardware
   Field free3d:Int   ' number of free 3D sample slots in the hardware
   Field minrate:Int   ' Min sample rate supported by the hardware
   Field maxrate:Int   ' Max sample rate supported by the hardware
   Field eax:Byte      ' device supports EAX? (always False If BASS_DEVICE_3D was Not used)
   Field minbuf:Int   ' recommended minimum buffer length in ms (requires BASS_DEVICE_LATENCY)
   Field dsver:Int   ' DirectSound version
   Field latency:Int   ' Delay (in ms) before start of playback (requires BASS_DEVICE_LATENCY)
   Field initflags:Int ' "flags" parameter of BASS_Init call
   Field speakers:Int ' number of speakers available
   Field driver:Byte Ptr   ' driver
End Type


' BASS_INFO flags (from DSOUND.H)
Const DSCAPS_CONTINUOUSRATE   = $00000010
Rem
supports all sample rates between Min/maxrate
End Rem
Const DSCAPS_EMULDRIVER      =$00000020
Rem
device does Not have hardware DirectSound support
End Rem
Const DSCAPS_CERTIFIED   =   $00000040
Rem
device driver has been certified by Microsoft
End Rem
Rem
The following flags tell what Type of samples are supported by HARDWARE
mixing, all these formats are supported by SOFTWARE mixing
End Rem
Const DSCAPS_SECONDARYMONO   =$00000100   ' mono
Const DSCAPS_SECONDARYSTEREO   =$00000200   ' stereo
Const DSCAPS_SECONDARY8BIT   =$00000400   ' 8 bit
Const DSCAPS_SECONDARY16BIT=   $00000800   ' 16 bit

Type BASS_RECORDINFO
   Field size:Int      ' size of this struct (set this before calling the Function)
   Field flags:Int   ' device capabilities (DSCCAPS_xxx flags)
   Field formats:Int   ' supported standard formats (WAVE_FORMAT_xxx flags)
   Field inputs:Int   ' number of inputs
   Field singlein:Byte   ' True = only 1 Input can be set at a time
   Field driver:Byte Ptr   ' driver
End Type


' BASS_RECORDINFO flags (from DSOUND.H)
Const DSCCAPS_EMULDRIVER   = DSCAPS_EMULDRIVER
Rem
device does Not have hardware DirectSound recording support
End Rem
Const DSCCAPS_CERTIFIED =    DSCAPS_CERTIFIED
Rem
device driver has been certified by Microsoft
End Rem

' defines For formats Field of BASS_RECORDINFO (from MMSYSTEM.H)

Const WAVE_FORMAT_1M08   =    $00000001       ' 11.025 kHz, Mono,   8-bit 
Const WAVE_FORMAT_1S08   =    $00000002       ' 11.025 kHz, Stereo, 8-bit 
Const WAVE_FORMAT_1M16   =    $00000004       ' 11.025 kHz, Mono,   16-bit
Const WAVE_FORMAT_1S16    =   $00000008       ' 11.025 kHz, Stereo, 16-bit
Const WAVE_FORMAT_2M08   =    $00000010       ' 22.05  kHz, Mono,   8-bit   
Const WAVE_FORMAT_2S08  =     $00000020       ' 22.05  kHz, Stereo, 8-bit 
Const WAVE_FORMAT_2M16   =    $00000040       ' 22.05  kHz, Mono,   16-bit
Const WAVE_FORMAT_2S16   =    $00000080       ' 22.05  kHz, Stereo, 16-bit
Const WAVE_FORMAT_4M08   =    $00000100       ' 44.1   kHz, Mono,   8-bit
Const WAVE_FORMAT_4S08   =    $00000200       ' 44.1   kHz, Stereo, 8-bit   
Const WAVE_FORMAT_4M16   =    $00000400       ' 44.1   kHz, Mono,   16-bit 
Const WAVE_FORMAT_4S16   =    $00000800       ' 44.1   kHz, Stereo, 16-bit 


' Sample info structure & flags

Type BASS_SAMPLE
   Field freq:Int      ' Default playback rate
   Field volume:Int   ' Default volume (0-100)
   Field Pan:Int      ' Default pan (-100=Left, 0=middle, 100=Right)
   Field flags:Int   ' BASS_SAMPLE_xxx flags
   Field length:Int   ' length (in samples, Not bytes)
   Field Max_:Int      ' maximum simultaneous playbacks
   Field origres:Int   ' original resolution bits
Rem
The following are the sample's default 3D attributes (if the sample
is 3D, BASS_SAMPLE_3D is in flags) see BASS_ChannelSet3DAttributes
End Rem
   Field mode3d:Int   ' BASS_3DMODE_xxx mode
   Field mindist:Float   ' minimum distance
   Field maxdist:Float   ' maximum distance
   Field iangle:Int   ' angle of inside projection cone
   Field oangle:Int   ' angle of outside projection cone
   Field outvol:Int   ' delta-volume outside the projection cone
Rem
The following are the defaults used If the sample uses the DirectX 7
voice allocation/management features.
End Rem
   Field vam:Int      ' voice allocation/management flags (BASS_VAM_xxx)
   Field priority:Int   ' priority (0=lowest, $ffffffff=highest)
End Type


Const BASS_SAMPLE_8BITS    =   1   ' 8 bit
Const BASS_SAMPLE_FLOAT   =   256   ' 32-bit floating-point
Const BASS_SAMPLE_MONO   =   2   ' mono, Else stereo
Const BASS_SAMPLE_LOOP   =   4   ' looped
Const BASS_SAMPLE_3D      =   8   ' 3D functionality enabled
Const BASS_SAMPLE_SOFTWARE   =16   ' it's NOT using hardware mixing
Const BASS_SAMPLE_MUTEMAX   =   32   ' muted at Max distance (3D only)
Const BASS_SAMPLE_VAM      =   64   ' uses the DX7 voice allocation & management
Const BASS_SAMPLE_FX      =   128   ' old implementation of DX8 effects are enabled
Const BASS_SAMPLE_OVER_VOL =   $10000   ' override lowest volume
Const BASS_SAMPLE_OVER_POS   = $20000   ' override longest playing
Const BASS_SAMPLE_OVER_DIST =   $30000 ' override furthest from listener (3D only)

Const BASS_MP3_SETPOS      =   $20000 ' enable pin-point seeking on the MP3/MP2/MP1

Const BASS_STREAM_AUTOFREE   =$40000   ' automatically free the stream when it stop/ends
Const BASS_STREAM_RESTRATE   =$80000   ' restrict the download rate of internet file streams
Const BASS_STREAM_BLOCK      =$100000' download/play internet file stream in small blocks
Const BASS_STREAM_DECODE   =   $200000' don't play the stream, only decode (BASS_ChannelGetData)
Const BASS_STREAM_META      =$400000' request metadata from a Shoutcast stream
Const BASS_STREAM_STATUS      =$800000' give server status info (HTTP/ICY tags) in DOWNLOADPROC

Const BASS_MUSIC_FLOAT   =   BASS_SAMPLE_FLOAT ' 32-bit floating-point
Const BASS_MUSIC_MONO      =   BASS_SAMPLE_MONO ' force mono mixing (less CPU usage)
Const BASS_MUSIC_LOOP      =   BASS_SAMPLE_LOOP ' loop music
Const BASS_MUSIC_3D      =   BASS_SAMPLE_3D ' enable 3D functionality
Const BASS_MUSIC_FX      =   BASS_SAMPLE_FX ' enable old implementation of DX8 effects
Const BASS_MUSIC_AUTOFREE   =   BASS_STREAM_AUTOFREE ' automatically free the music when it stop/ends
Const BASS_MUSIC_DECODE      =BASS_STREAM_DECODE ' don't play the music, only decode (BASS_ChannelGetData)
Const BASS_MUSIC_RAMP      =   $200   ' normal ramping
Const BASS_MUSIC_RAMPS      =$400   ' sensitive ramping
Const BASS_MUSIC_SURROUND   =   $800   ' surround sound
Const BASS_MUSIC_SURROUND2=   $1000   ' surround sound (mode 2)
Const BASS_MUSIC_FT2MOD      =$2000   ' play .Mod as FastTracker 2 does
Const BASS_MUSIC_PT1MOD      =$4000   ' play .Mod as ProTracker 1 does
Const BASS_MUSIC_CALCLEN   =   $8000   ' calculate playback length
Const BASS_MUSIC_NONINTER      =$10000   ' non-interpolated mixing
Const BASS_MUSIC_POSRESET      =$20000   ' stop all notes when moving position
Const BASS_MUSIC_POSRESETEX   =$400000' stop all notes And reset bmp/etc when moving position
Const BASS_MUSIC_STOPBACK   =   $80000   ' stop the music on a backwards jump effect
Const BASS_MUSIC_NOSAMPLE      =$100000' don't load the samples

' Speaker assignment flags
Const BASS_SPEAKER_FRONT   =$1000000   ' front speakers
Const BASS_SPEAKER_REAR   =$2000000   ' rear/side speakers
Const BASS_SPEAKER_CENLFE   =$3000000   ' center & LFE speakers (5.1)
Const BASS_SPEAKER_REAR2   =$4000000   ' rear center speakers (7.1)
'Const BASS_SPEAKER_N(n)   ((n)<<24)   ' n'th pair of speakers (max 15)
Const BASS_SPEAKER_LEFT   =$10000000   ' modifier: Left
Const BASS_SPEAKER_RIGHT   =$20000000   ' modifier: Right
Const BASS_SPEAKER_FRONTLEFT   =BASS_SPEAKER_FRONT|BASS_SPEAKER_LEFT
Const BASS_SPEAKER_FRONTRIGHT   =BASS_SPEAKER_FRONT|BASS_SPEAKER_RIGHT
Const BASS_SPEAKER_REARLEFT   =BASS_SPEAKER_REAR|BASS_SPEAKER_LEFT
Const BASS_SPEAKER_REARRIGHT   =BASS_SPEAKER_REAR|BASS_SPEAKER_RIGHT
Const BASS_SPEAKER_CENTER      =BASS_SPEAKER_CENLFE|BASS_SPEAKER_LEFT
Const BASS_SPEAKER_LFE      =BASS_SPEAKER_CENLFE|BASS_SPEAKER_RIGHT
Const BASS_SPEAKER_REAR2LEFT   =BASS_SPEAKER_REAR2|BASS_SPEAKER_LEFT
Const BASS_SPEAKER_REAR2RIGHT   =BASS_SPEAKER_REAR2|BASS_SPEAKER_RIGHT

Const BASS_UNICODE         =$80000000

Const BASS_RECORD_PAUSE      =$8000   ' start recording paused

' DX7 voice allocation flags
Const BASS_VAM_HARDWARE   =   1
Rem
Play the sample in hardware. If no hardware voices are available Then
the "play" call will fail
End Rem
Const BASS_VAM_SOFTWARE      =2
Rem
Play the sample in software (ie. non-accelerated). No other VAM flags
may be used together with this flag.
End Rem

' DX7 voice management flags
Rem
These flags enable hardware resource stealing... If the hardware has no
available voices, a currently playing buffer will be stopped To make room For
the New buffer. NOTE: only samples loaded/created with the BASS_SAMPLE_VAM
flag are considered For termination by the DX7 voice management.
End Rem
Const BASS_VAM_TERM_TIME   =   4
Rem
If there are no free hardware voices, the buffer To be terminated will be
the one with the least time Left To play.
End Rem
Const BASS_VAM_TERM_DIST   =   8
Rem
If there are no free hardware voices, the buffer To be terminated will be
one that was loaded/created with the BASS_SAMPLE_MUTEMAX flag And is beyond
it's max distance. If there are no buffers that match this criteria, then the
"play" call will fail.
End Rem
Const BASS_VAM_TERM_PRIO   =   16
Rem
If there are no free hardware voices, the buffer To be terminated will be
the one with the lowest priority.
End Rem

Type BASS_CHANNELINFO
   Field freq:Int      ' Default playback rate
   Field chans:Int   ' channels
   Field flags:Int   ' BASS_SAMPLE/STREAM/MUSIC/SPEAKER flags
   Field ctype:Int   ' Type of channel
   Field origres:Int   ' original resolution
End Type

' BASS_CHANNELINFO types
Const BASS_CTYPE_SAMPLE    =   1
Const BASS_CTYPE_RECORD   =   2
Const BASS_CTYPE_STREAM      =$10000
Const BASS_CTYPE_STREAM_WAV   =$10001
Const BASS_CTYPE_STREAM_OGG   =$10002
Const BASS_CTYPE_STREAM_MP1   =$10003
Const BASS_CTYPE_STREAM_MP2   =$10004
Const BASS_CTYPE_STREAM_MP3=   $10005
Const BASS_CTYPE_MUSIC_MOD   =$20000
Const BASS_CTYPE_MUSIC_MTM   =$20001
Const BASS_CTYPE_MUSIC_S3M   =$20002
Const BASS_CTYPE_MUSIC_XM      =$20003
Const BASS_CTYPE_MUSIC_IT      =$20004
Const BASS_CTYPE_MUSIC_MO3   =$00100 ' mo3 flag

' 3D vector (For 3D positions/velocities/orientations)
Type BASS_3DVECTOR
   Field x:Float   ' +=Right, -=Left
   Field y:Float   ' +=up, -=down
   Field z:Float   ' +=front, -=behind
End Type


' 3D channel modes
Const BASS_3DMODE_NORMAL   =   0
Rem
normal 3D processing end rem
Const BASS_3DMODE_RELATIVE   1
rem The channel's 3D position (position/velocity/orientation) are relative to
the listener. When the listener's position/velocity/orientation is changed
with BASS_Set3DPosition, the channel's position relative to the listener does
Not change.
End Rem
Const BASS_3DMODE_OFF      =   2
Rem
Turn off 3D processing on the channel, the sound will be played
in the center.
End Rem


Rem
' EAX environments, use with BASS_SetEAXParameters
enum
{
    EAX_ENVIRONMENT_GENERIC,
    EAX_ENVIRONMENT_PADDEDCELL,
    EAX_ENVIRONMENT_ROOM,
    EAX_ENVIRONMENT_BATHROOM,
    EAX_ENVIRONMENT_LIVINGROOM,
    EAX_ENVIRONMENT_STONEROOM,
    EAX_ENVIRONMENT_AUDITORIUM,
    EAX_ENVIRONMENT_CONCERTHALL,
    EAX_ENVIRONMENT_CAVE,
    EAX_ENVIRONMENT_ARENA,
    EAX_ENVIRONMENT_HANGAR,
    EAX_ENVIRONMENT_CARPETEDHALLWAY,
    EAX_ENVIRONMENT_HALLWAY,
    EAX_ENVIRONMENT_STONECORRIDOR,
    EAX_ENVIRONMENT_ALLEY,
    EAX_ENVIRONMENT_FOREST,
    EAX_ENVIRONMENT_CITY,
    EAX_ENVIRONMENT_MOUNTAINS,
    EAX_ENVIRONMENT_QUARRY,
    EAX_ENVIRONMENT_PLAIN,
    EAX_ENVIRONMENT_PARKINGLOT,
    EAX_ENVIRONMENT_SEWERPIPE,
    EAX_ENVIRONMENT_UNDERWATER,
    EAX_ENVIRONMENT_DRUGGED,
    EAX_ENVIRONMENT_DIZZY,
    EAX_ENVIRONMENT_PSYCHOTIC,

    EAX_ENVIRONMENT_COUNT         ' total number of environments
};

End Rem


Const     EAX_ENVIRONMENT_GENERIC = 0
Const     EAX_ENVIRONMENT_PADDEDCELL = 1
Const     EAX_ENVIRONMENT_ROOM = 2
Const     EAX_ENVIRONMENT_BATHROOM = 3
Const     EAX_ENVIRONMENT_LIVINGROOM = 4
Const     EAX_ENVIRONMENT_STONEROOM = 5
Const     EAX_ENVIRONMENT_AUDITORIUM = 6
Const     EAX_ENVIRONMENT_CONCERTHALL = 7
Const     EAX_ENVIRONMENT_CAVE = 8
Const     EAX_ENVIRONMENT_ARENA = 9
Const     EAX_ENVIRONMENT_HANGAR = 10
Const     EAX_ENVIRONMENT_CARPETEDHALLWAY = 11
Const     EAX_ENVIRONMENT_HALLWAY = 12
Const     EAX_ENVIRONMENT_STONECORRIDOR = 13
Const     EAX_ENVIRONMENT_ALLEY = 14
Const     EAX_ENVIRONMENT_FOREST = 15
Const     EAX_ENVIRONMENT_CITY = 16
Const     EAX_ENVIRONMENT_MOUNTAINS = 17
Const     EAX_ENVIRONMENT_QUARRY = 18
Const     EAX_ENVIRONMENT_PLAIN = 19
Const     EAX_ENVIRONMENT_PARKINGLOT = 20
Const     EAX_ENVIRONMENT_SEWERPIPE = 21
Const     EAX_ENVIRONMENT_UNDERWATER = 22
Const     EAX_ENVIRONMENT_DRUGGED = 23
Const     EAX_ENVIRONMENT_DIZZY = 24
Const     EAX_ENVIRONMENT_PSYCHOTIC = 25

Const     EAX_ENVIRONMENT_COUNT    = 26      ' total number of environments


Rem

' EAX presets, usage: BASS_SetEAXParameters(EAX_PRESET_xxx)
Const EAX_PRESET_GENERIC         EAX_ENVIRONMENT_GENERIC,0.5F,1.493F,0.5F
Const EAX_PRESET_PADDEDCELL      EAX_ENVIRONMENT_PADDEDCELL,0.25F,0.1F,0.0F
Const EAX_PRESET_ROOM            EAX_ENVIRONMENT_ROOM,0.417F,0.4F,0.666F
Const EAX_PRESET_BATHROOM        EAX_ENVIRONMENT_BATHROOM,0.653F,1.499F,0.166F
Const EAX_PRESET_LIVINGROOM      EAX_ENVIRONMENT_LIVINGROOM,0.208F,0.478F,0.0F
Const EAX_PRESET_STONEROOM       EAX_ENVIRONMENT_STONEROOM,0.5F,2.309F,0.888F
Const EAX_PRESET_AUDITORIUM      EAX_ENVIRONMENT_AUDITORIUM,0.403F,4.279F,0.5F
Const EAX_PRESET_CONCERTHALL     EAX_ENVIRONMENT_CONCERTHALL,0.5F,3.961F,0.5F
Const EAX_PRESET_CAVE            EAX_ENVIRONMENT_CAVE,0.5F,2.886F,1.304F
Const EAX_PRESET_ARENA           EAX_ENVIRONMENT_ARENA,0.361F,7.284F,0.332F
Const EAX_PRESET_HANGAR          EAX_ENVIRONMENT_HANGAR,0.5F,10.0F,0.3F
Const EAX_PRESET_CARPETEDHALLWAY EAX_ENVIRONMENT_CARPETEDHALLWAY,0.153F,0.259F,2.0F
Const EAX_PRESET_HALLWAY         EAX_ENVIRONMENT_HALLWAY,0.361F,1.493F,0.0F
Const EAX_PRESET_STONECORRIDOR   EAX_ENVIRONMENT_STONECORRIDOR,0.444F,2.697F,0.638F
Const EAX_PRESET_ALLEY           EAX_ENVIRONMENT_ALLEY,0.25F,1.752F,0.776F
Const EAX_PRESET_FOREST          EAX_ENVIRONMENT_FOREST,0.111F,3.145F,0.472F
Const EAX_PRESET_CITY            EAX_ENVIRONMENT_CITY,0.111F,2.767F,0.224F
Const EAX_PRESET_MOUNTAINS       EAX_ENVIRONMENT_MOUNTAINS,0.194F,7.841F,0.472F
Const EAX_PRESET_QUARRY          EAX_ENVIRONMENT_QUARRY,1.0F,1.499F,0.5F
Const EAX_PRESET_PLAIN           EAX_ENVIRONMENT_PLAIN,0.097F,2.767F,0.224F
Const EAX_PRESET_PARKINGLOT      EAX_ENVIRONMENT_PARKINGLOT,0.208F,1.652F,1.5F
Const EAX_PRESET_SEWERPIPE       EAX_ENVIRONMENT_SEWERPIPE,0.652F,2.886F,0.25F
Const EAX_PRESET_UNDERWATER      EAX_ENVIRONMENT_UNDERWATER,1.0F,1.499F,0.0F
Const EAX_PRESET_DRUGGED         EAX_ENVIRONMENT_DRUGGED,0.875F,8.392F,1.388F
Const EAX_PRESET_DIZZY           EAX_ENVIRONMENT_DIZZY,0.139F,17.234F,0.666F
Const EAX_PRESET_PSYCHOTIC       EAX_ENVIRONMENT_PSYCHOTIC,0.486F,7.563F,0.806F
End Rem
' software 3D mixing algorithm modes (used with BASS_Set3DAlgorithm)
Const BASS_3DALG_DEFAULT   = 0

Rem

Default algorithm (currently translates To BASS_3DALG_OFF)
End Rem

Const BASS_3DALG_OFF   =   1
Rem
Uses normal Left And Right panning. The vertical axis is ignored except For
scaling of volume due To distance. Doppler shift And volume scaling are still
applied, but the 3D filtering is Not performed. This is the most CPU efficient
software implementation, but provides no virtual 3D audio effect. Head Related
Transfer Function processing will Not be done. Since only normal stereo panning
is used, a channel using this algorithm may be accelerated by a 2D hardware
voice If no free 3D hardware voices are available.
End Rem
Const BASS_3DALG_FULL   =   2
Rem
This algorithm gives the highest quality 3D audio effect, but uses more CPU.
Requires Windows 98 2nd Edition Or Windows 2000 that uses WDM drivers, If this
mode is Not available Then BASS_3DALG_OFF will be used instead.
End Rem
Const BASS_3DALG_LIGHT =   3
Rem
This algorithm gives a good 3D audio effect, And uses less CPU than the FULL
mode. Requires Windows 98 2nd Edition Or Windows 2000 that uses WDM drivers, If
this mode is Not available Then BASS_3DALG_OFF will be used instead.
End Rem

'typedef DWORD (CALLBACK STREAMPROC)(HSTREAM handle, void *buffer, DWORD length, DWORD user)

Rem
User stream callback function. NOTE: A stream Function should obviously be as quick
as possible, other streams (And Mod musics) can't be mixed until it's finished.
handle : The stream that needs writing
buffer : Buffer To write the samples in
length : Number of bytes To write
user   : The 'user' parameter value given when calling BASS_StreamCreate
Return : Number of bytes written. Set the BASS_STREAMPROC_END flag To End
         the stream.
 End Rem

Const BASS_STREAMPROC_END   =   $80000000   ' End of user stream flag

' BASS_StreamGetFilePosition modes
Const BASS_FILEPOS_DECODE   =   0
Const BASS_FILEPOS_DOWNLOAD=   1
Const BASS_FILEPOS_END      =2
Const BASS_FILEPOS_START      =3

' STREAMFILEPROC actions
Const BASS_FILE_CLOSE   =   0
Const BASS_FILE_READ      =1
Const BASS_FILE_QUERY      =2
Const BASS_FILE_LEN      =3
Const BASS_FILE_SEEK      =4

'typedef DWORD (CALLBACK STREAMFILEPROC)(DWORD action, DWORD param1, DWORD param2, DWORD user);
Rem
User file stream callback function.
action : The action To perform, one of BASS_FILE_xxx values.
param1 : Depends on "action"
param2 : Depends on "action"
user   : The 'user' parameter value given when calling BASS_StreamCreate
Return : Depends on "action"
End Rem

'typedef void (CALLBACK DOWNLOADPROC)(void *buffer, DWORD length, DWORD user);
Rem
Internet stream download callback function.
buffer : Buffer containing the downloaded data... Null=End of download
length : Number of bytes in the buffer
user   : The 'user' parameter value given when calling BASS_StreamCreateURL
End Rem

Rem
Sync types (with BASS_ChannelSetSync "param" And SYNCPROC "data"
definitions) & flags.
End Rem
Const BASS_SYNC_MUSICPOS =   0
Const BASS_SYNC_POS    =   0
Rem
Sync when a channel reaches a position.
If HMUSIC...
param: LOWORD=order (0=first, -1=all) HIWORD=row (0=first, -1=all)
data : LOWORD=order HIWORD=row
If HSTREAM...
param: position in bytes
data : Not used
End Rem
Const BASS_SYNC_MUSICINST   =1
Rem
Sync when an instrument (sample For the non-instrument based formats)
is played in a music (Not including retrigs).
param: LOWORD=instrument (1=first) HIWORD=note (0=c0...119=b9, -1=all)
data : LOWORD=note HIWORD=volume (0-64)
End Rem
Const BASS_SYNC_END      =2
Rem
Sync when a channel reaches the end.
param: Not used
data : 1 = the sync is triggered by a backward jump in a Mod music, otherwise Not used
End Rem
Const BASS_SYNC_MUSICFX   =3
Rem
Sync when the "sync" effect (XM/MTM/Mod: E8x/Wxx, IT/S3M: S2x) is used.
param: 0:data=pos, 1:data="x" value
data : param=0: LOWORD=order HIWORD=row, param=1: "x" value
End Rem
Const BASS_SYNC_META   =   4
Rem
Sync when metadata is received in a Shoutcast stream.
param: Not used
data : pointer To the metadata
End Rem
Const BASS_SYNC_SLIDE   =   5
Rem
Sync when an attribute slide is completed.
param: Not used
data : the Type of slide completed (one of the BASS_SLIDE_xxx values)
End Rem
Const BASS_SYNC_STALL   =   6
Rem
Sync when playback has stalled.
param: Not used
data : 0=stalled, 1=resumed
End Rem
Const BASS_SYNC_DOWNLOAD   =7
Rem
Sync when downloading of an internet (Or "buffered" user file) stream has ended.
param: Not used
data : Not used
End Rem
Const BASS_SYNC_FREE =   8
Rem
Sync when a channel is freed.
param: Not used
data : Not used
End Rem
Const BASS_SYNC_MESSAGE   =$20000000   ' FLAG: post a Windows message (instead of callback)
Rem
When using a window message "callback", the message To post is given in the "proc"
parameter of BASS_ChannelSetSync, And is posted To the window specified in the BASS_Init
call. The message parameters are: WPARAM = data, LPARAM = user.
 End Rem
Const BASS_SYNC_MIXTIME   =$40000000   ' FLAG: sync at mixtime, Else at playtime
Const BASS_SYNC_ONETIME   =$80000000   ' FLAG: sync only once, Else continuously

'typedef void (CALLBACK SYNCPROC)(HSYNC handle, DWORD channel, DWORD data, DWORD user);
Rem
Sync callback function. NOTE: a sync callback Function should be very
quick as other syncs can't be processed until it has finished. If the sync
is a "mixtime" sync, Then other streams And Mod musics can't be mixed until
it's finished either.
handle : The sync that has occured
channel: Channel that the sync occured in
data   : Additional data associated with the sync's occurance
user   : The 'user' parameter given when calling BASS_ChannelSetSync
End Rem

'typedef void (CALLBACK DSPPROC)(HDSP handle, DWORD channel, void *buffer, DWORD length, DWORD user);
Rem
DSP callback function. NOTE: A DSP Function should obviously be as quick as
possible... other DSP functions, streams And Mod musics can Not be processed
Until it's finished.
handle : The DSP handle
channel: Channel that the DSP is being applied To
buffer : Buffer To apply the DSP To
length : Number of bytes in the buffer
user   : The 'user' parameter given when calling BASS_ChannelSetDSP
End Rem

'typedef BOOL (CALLBACK RECORDPROC)(HRECORD handle, void *buffer, DWORD length, DWORD user);
Rem
Recording callback function.
handle : The recording handle
buffer : Buffer containing the recorded sample data
length : Number of bytes
user   : The 'user' parameter value given when calling BASS_RecordStart
Return : True = Continue recording, False = stop
End Rem

' BASS_ChannelGetData flags
Const BASS_DATA_AVAILABLE   =0         ' query how much data is buffered
Const BASS_DATA_FFT512   =$80000000   ' 512 sample FFT
Const BASS_DATA_FFT1024   =$80000001   ' 1024 FFT
Const BASS_DATA_FFT2048   =$80000002   ' 2048 FFT
Const BASS_DATA_FFT4096 =   $80000003   ' 4096 FFT
Const BASS_DATA_FFT_INDIVIDUAL =$10   ' FFT flag: FFT For each channel, Else all combined
Const BASS_DATA_FFT_NOWINDOW   =$20   ' FFT flag: no Hanning window

' BASS_StreamGetTags types : what's returned
Const BASS_TAG_ID3      =0   ' ID3v1 tags : 128 Byte block
Const BASS_TAG_ID3V2      =1   ' ID3v2 tags : variable length block
Const BASS_TAG_OGG      =2   ' OGG comments : array of Null-terminated strings
Const BASS_TAG_HTTP      =3   ' HTTP headers : array of Null-terminated strings
Const BASS_TAG_ICY      =4   ' ICY headers : array of Null-terminated strings
Const BASS_TAG_META      =5   ' ICY metadata : Null-terminated String

' BASS_MusicSet/GetAttribute options
Const BASS_MUSIC_ATTRIB_AMPLIFY=   0
Const BASS_MUSIC_ATTRIB_PANSEP   =1
Const BASS_MUSIC_ATTRIB_PSCALER   =2
Const BASS_MUSIC_ATTRIB_BPM      =3
Const BASS_MUSIC_ATTRIB_SPEED   =   4
Const BASS_MUSIC_ATTRIB_VOL_GLOBAL =5
Const BASS_MUSIC_ATTRIB_VOL_CHAN   =$100 ' + channel #
Const BASS_MUSIC_ATTRIB_VOL_INST   =$200 ' + instrument #


Rem
' DX8 effect types, use with BASS_ChannelSetFX
enum
{
   BASS_FX_CHORUS,         ' GUID_DSFX_STANDARD_CHORUS
   BASS_FX_COMPRESSOR,      ' GUID_DSFX_STANDARD_COMPRESSOR
   BASS_FX_DISTORTION,      ' GUID_DSFX_STANDARD_DISTORTION
   BASS_FX_ECHO,         ' GUID_DSFX_STANDARD_ECHO
   BASS_FX_FLANGER,      ' GUID_DSFX_STANDARD_FLANGER
   BASS_FX_GARGLE,         ' GUID_DSFX_STANDARD_GARGLE
   BASS_FX_I3DL2REVERB,   ' GUID_DSFX_STANDARD_I3DL2REVERB
   BASS_FX_PARAMEQ,      ' GUID_DSFX_STANDARD_PARAMEQ
   BASS_FX_REVERB         ' GUID_DSFX_WAVES_REVERB
};
End Rem


Const    BASS_FX_CHORUS = 0         ' GUID_DSFX_STANDARD_CHORUS
Const   BASS_FX_COMPRESSOR = 1      ' GUID_DSFX_STANDARD_COMPRESSOR
Const   BASS_FX_DISTORTION = 2      ' GUID_DSFX_STANDARD_DISTORTION
Const   BASS_FX_ECHO = 3         ' GUID_DSFX_STANDARD_ECHO
Const   BASS_FX_FLANGER = 4      ' GUID_DSFX_STANDARD_FLANGER
Const   BASS_FX_GARGLE = 5         ' GUID_DSFX_STANDARD_GARGLE
Const   BASS_FX_I3DL2REVERB = 6   ' GUID_DSFX_STANDARD_I3DL2REVERB
Const   BASS_FX_PARAMEQ = 7      ' GUID_DSFX_STANDARD_PARAMEQ
Const   BASS_FX_REVERB = 8         ' GUID_DSFX_WAVES_REVERB


Type BASS_FXCHORUS
    Field      fWetDryMix:Float
    Field      fDepth:Float
    Field      fFeedback:Float
    Field      fFrequency:Float
    Field      lWaveform:Int   ' 0=triangle, 1=sine
    Field      fDelay:Float
    Field      lPhase:Int      ' BASS_FX_PHASE_xxx
End Type

Type BASS_FXCOMPRESSOR
    Field    fGain:Float
    Field    fAttack:Float
    Field    fRelease:Float
    Field    fThreshold:Float
    Field    fRatio:Float
    Field    fPredelay:Float
End Type

Type BASS_FXDISTORTION
    Field    fGain:Float
    Field    fEdge:Float
    Field    fPostEQCenterFrequency:Float
    Field    fPostEQBandwidth:Float
    Field    fPreLowpassCutoff:Float
End Type



Type BASS_FXECHO
    Field   fWetDryMix:Float
    Field   fFeedback:Float
    Field   fLeftDelay:Float
    Field   fRightDelay:Float
    Field   lPanDelay:Byte
End Type

Type BASS_FXFLANGER
    Field      fWetDryMix:Float
    Field       fDepth:Float
    Field       fFeedback:Float
    Field       fFrequency:Float
    Field       lWaveform:Int   ' 0=triangle, 1=sine
    Field       fDelay:Float
    Field      lPhase:Int      ' BASS_FX_PHASE_xxx
End Type


Type BASS_FXGARGLE
    Field       dwRateHz:Int               ' Rate of modulation in hz
    Field       dwWaveShape:Int            ' 0=triangle, 1=square
End Type   ' DSFXGargle

Type BASS_FXI3DL2REVERB
    Field     lRoom:Int                  ' [-10000, 0]      Default: -1000 mB
    Field     lRoomHF:Int               ' [-10000, 0]      Default: 0 mB
    Field   flRoomRolloffFactor:Float    ' [0.0, 10.0]      Default: 0.0
    Field   flDecayTime:Float            ' [0.1, 20.0]      Default: 1.49s
    Field   flDecayHFRatio:Float         ' [0.1, 2.0]       Default: 0.83
    Field     lReflections:Int           ' [-10000, 1000]   Default: -2602 mB
    Field   flReflectionsDelay:Float     ' [0.0, 0.3]       Default: 0.007 s
    Field     lReverb:Int                ' [-10000, 2000]   Default: 200 mB
    Field   flReverbDelay:Float          ' [0.0, 0.1]       Default: 0.011 s
    Field   flDiffusion:Float            ' [0.0, 100.0]     Default: 100.0 %
    Field   flDensity:Float              ' [0.0, 100.0]     Default: 100.0 %
    Field   flHFReference:Float          ' [20.0, 20000.0]  Default: 5000.0 Hz
End Type    ' DSFXI3DL2Reverb

Type BASS_FXPARAMEQ
    Field   fCenter:Float
    Field   fBandwidth:Float
    Field   fGain:Float
End Type       ' DSFXParamEq

Type BASS_FXREVERB
    Field   fInGain:Float                ' [-96.0,0.0]            Default: 0.0 dB
    Field   fReverbMix:Float             ' [-96.0,0.0]            Default: 0.0 db
    Field   fReverbTime:Float            ' [0.001,3000.0]         Default: 1000.0 ms
    Field   fHighFreqRTRatio:Float       ' [0.001,0.999]          Default: 0.001
End Type       ' DSFXWavesReverb

Const BASS_FX_PHASE_NEG_180      =  0
Const BASS_FX_PHASE_NEG_90       =  1
Const BASS_FX_PHASE_ZERO         =  2
Const BASS_FX_PHASE_90           =  3
Const BASS_FX_PHASE_180          =  4

' BASS_ChannelIsActive Return values
Const BASS_ACTIVE_STOPPED   =0
Const BASS_ACTIVE_PLAYING   =1
Const BASS_ACTIVE_STALLED   =2
Const BASS_ACTIVE_PAUSED   =3

' BASS_ChannelIsSliding Return flags
Const BASS_SLIDE_FREQ   =1
Const BASS_SLIDE_VOL   =2
Const BASS_SLIDE_PAN   =4

' BASS_RecordSetInput flags
Const BASS_INPUT_OFF   =   $10000
Const BASS_INPUT_ON      =$20000
Const BASS_INPUT_LEVEL   =$40000

Const BASS_INPUT_TYPE_MASK      =$ff000000
Const BASS_INPUT_TYPE_UNDEF      =$00000000
Const BASS_INPUT_TYPE_DIGITAL   =   $01000000
Const BASS_INPUT_TYPE_LINE      =$02000000
Const BASS_INPUT_TYPE_MIC      =   $03000000
Const BASS_INPUT_TYPE_SYNTH      =$04000000
Const BASS_INPUT_TYPE_CD      =   $05000000
Const BASS_INPUT_TYPE_PHONE      =$06000000
Const BASS_INPUT_TYPE_SPEAKER   =   $07000000
Const BASS_INPUT_TYPE_WAVE      =$08000000
Const BASS_INPUT_TYPE_AUX      =   $09000000
Const BASS_INPUT_TYPE_ANALOG      =$0a000000

' BASS_Set/GetConfig options
Const BASS_CONFIG_BUFFER      =   0
Const BASS_CONFIG_UPDATEPERIOD   =1
Const BASS_CONFIG_MAXVOL      =   3
Const BASS_CONFIG_GVOL_SAMPLE      =4
Const BASS_CONFIG_GVOL_STREAM      =5
Const BASS_CONFIG_GVOL_MUSIC      =6
Const BASS_CONFIG_CURVE_VOL      =7
Const BASS_CONFIG_CURVE_PAN      =8
Const BASS_CONFIG_FLOATDSP      =9
Const BASS_CONFIG_3DALGORITHM      =10
Const BASS_CONFIG_NET_TIMEOUT      =11
Const BASS_CONFIG_NET_BUFFER      =12
Const BASS_CONFIG_PAUSE_NOPLAY   =13
Const BASS_CONFIG_NET_NOPROXY      =14
Const BASS_CONFIG_NET_PREBUF      =15


Const DllName:String = "bass.dll"
Local DllHandle = LoadLibraryA(DllName)


If DLLhandle = 0
   Assert DLLHandle, "BASS.DLL konnte nicht geladen werden"
EndIf


Global BASS_SetConfig(option:Int, value:Int)"Win32" = GetProcAddress(DllHandle,"BASS_SetConfig")

'DWORD BASSDEF(BASS_SetConfig)(DWORD option, DWORD value);

Global BASS_GetConfig(option:Int)"Win32" = GetProcAddress(DllHandle,"BASS_GetConfig")

'DWORD BASSDEF(BASS_GetConfig)(DWORD option);

Global BASS_GetVersion()"Win32" = GetProcAddress(DllHandle,"BASS_GetVersion")

'DWORD BASSDEF(BASS_GetVersion)();


Global BASS_GetDeviceDescription:Byte Ptr(device:Int)"Win32" = GetProcAddress(DllHandle,"BASS_GetDeviceDescription")

'char *BASSDEF(BASS_GetDeviceDescription)(DWORD device);


Global BASS_ErrorGetCode()"Win32" = GetProcAddress(DllHandle,"BASS_ErrorGetCode")

'DWORD BASSDEF(BASS_ErrorGetCode)();



Global BASS_Init(device:Int, freq:Int, flags:Int, hwnd:Int, dsguid:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_Init")

'BOOL BASSDEF(BASS_Init)(DWORD device, DWORD freq, DWORD flags, HWND win, Const GUID *dsguid);

Global BASS_SetDevice(device:Int)"Win32" = GetProcAddress(DllHandle,"BASS_SetDevice")

'BOOL BASSDEF(BASS_SetDevice)(DWORD device);


Global BASS_GetDevice()"Win32" = GetProcAddress(DllHandle,"BASS_GetDevice")

'DWORD BASSDEF(BASS_GetDevice)();


Global BASS_Free()"Win32" = GetProcAddress(DllHandle,"BASS_Free")

'BOOL BASSDEF(BASS_Free)();



Global BASS_GetDSoundObject:Byte Ptr(obj:Int)"Win32" = GetProcAddress(DllHandle,"BASS_GetDSoundObject")

'void *BASSDEF(BASS_GetDSoundObject)(DWORD Object);




Global BASS_GetInfo(BASS_INFO_Info:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_GetInfo")

'BOOL BASSDEF(BASS_GetInfo)(BASS_INFO *info);


Global BASS_Update()"Win32" = GetProcAddress(DllHandle,"BASS_Update")

'BOOL BASSDEF(BASS_Update)();




Global BASS_GetCPU:Float()"Win32" = GetProcAddress(DllHandle,"BASS_GetCPU")

'Float BASSDEF(BASS_GetCPU)();



Global BASS_Start()"Win32" = GetProcAddress(DllHandle,"BASS_Start")

'BOOL BASSDEF(BASS_Start)();



Global BASS_Stop()"Win32" = GetProcAddress(DllHandle,"BASS_Stop")

'BOOL BASSDEF(BASS_Stop)();



Global BASS_Pause()"Win32" = GetProcAddress(DllHandle,"BASS_Pause")

'BOOL BASSDEF(BASS_Pause)();


Global BASS_SetVolume(volume:Int)"Win32" = GetProcAddress(DllHandle,"BASS_SetVolume")

'BOOL BASSDEF(BASS_SetVolume)(DWORD volume);


Global BASS_GetVolume()"Win32" = GetProcAddress(DllHandle,"BASS_GetVolume")

'DWORD BASSDEF(BASS_GetVolume)();


Global BASS_Set3DFactors(distf:Float,rollf:Float, doppf:Float)"Win32" = GetProcAddress(DllHandle,"BASS_Set3DFactors")

'BOOL BASSDEF(BASS_Set3DFactors)(Float distf, Float rollf, Float doppf);



Global BASS_Get3DFactors(distf:Float Ptr, rollf:Float Ptr, doppf:Float Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_Get3DFactors")

'BOOL BASSDEF(BASS_Get3DFactors)(Float *distf, Float *rollf, Float *doppf);



Global BASS_Set3DPosition(BASS_3DVECTOR_Pos:Byte Ptr , BASS_3DVECTOR_Vel:Byte Ptr,  BASS_3DVECTOR_Front:Byte Ptr, BASS_3DVECTOR_Top:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_Set3DPosition")

'BOOL BASSDEF(BASS_Set3DPosition)(Const BASS_3DVECTOR *pos, Const BASS_3DVECTOR *vel, Const BASS_3DVECTOR *front, Const BASS_3DVECTOR *top);





Global BASS_Get3DPosition(BASS_3DVECTOR_Pos:Byte Ptr , BASS_3DVECTOR_Vel:Byte Ptr,  BASS_3DVECTOR_Front:Byte Ptr, BASS_3DVECTOR_Top:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_Get3DPosition")


'BOOL BASSDEF(BASS_Get3DPosition)(BASS_3DVECTOR *pos, BASS_3DVECTOR *vel, BASS_3DVECTOR *front, BASS_3DVECTOR *top);




Global BASS_Apply3D()"Win32" = GetProcAddress(DllHandle,"BASS_Apply3D")

'void BASSDEF(BASS_Apply3D)();



Global BASS_SetEAXParameters(env:Int, vol:Float, decay:Float, damp:Float)"Win32" = GetProcAddress(DllHandle,"BASS_SetEAXParameters")

'BOOL BASSDEF(BASS_SetEAXParameters)(Int env, Float vol, Float decay, Float damp);




Global BASS_GetEAXParameters(env:Int Ptr, vol:Float Ptr, decay:Float Ptr, damp:Float Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_GetEAXParameters")

'BOOL BASSDEF(BASS_GetEAXParameters)(DWORD *env, Float *vol, Float *decay, Float *damp);






Global BASS_MusicLoad(mem:Int, file:Byte Ptr, offset:Int, length:Int, flags:Int, freq:Int)"Win32" = GetProcAddress(DllHandle,"BASS_MusicLoad")

'HMUSIC BASSDEF(BASS_MusicLoad)(BOOL mem, Const void *file, DWORD offset, DWORD length, DWORD flags, DWORD freq);



Global BASS_MusicFree(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_MusicFree")

'BOOL BASSDEF(BASS_MusicFree)(HMUSIC handle);




Global BASS_MusicGetName:Byte Ptr(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_MusicGetName")

'char *BASSDEF(BASS_MusicGetName)(HMUSIC handle);



Global BASS_MusicGetLength(handle:Int, playlen:Int)"Win32" = GetProcAddress(DllHandle,"BASS_MusicGetLength")

'DWORD BASSDEF(BASS_MusicGetLength)(HMUSIC handle, BOOL playlen);



Global BASS_MusicSetAttribute(handle:Int, attrib:Int, value:Int)"Win32" = GetProcAddress(DllHandle,"BASS_MusicSetAttribute")


'DWORD BASSDEF(BASS_MusicSetAttribute)(HMUSIC handle, DWORD attrib, DWORD value);




Global BASS_MusicGetAttribute(handle:Int, attrib:Int)"Win32" = GetProcAddress(DllHandle,"BASS_MusicGetAttribute")

'DWORD BASSDEF(BASS_MusicGetAttribute)(HMUSIC handle, DWORD attrib);





Global BASS_SampleLoad(mem:Int, file:Byte Ptr, offset:Int, length:Int, Max_:Int, flags:Int)"Win32" = GetProcAddress(DllHandle,"BASS_SampleLoad")

'HSAMPLE BASSDEF(BASS_SampleLoad)(BOOL mem, Const void *file, DWORD offset, DWORD length, DWORD Max, DWORD flags);




Global BASS_SampleCreate:Byte Ptr(length:Int, freq:Int, Max_:Int, flags:Int)"Win32" = GetProcAddress(DllHandle,"BASS_SampleCreate")

'void* BASSDEF(BASS_SampleCreate)(DWORD length, DWORD freq, DWORD Max, DWORD flags);



Global BASS_SampleCreateDone()"Win32" = GetProcAddress(DllHandle,"BASS_SampleCreateDone")

'HSAMPLE BASSDEF(BASS_SampleCreateDone)();




Global BASS_SampleFree(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_SampleFree")

'BOOL BASSDEF(BASS_SampleFree)(HSAMPLE handle);





Global BASS_SampleGetInfo(handle:Int, BASS_SAMPLE_Info:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_SampleGetInfo")

'BOOL BASSDEF(BASS_SampleGetInfo)(HSAMPLE handle, BASS_SAMPLE *info);





Global BASS_SampleSetInfo(handle:Int, BASS_SAMPLE_Info:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_SampleSetInfo")

'BOOL BASSDEF(BASS_SampleSetInfo)(HSAMPLE handle, Const BASS_SAMPLE *info);



Global BASS_SampleGetChannel(handle:Int, onlynew:Int)"Win32" = GetProcAddress(DllHandle,"BASS_SampleGetChannel")

'HCHANNEL BASSDEF(BASS_SampleGetChannel)(HSAMPLE handle, BOOL onlynew);




Global BASS_SampleStop(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_SampleStop")

'BOOL BASSDEF(BASS_SampleStop)(HSAMPLE handle);





Global BASS_StreamCreate(freq:Int, chans:Int, flags:Int, proc:Byte Ptr, user:Int)"Win32" = GetProcAddress(DllHandle,"BASS_StreamCreate")

'HSTREAM BASSDEF(BASS_StreamCreate)(DWORD freq, DWORD chans, DWORD flags, STREAMPROC *proc, DWORD user);




Global BASS_StreamCreateFile(mem:Int, file:Byte Ptr, offset:Int, length:Int, flags:Int)"Win32" = GetProcAddress(DllHandle,"BASS_StreamCreateFile")

'HSTREAM BASSDEF(BASS_StreamCreateFile)(BOOL mem, Const void *file, DWORD offset, DWORD length, DWORD flags);




Global BASS_StreamCreateURL(url$z, offset:Int, flags:Int, proc:Byte Ptr, user:Int)"Win32" = GetProcAddress(DllHandle,"BASS_StreamCreateURL")

'HSTREAM BASSDEF(BASS_StreamCreateURL)(Const char *url, DWORD offset, DWORD flags, DOWNLOADPROC *proc, DWORD user);




Global BASS_StreamCreateFileUser(buffered:Int, flags:Int, proc:Byte Ptr, user:Int)"Win32" = GetProcAddress(DllHandle,"BASS_StreamCreateFileUser")

'HSTREAM BASSDEF(BASS_StreamCreateFileUser)(BOOL buffered, DWORD flags, STREAMFILEPROC *proc, DWORD user);





Global BASS_StreamFree(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_StreamFree")

'BOOL BASSDEF(BASS_StreamFree)(HSTREAM handle);






Global BASS_StreamGetLength:Long(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_StreamGetLength")

'QWORD BASSDEF(BASS_StreamGetLength)(HSTREAM handle);




Global BASS_StreamGetTags:Byte Ptr(handle:Int, tags:Int)"Win32" = GetProcAddress(DllHandle,"BASS_StreamGetTags")

'char *BASSDEF(BASS_StreamGetTags)(HSTREAM handle, DWORD tags);



Global BASS_StreamGetFilePosition(handle:Int, mode:Int)"Win32" = GetProcAddress(DllHandle,"BASS_StreamGetFilePosition")

'DWORD BASSDEF(BASS_StreamGetFilePosition)(HSTREAM handle, DWORD mode);




Global BASS_RecordGetDeviceDescription:Byte Ptr(device:Int)"Win32" = GetProcAddress(DllHandle,"BASS_RecordGetDeviceDescription")

'char *BASSDEF(BASS_RecordGetDeviceDescription)(DWORD device);




Global BASS_RecordInit(device:Int)"Win32" = GetProcAddress(DllHandle,"BASS_RecordInit")

'BOOL BASSDEF(BASS_RecordInit)(DWORD device);






Global BASS_RecordSetDevice(device:Int)"Win32" = GetProcAddress(DllHandle,"BASS_RecordSetDevice")

'BOOL BASSDEF(BASS_RecordSetDevice)(DWORD device);





Global BASS_RecordGetDevice()"Win32" = GetProcAddress(DllHandle,"BASS_RecordGetDevice")

'DWORD BASSDEF(BASS_RecordGetDevice)();



Global BASS_RecordFree()"Win32" = GetProcAddress(DllHandle,"BASS_RecordFree")

'BOOL BASSDEF(BASS_RecordFree)();




Global BASS_RecordGetInfo(BASS_RECORDINFO_Info:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_RecordGetInfo")

'BOOL BASSDEF(BASS_RecordGetInfo)(BASS_RECORDINFO *info);





Global BASS_RecordGetInputName:Byte Ptr(Input_:Int)"Win32" = GetProcAddress(DllHandle,"BASS_RecordGetInputName")

'char *BASSDEF(BASS_RecordGetInputName)(DWORD Input);





Global BASS_RecordSetInput(Input_:Int, setting:Int)"Win32" = GetProcAddress(DllHandle,"BASS_RecordSetInput")


'BOOL BASSDEF(BASS_RecordSetInput)(DWORD Input, DWORD setting);






Global BASS_RecordGetInput(Input_:Int)"Win32" = GetProcAddress(DllHandle,"BASS_RecordGetInput")

'DWORD BASSDEF(BASS_RecordGetInput)(DWORD Input);




Global BASS_RecordStart(freq:Int, chans:Int, flags:Int, proc:Byte Ptr, user:Int)"Win32" = GetProcAddress(DllHandle,"BASS_RecordStart")

'HRECORD BASSDEF(BASS_RecordStart)(DWORD freq, DWORD chans, DWORD flags, RECORDPROC *proc, DWORD user);






Global BASS_ChannelBytes2Seconds:Float(handle:Int, pos:Long)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelBytes2Seconds")

'Float BASSDEF(BASS_ChannelBytes2Seconds)(DWORD handle, QWORD pos);





Global BASS_ChannelSeconds2Bytes:Long(handle:Int, pos:Float)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSeconds2Bytes")

'QWORD BASSDEF(BASS_ChannelSeconds2Bytes)(DWORD handle, Float pos);






Global BASS_ChannelGetDevice(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelGetDevice")

'DWORD BASSDEF(BASS_ChannelGetDevice)(DWORD handle);






Global BASS_ChannelIsActive(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelIsActive")

'DWORD BASSDEF(BASS_ChannelIsActive)(DWORD handle);




Global BASS_ChannelGetInfo(handle:Int, BASS_CHANNELINFO_Info:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelGetInfo")

'BOOL BASSDEF(BASS_ChannelGetInfo)(DWORD handle, BASS_CHANNELINFO *info);






Global BASS_ChannelSetFlags(handle:Int, flags:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSetFlags")

'BOOL BASSDEF(BASS_ChannelSetFlags)(DWORD handle, DWORD flags);




Global BASS_ChannelPreBuf(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelPreBuf")

'BOOL BASSDEF(BASS_ChannelPreBuf)(DWORD handle);




Global BASS_ChannelPlay(handle:Int, restart:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelPlay")


'BOOL BASSDEF(BASS_ChannelPlay)(DWORD handle, BOOL restart);





Global BASS_ChannelStop(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelStop")

'BOOL BASSDEF(BASS_ChannelStop)(DWORD handle);





Global BASS_ChannelPause(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelPause")

'BOOL BASSDEF(BASS_ChannelPause)(DWORD handle);






Global BASS_ChannelSetAttributes(handle:Int, freq:Int, volume:Int, pan:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSetAttributes")

'BOOL BASSDEF(BASS_ChannelSetAttributes)(DWORD handle, Int freq, Int volume, Int pan);






Global BASS_ChannelGetAttributes(handle:Int, freq:Int Ptr, volume:Int Ptr, pan:Int Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelGetAttributes")

'BOOL BASSDEF(BASS_ChannelGetAttributes)(DWORD handle, DWORD *freq, DWORD *volume, Int *pan);






Global BASS_ChannelSlideAttributes(handle:Int, freq:Int, volume:Int , pan:Int, time:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSlideAttributes")

'BOOL BASSDEF(BASS_ChannelSlideAttributes)(DWORD handle, Int freq, Int volume, Int pan, DWORD time);




Global BASS_ChannelIsSliding(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelIsSliding")

'DWORD BASSDEF(BASS_ChannelIsSliding)(DWORD handle);






Global BASS_ChannelSet3DAttributes(handle:Int, mode:Int, Min_:Float, Max_:Float, iangle:Int, oangle:Int, outvol:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSet3DAttributes")

'BOOL BASSDEF(BASS_ChannelSet3DAttributes)(DWORD handle, Int mode, Float Min, Float Max, Int iangle, Int oangle, Int outvol);






Global BASS_ChannelGet3DAttributes(handle:Int, mode:Int Ptr, Min_:Float Ptr, Max_:Float Ptr, iangle:Int Ptr, oangle:Int Ptr, outvol:Int Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelGet3DAttributes")

'BOOL BASSDEF(BASS_ChannelGet3DAttributes)(DWORD handle, DWORD *mode, Float *Min, Float *Max, DWORD *iangle, DWORD *oangle, DWORD *outvol);





Global BASS_ChannelSet3DPosition(handle:Int, BASS_3DVECTOR_Pos:Byte Ptr, BASS_3DVECTOR_Orient:Byte Ptr, BASS_3DVECTOR_Vel:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSet3DPosition")

'BOOL BASSDEF(BASS_ChannelSet3DPosition)(DWORD handle, Const BASS_3DVECTOR *pos, Const BASS_3DVECTOR *orient, Const BASS_3DVECTOR *vel);



Global BASS_ChannelGet3DPosition(handle:Int, BASS_3DVECTOR_Pos:Byte Ptr, BASS_3DVECTOR_Orient:Byte Ptr, BASS_3DVECTOR_Vel:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelGet3DPosition")

'BOOL BASSDEF(BASS_ChannelGet3DPosition)(DWORD handle, BASS_3DVECTOR *pos, BASS_3DVECTOR *orient, BASS_3DVECTOR *vel);




Global BASS_ChannelSetPosition(handle:Int, pos:Long)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSetPosition")

'BOOL BASSDEF(BASS_ChannelSetPosition)(DWORD handle, QWORD pos);



Global BASS_ChannelGetPosition:Long(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelGetPosition")

'QWORD BASSDEF(BASS_ChannelGetPosition)(DWORD handle);





Global BASS_ChannelGetLevel(handle:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelGetLevel")

'DWORD BASSDEF(BASS_ChannelGetLevel)(DWORD handle);




Global BASS_ChannelGetData(handle:Int, buffer:Byte Ptr, length:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelGetData")

'DWORD BASSDEF(BASS_ChannelGetData)(DWORD handle, void *buffer, DWORD length);





Global BASS_ChannelSetSync(handle:Int, Type_:Int, param:Long, proc:Byte Ptr, user:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSetSync")

'HSYNC BASSDEF(BASS_ChannelSetSync)(DWORD handle, DWORD Type, QWORD param, SYNCPROC *proc, DWORD user);




Global BASS_ChannelRemoveSync(handle:Int, sync:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelRemoveSync")

'BOOL BASSDEF(BASS_ChannelRemoveSync)(DWORD handle, HSYNC sync);




Global BASS_ChannelSetDSP(handle:Int, proc:Byte Ptr, user:Int, priority:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSetDSP")

'HDSP BASSDEF(BASS_ChannelSetDSP)(DWORD handle, DSPPROC *proc, DWORD user, Int priority);




Global BASS_ChannelRemoveDSP(handle:Int, dsp:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelRemoveDSP")

'BOOL BASSDEF(BASS_ChannelRemoveDSP)(DWORD handle, HDSP dsp);




Global BASS_ChannelSetFX(handle:Int, type_:Int, priority:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSetFX")

'HFX BASSDEF(BASS_ChannelSetFX)(DWORD handle, DWORD Type, DWORD priority);






Global BASS_ChannelRemoveFX(handle:Int, fx:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelRemoveFX")

'BOOL BASSDEF(BASS_ChannelRemoveFX)(DWORD handle, HFX fx);



Global BASS_ChannelSetEAXMix(handle:Int, mix:Float)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSetEAXMix")

'BOOL BASSDEF(BASS_ChannelSetEAXMix)(DWORD handle, Float mix);




Global BASS_ChannelGetEAXMix(handle:Int, mix:Float Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelGetEAXMix")

'BOOL BASSDEF(BASS_ChannelGetEAXMix)(DWORD handle, Float *mix);




Global BASS_ChannelSetLink(handle:Int, chan:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelSetLink")

'BOOL BASSDEF(BASS_ChannelSetLink)(DWORD handle, DWORD chan);



Global BASS_ChannelRemoveLink(handle:Int, chan:Int)"Win32" = GetProcAddress(DllHandle,"BASS_ChannelRemoveLink")

'BOOL BASSDEF(BASS_ChannelRemoveLink)(DWORD handle, DWORD chan);



Global BASS_FXSetParameters(handle:Int, par:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_FXSetParameters")

'BOOL BASSDEF(BASS_FXSetParameters)(HFX handle, Const void *par);



Global BASS_FXGetParameters(handle:Int, par:Byte Ptr)"Win32" = GetProcAddress(DllHandle,"BASS_FXGetParameters")

'BOOL BASSDEF(BASS_FXGetParameters)(HFX handle, void *par);





Function LoWord:Short(Value:Int)
   Return Value & $0000FFFF
End Function


Function HiWord:Short(Value:Int)
   Return (Value & $FFFF0000) Shr 16
End Function



Function StripTags:String[](Data:Byte Ptr)
   
   Local TempArray:String[]
   Local TempChar
   Local NewString:String
   
   For Local i:Int = 0 Until 128
   
      If Data[i] = 0
         Continue
      EndIf
      
      NewString = ""
      
      Repeat
         TempChar = Data[i]
      
         If TempChar = 0
            Exit
         EndIf
         
         NewString:+Chr(TempChar)
         
         i:+1
      Forever TempChar=0
      
      NewString = Trim(NewString)
      
      If NewString.length>0
         TempArray = TempArray[..TempArray.length+1]
         TempArray[TempArray.length-1] = NewString
      EndIf
      
   Next
   
   Return TempArray
End Function








Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB
  • Zuletzt bearbeitet von Suco-X am Sa, Jul 02, 2005 11:31, insgesamt 6-mal bearbeitet

Suco-X

Betreff: .......

BeitragSa, Jul 02, 2005 1:55
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich habe noch ein paar Änderungen vorgenommen (Bitte Code aus dem ersten Thread neu aufpielen).
Habe dazu auch mal das erste Beispiel gemacht:

Code: [AUSKLAPPEN]


Strict

Import "bass.bmx"



Graphics 640,480,0



If Not BASS_Init(1, 44100, 0, 0, Null)
   Notify("Fehler bei der Initialisierung")
   End
EndIf




'Beliebige MP3, MP2, MP1, OGG oder WAV Datei kann geladen werden

Global MusicStream:Int = BASS_StreamCreateFile(False,"lookatwhatifoundinthegarden.ogg",0,0,0)


BASS_ChannelPlay(MusicStream,0)      


Repeat
   Cls
   
   Local Level:Int = BASS_ChannelGetLevel(MusicStream)
   Local LeftLevel:Float = LoWord(Level)/100.0
   Local RightLevel:Float = HiWord(Level)/100.0
   
   
   
   SetColor 255,0,0
   DrawRect 30,GraphicsHeight()-50, 100, -LeftLevel
   
   SetColor 0,255,0
   DrawRect GraphicsWidth()-160,GraphicsHeight()-50, 100, -RightLevel
   
   
   
   SetColor 255,255,255
   DrawText "BASS CPU: "+BASS_GetCPU(),10,10
   DrawText "Linker Level: "+LoWord(Level),10,30
   DrawText "Rechter Level: "+HiWord(Level),10, 50
   
   Flip
   FlushMem()
Until KeyDown(KEY_ESCAPE)


Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Suco-X

Betreff: .......

BeitragSa, Jul 02, 2005 2:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi
Und noch ein Beispiel. Hier wird eine Datei anhand einer Url geladen, abgespielt und testweise auch noch auf dem Computer gespeichert. Interessant ist hier die Benutzung von Callback Funktionen.


Code: [AUSKLAPPEN]

Strict

Import "bass.bmx"

'Ohne Win32 hinter der Funktion gibt es einen Absturz da sich die Aufrufkonventionen sonst unterscheiden
Function SaveMusicCallback(buffer:Byte Ptr, length:Int, user:Int)"Win32"
   Global FileStream:TStream
   
   If FileStream = Null
      FileStream = WriteFile("c:\dateidownload.mp3")
   EndIf
   
   If Buffer = Null
      CloseFile(FileStream)
   Else
      For Local i:Int = 0 Until length
         WriteByte(FileStream, buffer[i])
      Next
   EndIf
   
End Function



Graphics 640,480,0


If Not BASS_Init(1, 44100, 0, 0, Null)
   Notify("Fehler bei der Initialisierung")
   End
EndIf




'Beliebige MP3, MP2, MP1, OGG oder WAV Datei kann geladen werden

Global MusicStream:Int = BASS_StreamCreateUrl("http://www.rektor.no/filarkiv/princesstream.mp3",0, BASS_STREAM_META|BASS_STREAM_STATUS,SaveMusicCallback,0)


If MusicStream = 0
   Notify("Musik konnte nicht geladen werden")
   End
EndIf

BASS_ChannelPlay(MusicStream,0)      


Repeat
   Cls
   
   Local Level:Int = BASS_ChannelGetLevel(MusicStream)
   Local LeftLevel:Float = LoWord(Level)/100.0
   Local RightLevel:Float = HiWord(Level)/100.0
   
   
   
   SetColor 255,0,0
   DrawRect 30,GraphicsHeight()-50, 100, -LeftLevel
   
   SetColor 0,255,0
   DrawRect GraphicsWidth()-160,GraphicsHeight()-50, 100, -RightLevel
   
   
   
   SetColor 255,255,255
   DrawText "BASS CPU: "+BASS_GetCPU(),10,10
   DrawText "Linker Level: "+LoWord(Level),10,30
   DrawText "Rechter Level: "+HiWord(Level),10, 50
   
   Flip
   FlushMem()
Until KeyDown(KEY_ESCAPE)





Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

D2006

Administrator

BeitragSa, Jul 02, 2005 9:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Seeeeehr feine Sache!
Gute Arbeit! Wirklich top wie du dich geopfert hast.

MfG
D2006

Suco-X

Betreff: ......

BeitragSa, Jul 02, 2005 10:32
Antworten mit Zitat
Benutzer-Profile anzeigen
np
Übrigens neue Version da, habe einige Rückgabetypen bei Funktionen ändern müssen. Neu Laden.
Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Suco-X

Betreff: ......

BeitragSa, Jul 02, 2005 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
So, noch ein Beispiel zum Auslesen der Daten wie Titel, Author usw. eines liedes. Hat sich etwas komplizierter gestaltet, funktioniert aber. Benötigen tut ihr dafür die neue Version von meinem Bass Code (Siehe erster Post).

Code: [AUSKLAPPEN]

Strict

Import "bass.bmx"


Graphics 640,480,0



If Not BASS_Init(1, 44100, 0, 0, Null)
   Notify("Fehler bei der Initialisierung")
   End
EndIf




'Beliebige MP3, MP2, MP1, OGG oder WAV Datei kann geladen werden

Global MusicStream:Int = BASS_StreamCreateFile(False,"Zoe - Rock Steady.mp3",0,0,0)




Local TagDaten:Byte Ptr = BASS_StreamGetTags(MusicStream,  BASS_TAG_ID3V2)
Local StringDaten:String[]

If TagDaten = Null
   Print "Keine Tag Daten vorhanden"
Else
   StringDaten = StripTags(TagDaten)
   For Local TempString:String = EachIn StringDaten
      Print TempString
   Next
EndIf





BASS_ChannelPlay(MusicStream,0)      



Repeat
   Cls
   
   Local Level:Int = BASS_ChannelGetLevel(MusicStream)
   Local LeftLevel:Float = LoWord(Level)/100.0
   Local RightLevel:Float = HiWord(Level)/100.0
   
   
   
   SetColor 255,0,0
   DrawRect 30,GraphicsHeight()-50, 100, -LeftLevel
   
   SetColor 0,255,0
   DrawRect GraphicsWidth()-160,GraphicsHeight()-50, 100, -RightLevel
   
   
   
   SetColor 255,255,255
   DrawText "BASS CPU: "+BASS_GetCPU(),10,10
   DrawText "Linker Level: "+LoWord(Level),10,30
   DrawText "Rechter Level: "+HiWord(Level),10, 50

   Flip
   FlushMem()
Until KeyDown(KEY_ESCAPE)


Mfg Suco
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB

Bigmichi

BeitragSa, Jul 02, 2005 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier noch eine verbesserte Version um Mp3 V1 Tags auszulesen =)

Code: [AUSKLAPPEN]
Function StripTagIDE3:String[](Data:Byte Ptr)
 Local TempArray:String[]
 Local TempChar
 Local NewString:String
 
   'Title
   NewString = ""
   For Local i:Int = 3 to 32      
      If Data[i] <> 0 then
         TempChar = Data[i]
         NewString:+Chr(TempChar)
      End IF
   Next
   If NewString.length>0
    TempArray = TempArray[..TempArray.length+1]
    TempArray[TempArray.length-1] = NewString
   EndIf   
   
   
   'Artist
   NewString = ""
   For i:Int = 33 to 62      
      If Data[i] <> 0 then
         TempChar = Data[i]
         NewString:+Chr(TempChar)
      End IF
   Next
   If NewString.length>0
    TempArray = TempArray[..TempArray.length+1]
    TempArray[TempArray.length-1] = NewString
   EndIf   
   
   'Album
   NewString = ""
   For i:Int = 63 to 92      
      If Data[i] <> 0 then
         TempChar = Data[i]
         NewString:+Chr(TempChar)
      End IF
   Next
   If NewString.length>0
    TempArray = TempArray[..TempArray.length+1]
    TempArray[TempArray.length-1] = NewString
   EndIf   
   
   'Jahr
   NewString = ""
   For i:Int = 93 to 96      
      If Data[i] <> 0 then
         TempChar = Data[i]
         NewString:+Chr(TempChar)
      End IF
   Next
   If NewString.length>0
    TempArray = TempArray[..TempArray.length+1]
    TempArray[TempArray.length-1] = NewString
   EndIf   
   
   'Comment
   NewString = ""
   For i:Int = 97 to 125   
      If Data[i] <> 0 then
         TempChar = Data[i]
         NewString:+Chr(TempChar)
      End IF
   Next
   If NewString.length>0
    TempArray = TempArray[..TempArray.length+1]
    TempArray[TempArray.length-1] = NewString
   EndIf   
 
 Return TempArray
End Function

Artemis

BeitragDi, Nov 01, 2005 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
und für die version 2.2
Code: [AUSKLAPPEN]
Import PUB.win32

'initialize
Const DllName:String = "bass.dll"
Local DllHandle:Int  = LoadLibraryA(DllName)
If DllHandle = 0
   RuntimeError("the file ~q"+DllName+"~q could not be load")
EndIf

'consts

' error codes returned by BASS_ErrorGetCode
Const BASS_OK             = 0  ' everything OK
Const BASS_ERROR_MEM      = 1  ' memory error
Const BASS_ERROR_FILEOPEN = 2  ' can't open the file
Const BASS_ERROR_DRIVER   = 3  ' can't find a free/valid driver
Const BASS_ERROR_BUFLOST  = 4  ' the sample buffer was lost
Const BASS_ERROR_HANDLE   = 5  ' invalid handle
Const BASS_ERROR_FORMAT   = 6  ' unsupported sample format
Const BASS_ERROR_POSITION = 7  ' invalid playback position
Const BASS_ERROR_INIT     = 8  ' BASS_Init has Not been successfully called
Const BASS_ERROR_START    = 9  ' BASS_Start has Not been successfully called
'Const BASS_ERROR_NOCD     = 12 ' no CD in drive
'Const BASS_ERROR_CDTRACK  = 13 ' invalid track number
Const BASS_ERROR_ALREADY  = 14 ' already initialized/paused/whatever
Const BASS_ERROR_NOPAUSE  = 16 ' Not paused
'Const BASS_ERROR_NOTAUDIO = 17 ' not audio track
Const BASS_ERROR_NOCHAN   = 18 ' can't get a free channel
Const BASS_ERROR_ILLTYPE  = 19 ' an illegal Type was specified
Const BASS_ERROR_ILLPARAM = 20 ' an illegal parameter was specified
Const BASS_ERROR_NO3D     = 21 ' no 3D support
Const BASS_ERROR_NOEAX    = 22 ' no EAX support
Const BASS_ERROR_DEVICE   = 23 ' illegal device number
Const BASS_ERROR_NOPLAY   = 24 ' Not playing
Const BASS_ERROR_FREQ     = 25 ' illegal sample rate
Const BASS_ERROR_NOTFILE  = 27 ' the stream is Not a file stream
Const BASS_ERROR_NOHW     = 29 ' no hardware voices available
Const BASS_ERROR_EMPTY    = 31 ' the Mod music has no sequence data
Const BASS_ERROR_NONET    = 32 ' no internet connection could be opened
Const BASS_ERROR_CREATE   = 33 ' couldn't create the file
Const BASS_ERROR_NOFX     = 34 ' effects are Not available
Const BASS_ERROR_PLAYING  = 35 ' the channel is playing
Const BASS_ERROR_NOTAVAIL = 37 ' requested data is Not available
Const BASS_ERROR_DECODE   = 38 ' the channel is a "decoding channel"
Const BASS_ERROR_DX       = 39 ' a sufficient DirectX version is Not installed
Const BASS_ERROR_TIMEOUT  = 40 ' connection timedout
Const BASS_ERROR_FILEFORM = 41 ' unsupported file format
Const BASS_ERROR_SPEAKER  = 42 ' unavailable speaker
Const BASS_ERROR_UNKNOWN  = -1 ' some other mystery error

' initialization flags
Const BASS_DEVICE_8BITS    = 1    ' use 8 bit resolution, Else 16 bit
Const BASS_DEVICE_MONO     = 2    ' use mono, Else stereo
Const BASS_DEVICE_3D       = 4    ' enable 3D functionality
Const BASS_DEVICE_LATENCY  = 256  ' calculate device latency (BASS_INFO struct)
Const BASS_DEVICE_SPEAKERS = 2048 ' force enabling of speaker assignment

' DirectSound interfaces (For use with BASS_GetDSoundObject)
Const BASS_OBJECT_DS    = 1 ' IDirectSound
Const BASS_OBJECT_DS3DL = 2 ' IDirectSound3DListener

' BASS_INFO flags
Const DSCAPS_CONTINUOUSRATE  = $10
Const DSCAPS_EMULDRIVER      = $20
Const DSCAPS_CERTIFIED       = $40
Const DSCAPS_SECONDARYMONO   = $100 ' mono
Const DSCAPS_SECONDARYSTEREO = $200 ' stereo
Const DSCAPS_SECONDARY8BIT   = $400 ' 8 bit
Const DSCAPS_SECONDARY16BIT  = $800 ' 16 bit

' BASS_RECORDINFO flags
Const DSCCAPS_EMULDRIVER = DSCAPS_EMULDRIVER
Const DSCCAPS_CERTIFIED  = DSCAPS_CERTIFIED

' defines For formats Field of BASS_RECORDINFO
Const WAVE_FORMAT_1M08 = $00000001 ' 11.025 kHz, Mono,   8-bit
Const WAVE_FORMAT_1S08 = $00000002 ' 11.025 kHz, Stereo, 8-bit
Const WAVE_FORMAT_1M16 = $00000004 ' 11.025 kHz, Mono,   16-bit
Const WAVE_FORMAT_1S16 = $00000008 ' 11.025 kHz, Stereo, 16-bit
Const WAVE_FORMAT_2M08 = $00000010 ' 22.05  kHz, Mono,   8-bit   
Const WAVE_FORMAT_2S08 = $00000020 ' 22.05  kHz, Stereo, 8-bit
Const WAVE_FORMAT_2M16 = $00000040 ' 22.05  kHz, Mono,   16-bit
Const WAVE_FORMAT_2S16 = $00000080 ' 22.05  kHz, Stereo, 16-bit
Const WAVE_FORMAT_4M08 = $00000100 ' 44.1   kHz, Mono,   8-bit
Const WAVE_FORMAT_4S08 = $00000200 ' 44.1   kHz, Stereo, 8-bit   
Const WAVE_FORMAT_4M16 = $00000400 ' 44.1   kHz, Mono,   16-bit
Const WAVE_FORMAT_4S16 = $00000800 ' 44.1   kHz, Stereo, 16-bit

' Sample info flags
Const BASS_SAMPLE_8BITS     = 1      ' 8 bit
Const BASS_SAMPLE_FLOAT     = 256    ' 32-bit floating-point
Const BASS_SAMPLE_MONO      = 2      ' mono, Else stereo
Const BASS_SAMPLE_LOOP      = 4      ' looped
Const BASS_SAMPLE_3D        = 8      ' 3D functionality enabled
Const BASS_SAMPLE_SOFTWARE  = 16     ' it's NOT using hardware mixing
Const BASS_SAMPLE_MUTEMAX   = 32     ' muted at Max distance (3D only)
Const BASS_SAMPLE_VAM       = 64     ' uses the DX7 voice allocation & management
Const BASS_SAMPLE_FX        = 128    ' old implementation of DX8 effects are enabled
Const BASS_SAMPLE_OVER_VOL  = $10000 ' override lowest volume
Const BASS_SAMPLE_OVER_POS  = $20000 ' override longest playing
Const BASS_SAMPLE_OVER_DIST = $30000 ' override furthest from listener (3D only)

Const BASS_MP3_SETPOS = $20000 ' enable pin-point seeking on the MP3/MP2/MP1

Const BASS_STREAM_AUTOFREE = $40000  ' automatically free the stream when it stop/ends
Const BASS_STREAM_RESTRATE = $80000  ' restrict the download rate of internet file streams
Const BASS_STREAM_BLOCK    = $100000 ' download/play internet file stream in small blocks
Const BASS_STREAM_DECODE   = $200000 ' don't play the stream, only decode (BASS_ChannelGetData)
Const BASS_STREAM_META     = $400000 ' request metadata from a Shoutcast stream
Const BASS_STREAM_STATUS   = $800000 ' give server status info (HTTP/ICY tags) in DOWNLOADPROC

Const BASS_MUSIC_FLOAT      = BASS_SAMPLE_FLOAT    ' 32-bit floating-point
Const BASS_MUSIC_MONO       = BASS_SAMPLE_MONO     ' force mono mixing (less CPU usage)
Const BASS_MUSIC_LOOP       = BASS_SAMPLE_LOOP     ' loop music
Const BASS_MUSIC_3D         = BASS_SAMPLE_3D       ' enable 3D functionality
Const BASS_MUSIC_FX         = BASS_SAMPLE_FX       ' enable old implementation of DX8 effects
Const BASS_MUSIC_AUTOFREE   = BASS_STREAM_AUTOFREE ' automatically free the music when it stop/ends
Const BASS_MUSIC_DECODE     = BASS_STREAM_DECODE   ' don't play the music, only decode (BASS_ChannelGetData)
Const BASS_MUSIC_RAMP       = $200    ' normal ramping
Const BASS_MUSIC_RAMPS      = $400    ' sensitive ramping
Const BASS_MUSIC_SURROUND   = $800    ' surround sound
Const BASS_MUSIC_SURROUND2  = $1000   ' surround sound (mode 2)
Const BASS_MUSIC_FT2MOD     = $2000   ' play .Mod as FastTracker 2 does
Const BASS_MUSIC_PT1MOD     = $4000   ' play .Mod as ProTracker 1 does
Const BASS_MUSIC_CALCLEN    = $8000   ' calculate playback length
Const BASS_MUSIC_NONINTER   = $10000  ' non-interpolated mixing
Const BASS_MUSIC_POSRESET   = $20000  ' stop all notes when moving position
Const BASS_MUSIC_POSRESETEX = $400000 ' stop all notes And reset bmp/etc when moving position
Const BASS_MUSIC_STOPBACK   = $80000  ' stop the music on a backwards jump effect
Const BASS_MUSIC_NOSAMPLE   = $100000 ' don't load the samples

' Speaker assignment flags
Const BASS_SPEAKER_FRONT      =$1000000  ' front speakers
Const BASS_SPEAKER_REAR       =$2000000  ' rear/side speakers
Const BASS_SPEAKER_CENLFE     =$3000000  ' center & LFE speakers (5.1)
Const BASS_SPEAKER_REAR2      =$4000000  ' rear center speakers (7.1)
Const BASS_SPEAKER_LEFT       =$10000000 ' modifier: Left
Const BASS_SPEAKER_RIGHT      =$20000000 ' modifier: Right
Const BASS_SPEAKER_FRONTLEFT  =BASS_SPEAKER_FRONT  | BASS_SPEAKER_LEFT
Const BASS_SPEAKER_FRONTRIGHT =BASS_SPEAKER_FRONT  | BASS_SPEAKER_RIGHT
Const BASS_SPEAKER_REARLEFT   =BASS_SPEAKER_REAR   | BASS_SPEAKER_LEFT
Const BASS_SPEAKER_REARRIGHT  =BASS_SPEAKER_REAR   | BASS_SPEAKER_RIGHT
Const BASS_SPEAKER_CENTER     =BASS_SPEAKER_CENLFE | BASS_SPEAKER_LEFT
Const BASS_SPEAKER_LFE        =BASS_SPEAKER_CENLFE | BASS_SPEAKER_RIGHT
Const BASS_SPEAKER_REAR2LEFT  =BASS_SPEAKER_REAR2  | BASS_SPEAKER_LEFT
Const BASS_SPEAKER_REAR2RIGHT =BASS_SPEAKER_REAR2  | BASS_SPEAKER_RIGHT
Function BASS_SPEAKER_N(n)
   Return n Shl 24
EndFunction

Const BASS_UNICODE = $80000000

Const BASS_RECORD_PAUSE = $8000 ' start recording paused

' DX7 voice allocation flags
Const BASS_VAM_HARDWARE = 1 ' Play the sample in hardware. If no hardware voices are available Then the "play" call will fail
Const BASS_VAM_SOFTWARE = 2 ' Play the sample in software (ie. non-accelerated). No other VAM flags may be used together with this flag.

' DX7 voice management flags
Const BASS_VAM_TERM_TIME = 4  ' If there are no free hardware voices, the buffer To be terminated will be the one with the least time Left To play.
Const BASS_VAM_TERM_DIST = 8  ' If there are no free hardware voices, the buffer To be terminated will be one that was loaded/created with the BASS_SAMPLE_MUTEMAX flag And is beyond it's max distance. If there are no buffers that match this criteria, then the "play" call will fail.
Const BASS_VAM_TERM_PRIO = 16 ' If there are no free hardware voices, the buffer To be terminated will be the one with the lowest priority.

' BASS_CHANNELINFO types
Const BASS_CTYPE_SAMPLE     = $00001
Const BASS_CTYPE_RECORD     = $00002
Const BASS_CTYPE_STREAM     = $10000
Const BASS_CTYPE_STREAM_WAV = $10001
Const BASS_CTYPE_STREAM_OGG = $10002
Const BASS_CTYPE_STREAM_MP1 = $10003
Const BASS_CTYPE_STREAM_MP2 = $10004
Const BASS_CTYPE_STREAM_MP3 = $10005
Const BASS_CTYPE_MUSIC_MOD  = $20000
Const BASS_CTYPE_MUSIC_MTM  = $20001
Const BASS_CTYPE_MUSIC_S3M  = $20002
Const BASS_CTYPE_MUSIC_XM   = $20003
Const BASS_CTYPE_MUSIC_IT   = $20004
Const BASS_CTYPE_MUSIC_MO3  = $00100

' 3D channel modes
Const BASS_3DMODE_NORMAL = 0
Const BASS_3DMODE_OFF    = 2

Const EAX_ENVIRONMENT_GENERIC         = 0
Const EAX_ENVIRONMENT_PADDEDCELL      = 1
Const EAX_ENVIRONMENT_ROOM            = 2
Const EAX_ENVIRONMENT_BATHROOM        = 3
Const EAX_ENVIRONMENT_LIVINGROOM      = 4
Const EAX_ENVIRONMENT_STONEROOM       = 5
Const EAX_ENVIRONMENT_AUDITORIUM      = 6
Const EAX_ENVIRONMENT_CONCERTHALL     = 7
Const EAX_ENVIRONMENT_CAVE            = 8
Const EAX_ENVIRONMENT_ARENA           = 9
Const EAX_ENVIRONMENT_HANGAR          = 10
Const EAX_ENVIRONMENT_CARPETEDHALLWAY = 11
Const EAX_ENVIRONMENT_HALLWAY         = 12
Const EAX_ENVIRONMENT_STONECORRIDOR   = 13
Const EAX_ENVIRONMENT_ALLEY           = 14
Const EAX_ENVIRONMENT_FOREST          = 15
Const EAX_ENVIRONMENT_CITY            = 16
Const EAX_ENVIRONMENT_MOUNTAINS       = 17
Const EAX_ENVIRONMENT_QUARRY          = 18
Const EAX_ENVIRONMENT_PLAIN           = 19
Const EAX_ENVIRONMENT_PARKINGLOT      = 20
Const EAX_ENVIRONMENT_SEWERPIPE       = 21
Const EAX_ENVIRONMENT_UNDERWATER      = 22
Const EAX_ENVIRONMENT_DRUGGED         = 23
Const EAX_ENVIRONMENT_DIZZY           = 24
Const EAX_ENVIRONMENT_PSYCHOTIC       = 25

Const EAX_ENVIRONMENT_COUNT           = 26 ' total number of environments

' software 3D mixing algorithm modes (used with BASS_Set3DAlgorithm)
Const BASS_3DALG_DEFAULT = 0
Const BASS_3DALG_OFF     = 1 ' Uses normal Left And Right panning. The vertical axis is ignored except For scaling of volume due To distance. Doppler shift And volume scaling are still applied, but the 3D filtering is Not performed. This is the most CPU efficient software implementation, but provides no virtual 3D audio effect. Head Related Transfer Function processing will Not be done. Since only normal stereo panning is used, a channel using this algorithm may be accelerated by a 2D hardware voice If no free 3D hardware voices are available.
Const BASS_3DALG_FULL    = 2 ' This algorithm gives the highest quality 3D audio effect, but uses more CPU. Requires Windows 98 2nd Edition Or Windows 2000 that uses WDM drivers, If this mode is Not available Then BASS_3DALG_OFF will be used instead.
Const BASS_3DALG_LIGHT   = 3 ' This algorithm gives a good 3D audio effect, And uses less CPU than the FULL mode. Requires Windows 98 2nd Edition Or Windows 2000 that uses WDM drivers, If this mode is Not available Then BASS_3DALG_OFF will be used instead.

Const BASS_STREAMPROC_END = $80000000 ' End of user stream flag

' BASS_StreamGetFilePosition modes
Const BASS_FILEPOS_DECODE   = 0
Const BASS_FILEPOS_DOWNLOAD = 1
Const BASS_FILEPOS_END      = 2
Const BASS_FILEPOS_START    = 3

' STREAMFILEPROC actions
Const BASS_FILE_CLOSE = 0
Const BASS_FILE_READ  = 1
Const BASS_FILE_QUERY = 2
Const BASS_FILE_LEN   = 3
Const BASS_FILE_SEEK  = 4

Const BASS_SYNC_MUSICPOS = 0
Const BASS_SYNC_POS      = 0
   Rem
   Sync when a channel reaches a position.
   If HMUSIC...
   param: LOWORD=order, HIWORD=row 'order & row = 0(first) | -1(all)
   data : LOWORD=order, HIWORD=row
   If HSTREAM...
   param: position in bytes
   End Rem
Const BASS_SYNC_MUSICINST = 1
   Rem
   Sync when an instrument (sample For the non-instrument based formats)
   is played in a music (Not including retrigs).
   param: LOWORD=instrument (1=first) HIWORD=note (0=c0...119=b9, -1=all)
   data : LOWORD=note HIWORD=volume (0-64)
   End Rem
Const BASS_SYNC_END = 2
   Rem
   Sync when a channel reaches the end.
   param: Not used
   data : 1 = the sync is triggered by a backward jump in a Mod music, otherwise Not used
   End Rem
Const BASS_SYNC_MUSICFX = 3
   Rem
   Sync when the "sync" effect (XM/MTM/Mod: E8x/Wxx, IT/S3M: S2x) is used.
   param: 0:data=pos, 1:data="x" value
   data : param=0: LOWORD=order HIWORD=row, param=1: "x" value
   End Rem
Const BASS_SYNC_META = 4
   Rem
   Sync when metadata is received in a Shoutcast stream.
   param: Not used
   data : pointer To the metadata
   End Rem
Const BASS_SYNC_SLIDE = 5
   Rem
   Sync when an attribute slide is completed.
   param: Not used
   data : the Type of slide completed (one of the BASS_SLIDE_xxx values)
   End Rem
Const BASS_SYNC_STALL = 6
   Rem
   Sync when playback has stalled.
   param: Not used
   data : 0=stalled, 1=resumed
   End Rem
Const BASS_SYNC_DOWNLOAD = 7
   Rem
   Sync when downloading of an internet (Or "buffered" user file) stream has ended.
   param: Not used
   data : Not used
   End Rem
Const BASS_SYNC_FREE = 8
   Rem
   Sync when a channel is freed.
   param: Not used
   data : Not used
   End Rem
Const BASS_SYNC_MESSAGE   =$20000000   ' FLAG: post a Windows message (instead of callback)
   Rem
   When using a window message "callback", the message To post is given in the "proc"
   parameter of BASS_ChannelSetSync, And is posted To the window specified in the BASS_Init
   call. The message parameters are: WPARAM = data, LPARAM = user.
    End Rem
Const BASS_SYNC_MIXTIME   =$40000000   ' FLAG: sync at mixtime, Else at playtime
Const BASS_SYNC_ONETIME   =$80000000   ' FLAG: sync only once, Else continuously

' BASS_ChannelGetData flags
Const BASS_DATA_AVAILABLE      = 0         ' query how much data is buffered
Const BASS_DATA_FFT512         = $80000000 ' 512 sample FFT
Const BASS_DATA_FFT1024        = $80000001 ' 1024 FFT
Const BASS_DATA_FFT2048        = $80000002 ' 2048 FFT
Const BASS_DATA_FFT4096        = $80000003 ' 4096 FFT
Const BASS_DATA_FFT_INDIVIDUAL = $10       ' FFT flag: FFT For each channel, Else all combined
Const BASS_DATA_FFT_NOWINDOW   = $20       ' FFT flag: no Hanning window

' BASS_StreamGetTags types : what's returned
Const BASS_TAG_ID3   = 0   ' ID3v1 tags : 128 Byte block
Const BASS_TAG_ID3V2 = 1   ' ID3v2 tags : variable length block
Const BASS_TAG_OGG   = 2   ' OGG comments : array of Null-terminated strings
Const BASS_TAG_HTTP  = 3   ' HTTP headers : array of Null-terminated strings
Const BASS_TAG_ICY   = 4   ' ICY headers : array of Null-terminated strings
Const BASS_TAG_META  = 5   ' ICY metadata : Null-terminated String

' BASS_MusicSet/GetAttribute options
Const BASS_MUSIC_ATTRIB_AMPLIFY    = 0
Const BASS_MUSIC_ATTRIB_PANSEP     = 1
Const BASS_MUSIC_ATTRIB_PSCALER    = 2
Const BASS_MUSIC_ATTRIB_BPM        = 3
Const BASS_MUSIC_ATTRIB_SPEED      = 4
Const BASS_MUSIC_ATTRIB_VOL_GLOBAL = 5
Const BASS_MUSIC_ATTRIB_VOL_CHAN   = $100 ' + channel #
Const BASS_MUSIC_ATTRIB_VOL_INST   = $200 ' + instrument #


' BASS_FX
Const BASS_FX_CHORUS      = 0 ' GUID_DSFX_STANDARD_CHORUS
Const BASS_FX_COMPRESSOR  = 1 ' GUID_DSFX_STANDARD_COMPRESSOR
Const BASS_FX_DISTORTION  = 2 ' GUID_DSFX_STANDARD_DISTORTION
Const BASS_FX_ECHO        = 3 ' GUID_DSFX_STANDARD_ECHO
Const BASS_FX_FLANGER     = 4 ' GUID_DSFX_STANDARD_FLANGER
Const BASS_FX_GARGLE      = 5 ' GUID_DSFX_STANDARD_GARGLE
Const BASS_FX_I3DL2REVERB = 6 ' GUID_DSFX_STANDARD_I3DL2REVERB
Const BASS_FX_PARAMEQ     = 7 ' GUID_DSFX_STANDARD_PARAMEQ
Const BASS_FX_REVERB      = 8 ' GUID_DSFX_WAVES_REVERB

Const BASS_FX_PHASE_NEG_180 = 0
Const BASS_FX_PHASE_NEG_90  = 1
Const BASS_FX_PHASE_ZERO    = 2
Const BASS_FX_PHASE_90      = 3
Const BASS_FX_PHASE_180     = 4

' BASS_ChannelIsActive Return values
Const BASS_ACTIVE_STOPPED = 0
Const BASS_ACTIVE_PLAYING = 1
Const BASS_ACTIVE_STALLED = 2
Const BASS_ACTIVE_PAUSED  = 3

' BASS_ChannelIsSliding Return flags
Const BASS_SLIDE_FREQ = 1
Const BASS_SLIDE_VOL  = 2
Const BASS_SLIDE_PAN  = 4

' BASS_RecordSetInput flags
Const BASS_INPUT_OFF   = $10000
Const BASS_INPUT_ON    = $20000
Const BASS_INPUT_LEVEL = $40000

Const BASS_INPUT_TYPE_MASK    = $ff000000
Const BASS_INPUT_TYPE_UNDEF   = $00000000
Const BASS_INPUT_TYPE_DIGITAL = $01000000
Const BASS_INPUT_TYPE_LINE    = $02000000
Const BASS_INPUT_TYPE_MIC     = $03000000
Const BASS_INPUT_TYPE_SYNTH   = $04000000
Const BASS_INPUT_TYPE_CD      = $05000000
Const BASS_INPUT_TYPE_PHONE   = $06000000
Const BASS_INPUT_TYPE_SPEAKER = $07000000
Const BASS_INPUT_TYPE_WAVE    = $08000000
Const BASS_INPUT_TYPE_AUX     = $09000000
Const BASS_INPUT_TYPE_ANALOG  = $0a000000

' BASS_Set/GetConfig options
Const BASS_CONFIG_BUFFER       = 0
Const BASS_CONFIG_UPDATEPERIOD = 1
Const BASS_CONFIG_MAXVOL       = 3
Const BASS_CONFIG_GVOL_SAMPLE  = 4
Const BASS_CONFIG_GVOL_STREAM  = 5
Const BASS_CONFIG_GVOL_MUSIC   = 6
Const BASS_CONFIG_CURVE_VOL    = 7
Const BASS_CONFIG_CURVE_PAN    = 8
Const BASS_CONFIG_FLOATDSP     = 9
Const BASS_CONFIG_3DALGORITHM  = 10
Const BASS_CONFIG_NET_TIMEOUT  = 11
Const BASS_CONFIG_NET_BUFFER   = 12
Const BASS_CONFIG_PAUSE_NOPLAY = 13
Const BASS_CONFIG_NET_NOPROXY  = 14
Const BASS_CONFIG_NET_PREBUF   = 15

Rem BASS_CD_
Const BASS_CONFIG_CD_FREEOLD   = $10200

' "rwflag" read capability flags
Const BASS_CD_RWFLAG_READCDR       = 1
Const BASS_CD_RWFLAG_READCDRW      = 2
Const BASS_CD_RWFLAG_READCDRW2     = 4
Const BASS_CD_RWFLAG_READDVD       = 8
Const BASS_CD_RWFLAG_READDVDR      = 16
Const BASS_CD_RWFLAG_READDVDRAM    = 32
Const BASS_CD_RWFLAG_READANALOG    = $10000
Const BASS_CD_RWFLAG_READM2F1      = $100000
Const BASS_CD_RWFLAG_READM2F2      = $200000
Const BASS_CD_RWFLAG_READMULTI     = $400000
Const BASS_CD_RWFLAG_READCDDA      = $1000000
Const BASS_CD_RWFLAG_READCDDASIA   = $2000000
Const BASS_CD_RWFLAG_READSUBCHAN   = $4000000
Const BASS_CD_RWFLAG_READSUBCHANDI = $8000000
Const BASS_CD_RWFLAG_READISRC         = $20000000
Const BASS_CD_RWFLAG_READUPC       = $40000000

' additional BASS_CD_StreamCreate/File flags
Const BASS_CD_SUBCHANNEL      = $200
Const BASS_CD_SUBCHANNEL_NOHW = $400

' additional CD sync Type
Const BASS_SYNC_CD_ERROR = 1000

' BASS_CD_Door actions
Const BASS_CD_DOOR_CLOSE  = 0
Const BASS_CD_DOOR_OPEN   = 1
Const BASS_CD_DOOR_LOCK   = 2
Const BASS_CD_DOOR_UNLOCK = 3

' BASS_CD_GetID flags
Const BASS_CDID_UPC      = 1
Const BASS_CDID_CDDB     = 2
Const BASS_CDID_CDDB2    = 3
Const BASS_CDID_TEXT     = 4
Const BASS_CDID_CDPLAYER = 5
Const BASS_CDID_ISRC     = $100 ' + track #

' BASS_CHANNELINFO Type
Const BASS_CTYPE_STREAM_CD = $10200
EndRem

'functions

'A
Global BASS_Apply3D:Int()"Win32"                                                                                                                        = GetProcAddress(DllHandle, "BASS_Apply3D")
'C
Global BASS_ChannelBytes2Seconds:Float(handle:Int, pos:Long)"Win32"                                                                                     = GetProcAddress(DllHandle, "BASS_ChannelBytes2Seconds")
Global BASS_ChannelGet3DAttributes:Int(handle:Int, mode:Int Ptr, min_:Float Ptr, max_:Float Ptr, iangle:Int Ptr, oangle:Int Ptr, outvol:Int Ptr)"Win32" = GetProcAddress(DllHandle, "BASS_ChannelGet3DAttributes")
Global BASS_ChannelGet3DPosition:Int(handle:Int, BASS_3DVECTOR_pos:Byte Ptr, BASS_3DVECTOR_orient:Byte Ptr, BASS_3DVECTOR_vel:Byte Ptr)"Win32"          = GetProcAddress(DllHandle, "BASS_ChannelGet3DPosition")
Global BASS_ChannelGetAttributes:Int(handle:Int, frequency:Int Ptr, volume:Int Ptr, pan:Int Ptr)"Win32"                                                 = GetProcAddress(DllHandle, "BASS_ChannelGetAttributes")
Global BASS_ChannelGetData:Int(handle:Int, buffer:Byte Ptr, length:Int)"Win32"                                                                          = GetProcAddress(DllHandle, "BASS_ChannelGetData")
Global BASS_ChannelGetDevice:Int(handle:Int)"Win32"                                                                                                     = GetProcAddress(DllHandle, "BASS_ChannelGetDevice")
Global BASS_ChannelGetEAXMix:Int(handle:Int, mix:Float Ptr)"Win32"                                                                                      = GetProcAddress(DllHandle, "BASS_ChannelGetEAXMix")
Global BASS_ChannelGetInfo:Int(handle:Int, BASS_CHANNELINFO_info:Byte Ptr)"Win32"                                                                       = GetProcAddress(DllHandle, "BASS_ChannelGetInfo")
Global BASS_ChannelGetLength:Int(handle:Int)"Win32"                                                                                                     = GetProcAddress(DllHandle, "BASS_ChannelGetLength")
Global BASS_ChannelGetLevel:Int(handle:Int)"Win32"                                                                                                      = GetProcAddress(DllHandle, "BASS_ChannelGetLevel")
Global BASS_ChannelGetPosition:Long(handle:Int)"Win32"                                                                                                  = GetProcAddress(DllHandle, "BASS_ChannelGetPosition")
Global BASS_ChannelIsActive:Int(handle:Int)"Win32"                                                                                                      = GetProcAddress(DllHandle, "BASS_ChannelIsActive")
Global BASS_ChannelIsSliding:Int(handle:Int)"Win32"                                                                                                     = GetProcAddress(DllHandle, "BASS_ChannelIsSliding")
Global BASS_ChannelPause:Int(handle:Int)"Win32"                                                                                                         = GetProcAddress(DllHandle, "BASS_ChannelPause")
Global BASS_ChannelPlay:Int(handle:Int, restart:Int)"Win32"                                                                                             = GetProcAddress(DllHandle, "BASS_ChannelPlay")
Global BASS_ChannelPreBuf:Int(handle:Int)"Win32"                                                                                                        = GetProcAddress(DllHandle, "BASS_ChannelPreBuf")
Global BASS_ChannelRemoveDSP:Int(handle:Int, dsp:Int)"Win32"                                                                                            = GetProcAddress(DllHandle, "BASS_ChannelRemoveDSP")
Global BASS_ChannelRemoveFX:Int(handle:Int, fx:Int)"Win32"                                                                                              = GetProcAddress(DllHandle, "BASS_ChannelRemoveFX")
Global BASS_ChannelRemoveLink:Int(handle:Int, chan:Int)"Win32"                                                                                          = GetProcAddress(DllHandle, "BASS_ChannelRemoveLink")
Global BASS_ChannelRemoveSync:Int(handle:Int, sync:Int)"Win32"                                                                                          = GetProcAddress(DllHandle, "BASS_ChannelRemoveSync")
Global BASS_ChannelSeconds2Bytes:Long(handle:Int, pos:Float)"Win32"                                                                                     = GetProcAddress(DllHandle, "BASS_ChannelSeconds2Bytes")
Global BASS_ChannelSet3DAttributes:Int(handle:Int, mode:Int, min_:Float, max_:Float, iangle:Int, oangle:Int, outvol:Int)"Win32"                         = GetProcAddress(DllHandle, "BASS_ChannelSet3DAttributes")
Global BASS_ChannelSet3DPosition:Int(handle:Int, BASS_3DVECTOR_pos:Byte Ptr, BASS_3DVECTOR_orient:Byte Ptr, BASS_3DVECTOR_vel:Byte Ptr)"Win32"          = GetProcAddress(DllHandle, "BASS_ChannelSet3DPosition")
Global BASS_ChannelSetAttributes:Int(handle:Int, frequency:Int, volume:Int, pan:Int)"Win32"                                                             = GetProcAddress(DllHandle, "BASS_ChannelSetAttributes")
Global BASS_ChannelSetDSP:Int(handle:Int, proc:Byte Ptr, user:Int, priority:Int)"Win32"                                                                 = GetProcAddress(DllHandle, "BASS_ChannelSetDSP")
Global BASS_ChannelSetEAXMix:Int(handle:Int, mix:Float)"Win32"                                                                                          = GetProcAddress(DllHandle, "BASS_ChannelSetEAXMix")
Global BASS_ChannelSetFX:Int(handle:Int, type_:Int, priority:Int)"Win32"                                                                                = GetProcAddress(DllHandle, "BASS_ChannelSetFX")
Global BASS_ChannelSetFlags:Int(handle:Int, flags:Int)"Win32"                                                                                           = GetProcAddress(DllHandle, "BASS_ChannelSetFlags")
Global BASS_ChannelSetLink:Int(handle:Int, chan:Int)"Win32"                                                                                             = GetProcAddress(DllHandle, "BASS_ChannelSetLink")
Global BASS_ChannelSetPosition:Int(handle:Int, pos:Long)"Win32"                                                                                         = GetProcAddress(DllHandle, "BASS_ChannelSetPosition")
Global BASS_ChannelSetSync:Int(handle:Int, type_:Int, param:Long, proc:Byte Ptr, user:Int)"Win32"                                                       = GetProcAddress(DllHandle, "BASS_ChannelSetSync")
Global BASS_ChannelSlideAttributes:Int(handle:Int, frequency:Int, volume:Int , pan:Int, time:Int)"Win32"                                                = GetProcAddress(DllHandle, "BASS_ChannelSlideAttributes")
Global BASS_ChannelStop:Int(handle:Int)"Win32"                                                                                                          = GetProcAddress(DllHandle, "BASS_ChannelStop")
'E
Global BASS_ErrorGetCode:Int()"Win32"                                                                                                                   = GetProcAddress(DllHandle, "BASS_ErrorGetCode")
'F
Global BASS_FXGetParameters:Int(handle:Int, par:Byte Ptr)"Win32"                                                                                        = GetProcAddress(DllHandle, "BASS_FXGetParameters")
Global BASS_FXSetParameters:Int(handle:Int, par:Byte Ptr)"Win32"                                                                                        = GetProcAddress(DllHandle, "BASS_FXSetParameters")
Global BASS_Free:Int()"Win32"                                                                                                                           = GetProcAddress(DllHandle, "BASS_Free")
'G
Global BASS_Get3DFactors:Int(dist_f:Float Ptr, roll_f:Float Ptr, dopp_f:Float Ptr)"Win32"                                                               = GetProcAddress(DllHandle, "BASS_Get3DFactors")
Global BASS_Get3DPosition:Int(BASS_3DVECTOR_pos:Byte Ptr, BASS_3DVECTOR_vel:Byte Ptr, BASS_3DVECTOR_front:Byte Ptr, BASS_3DVECTOR_top:Byte Ptr)"Win32"  = GetProcAddress(DllHandle, "BASS_Get3DPosition")
Global BASS_GetCPU:Float()"Win32"                                                                                                                       = GetProcAddress(DllHandle, "BASS_GetCPU")
Global BASS_GetConfig:Int(option:Int)"Win32"                                                                                                            = GetProcAddress(DllHandle, "BASS_GetConfig")
Global BASS_GetDSoundObject:Byte Ptr(obj:Int)"Win32"                                                                                                    = GetProcAddress(DllHandle, "BASS_GetDSoundObject")
Global BASS_GetDevice:Int()"Win32"                                                                                                                      = GetProcAddress(DllHandle, "BASS_GetDevice")
Global BASS_GetDeviceDescription:Byte Ptr(device:Int)"Win32"                                                                                            = GetProcAddress(DllHandle, "BASS_GetDeviceDescription")
Global BASS_GetEAXParameters:Int(env:Int Ptr, vol:Float Ptr, decay:Float Ptr, damp:Float Ptr)"Win32"                                                    = GetProcAddress(DllHandle, "BASS_GetEAXParameters")
Global BASS_GetInfo:Int(BASS_INFO_info:Byte Ptr)"Win32"                                                                                                 = GetProcAddress(DllHandle, "BASS_GetInfo")
Global BASS_GetVersion:Int()"Win32"                                                                                                                     = GetProcAddress(DllHandle, "BASS_GetVersion")
Global BASS_GetVolume:Int()"Win32"                                                                                                                      = GetProcAddress(DllHandle, "BASS_GetVolume")
'I
Global BASS_Init:Int(device:Int, frequency:Int, flags:Int, hwnd:Int, dsguid:Byte Ptr)"Win32"                                                            = GetProcAddress(DllHandle, "BASS_Init")
'M
Global BASS_MusicFree:Int(handle:Int)"Win32"                                                                                                            = GetProcAddress(DllHandle, "BASS_MusicFree")
Global BASS_MusicGetAttribute:Int(handle:Int, attribut:Int)"Win32"                                                                                      = GetProcAddress(DllHandle, "BASS_MusicGetAttribute")
Global BASS_MusicGetName:Byte Ptr(handle:Int)"Win32"                                                                                                    = GetProcAddress(DllHandle, "BASS_MusicGetName")
Global BASS_MusicGetOrderPosition:Int(handle:Int)"Win32"                                                                                                = GetProcAddress(DllHandle, "BASS_MusicGetOrderPosition")
Global BASS_MusicGetOrders:Int(handle:Int)"Win32"                                                                                                       = GetProcAddress(DllHandle, "BASS_MusicGetOrders")
Global BASS_MusicLoad:Int(mem:Int, file:Byte Ptr, offset:Int, length:Int, flags:Int, frequency:Int)"Win32"                                              = GetProcAddress(DllHandle, "BASS_MusicLoad")
Global BASS_MusicSetAttribute:Int(handle:Int, attribut:Int, value:Int)"Win32"                                                                           = GetProcAddress(DllHandle, "BASS_MusicSetAttribute")
'P
Global BASS_Pause:Int()"Win32"                                                                                                                          = GetProcAddress(DllHandle, "BASS_Pause")
Global BASS_PluginFree:Int(handle:Int)"Win32"                                                                                                           = GetProcAddress(DllHandle, "BASS_PluginFree")
Global BASS_PluginLoad:Int(file:Byte Ptr)"Win32"                                                                                                        = GetProcAddress(DllHandle, "BASS_PluginLoad")
'R
Global BASS_RecordFree:Int()"Win32"                                                                                                                     = GetProcAddress(DllHandle, "BASS_RecordFree")
Global BASS_RecordGetDevice:Int()"Win32"                                                                                                                = GetProcAddress(DllHandle, "BASS_RecordGetDevice")
Global BASS_RecordGetDeviceDescription:Byte Ptr(device:Int)"Win32"                                                                                      = GetProcAddress(DllHandle, "BASS_RecordGetDeviceDescription")
Global BASS_RecordGetInfo:Int(BASS_RECORDINFO_info:Byte Ptr)"Win32"                                                                                     = GetProcAddress(DllHandle, "BASS_RecordGetInfo")
Global BASS_RecordGetInput:Int(input_:Int)"Win32"                                                                                                       = GetProcAddress(DllHandle, "BASS_RecordGetInput")
Global BASS_RecordGetInputName:Byte Ptr(input_:Int)"Win32"                                                                                              = GetProcAddress(DllHandle, "BASS_RecordGetInputName")
Global BASS_RecordInit:Int(device:Int)"Win32"                                                                                                           = GetProcAddress(DllHandle, "BASS_RecordInit")
Global BASS_RecordSetDevice:Int(device:Int)"Win32"                                                                                                      = GetProcAddress(DllHandle, "BASS_RecordSetDevice")
Global BASS_RecordSetInput:Int(input_:Int, setting:Int)"Win32"                                                                                          = GetProcAddress(DllHandle, "BASS_RecordSetInput")
Global BASS_RecordStart:Int(frequency:Int, chans:Int, flags:Int, proc:Byte Ptr, user:Int)"Win32"                                                        = GetProcAddress(DllHandle, "BASS_RecordStart")
'S
Global BASS_SampleCreate:Byte Ptr(length:Int, frequency:Int, max_:Int, flags)"Win32"                                                                    = GetProcAddress(DllHandle, "BASS_SampleCreate")
Global BASS_SampleCreateDone:Int()"Win32"                                                                                                               = GetProcAddress(DllHandle, "BASS_SampleCreateDone")
Global BASS_SampleFree:Int(handle:Int)"Win32"                                                                                                           = GetProcAddress(DllHandle, "BASS_SampleFree")
Global BASS_SampleGetChannel:Int(handle:Int, onlynew:Int)"Win32"                                                                                        = GetProcAddress(DllHandle, "BASS_SampleGetChannel")
Global BASS_SampleGetInfo:Int(handle:Int, BASS_SAMPLE_info:Byte Ptr)"Win32"                                                                             = GetProcAddress(DllHandle, "BASS_SampleGetInfo")
Global BASS_SampleLoad:Int(mem:Int, file:Byte Ptr, offset:Int, length:Int, max_:Int, flags:Int)"Win32"                                                  = GetProcAddress(DllHandle, "BASS_SampleLoad")
Global BASS_SampleSetInfo:Int(handle:Int, BASS_SAMPLE_info:Byte Ptr)"Win32"                                                                             = GetProcAddress(DllHandle, "BASS_SampleSetInfo")
Global BASS_SampleStop:Int(handle:Int)"Win32"                                                                                                           = GetProcAddress(DllHandle, "BASS_SampleStop")
Global BASS_Set3DFactors:Int(dist_f:Float, roll_f:Float, dopp_f:Float)"Win32"                                                                           = GetProcAddress(DllHandle, "BASS_Set3DFactors")
Global BASS_Set3DPosition:Int(BASS_3DVECTOR_pos:Byte Ptr, BASS_3DVECTOR_vel:Byte Ptr, BASS_3DVECTOR_front:Byte Ptr, BASS_3DVECTOR_top:Byte Ptr)"Win32"  = GetProcAddress(DllHandle, "BASS_Set3DPosition")
Global BASS_SetConfig:Int(option:Int, value:Int)"Win32"                                                                                                 = GetProcAddress(DllHandle, "BASS_SetConfig")
Global BASS_SetDevice:Int(device:Int)"Win32"                                                                                                            = GetProcAddress(DllHandle, "BASS_SetDevice")
Global BASS_SetEAXParameters:Int(env:Int, vol:Float, decay:Float, damp:Float)"Win32"                                                                    = GetProcAddress(DllHandle, "BASS_SetEAXParameters")
Global BASS_SetVolume:Int(volume:Int)"Win32"                                                                                                            = GetProcAddress(DllHandle, "BASS_SetVolume")
Global BASS_Start:Int()"Win32"                                                                                                                          = GetProcAddress(DllHandle, "BASS_Start")
Global BASS_Stop:Int()"Win32"                                                                                                                           = GetProcAddress(DllHandle, "BASS_Stop")
Global BASS_StreamCreate:Int(frequency:Int, chans:Int, flags:Int, proc:Byte Ptr, user:Int)"Win32"                                                       = GetProcAddress(DllHandle, "BASS_StreamCreate")
Global BASS_StreamCreateFile:Int(mem:Int, file:Byte Ptr, offset:Int, length:Int, flags:Int)"Win32"                                                      = GetProcAddress(DllHandle, "BASS_StreamCreateFile")
Global BASS_StreamCreateFileUser:Int(buffered:Int, flags:Int, proc:Byte Ptr, user:Int)"Win32"                                                           = GetProcAddress(DllHandle, "BASS_StreamCreateFileUser")
Global BASS_StreamCreateURL:Int(url:String, offset:Int, flags:Int, proc:Byte Ptr, user:Int)"Win32"                                                      = GetProcAddress(DllHandle, "BASS_StreamCreateURL")
Global BASS_StreamFree:Int(handle:Int)"Win32"                                                                                                           = GetProcAddress(DllHandle, "BASS_StreamFree")
Global BASS_StreamGetFilePosition:Int(handle:Int, mode:Int)"Win32"                                                                                      = GetProcAddress(DllHandle, "BASS_StreamGetFilePosition")
Global BASS_StreamGetTags:Byte Ptr(handle:Int, tags:Int)"Win32"                                                                                         = GetProcAddress(DllHandle, "BASS_StreamGetTags")
'U
Global BASS_Update:Int()"Win32"                                                                                                                         = GetProcAddress(DllHandle, "BASS_Update")

Rem
'CD_
Global BASS_CD_Analog_GetPosition:Int(drive:Int)"Win32"                                                                                                 = GetProcAddress(DllHandle, "BASS_CD_Analog_GetPosition")
Global BASS_CD_Analog_IsActive:Int(drive:Int)"Win32"                                                                                                    = GetProcAddress(DllHandle, "BASS_CD_Analog_IsActive")
Global BASS_CD_Analog_Play:Int(drive:Int, track:Int, pos:Int)"Win32"                                                                                    = GetProcAddress(DllHandle, "BASS_CD_Analog_Play")
Global BASS_CD_Analog_PlayFile:Int(file:Byte Ptr, pos:Int)"Win32"                                                                                       = GetProcAddress(DllHandle, "BASS_CD_Analog_PlayFile")
Global BASS_CD_Analog_Stop:Int(drive:Int)"Win32"                                                                                                        = GetProcAddress(DllHandle, "BASS_CD_Analog_Stop")
Global BASS_CD_Door:Int(drive:Int, action:Int)"Win32"                                                                                                   = GetProcAddress(DllHandle, "BASS_CD_Door")
Global BASS_CD_DoorIsLocked:Int(drive:Int)"Win32"                                                                                                       = GetProcAddress(DllHandle, "BASS_CD_DoorIsLocked")
Global BASS_CD_DoorIsOpen:Int(drive:Int)"Win32"                                                                                                         = GetProcAddress(DllHandle, "BASS_CD_DoorIsOpen")
Global BASS_CD_GetDriveDescription:Byte Ptr(drive:Int)"Win32"                                                                                           = GetProcAddress(DllHandle, "BASS_CD_GetDriveDescription")
Global BASS_CD_GetDriveLetter:Int(drive:Int)"Win32"                                                                                                     = GetProcAddress(DllHandle, "BASS_CD_GetDriveLetter")
Global BASS_CD_GetID:Byte Ptr(drive:Int, id:Int)"Win32"                                                                                                 = GetProcAddress(DllHandle, "BASS_CD_GetID")
Global BASS_CD_GetInfo:Int(drive:Int, BASS_CD_info:Byte Ptr)"Win32"                                                                                     = GetProcAddress(DllHandle, "BASS_CD_GetInfo")
Global BASS_CD_GetTrackLength:Int(drive:Int, track:Int)"Win32"                                                                                          = GetProcAddress(DllHandle, "BASS_CD_GetTrackLength")
Global BASS_CD_GetTracks:Int(drive:Int)"Win32"                                                                                                          = GetProcAddress(DllHandle, "BASS_CD_GetTracks")
Global BASS_CD_IsReady:Int(drive:Int)"Win32"                                                                                                            = GetProcAddress(DllHandle, "BASS_CD_IsReady")
Global BASS_CD_Release:Int(drive:Int)"Win32"                                                                                                            = GetProcAddress(DllHandle, "BASS_CD_Release")
Global BASS_CD_StreamCreate:Int(drive:Int, track:Int, flags:Int)"Win32"                                                                                 = GetProcAddress(DllHandle, "BASS_CD_StreamCreate")
Global BASS_CD_StreamCreateFile:Int(file:Byte Ptr, flags:Int)"Win32"                                                                                    = GetProcAddress(DllHandle, "BASS_CD_StreamCreateFile")
Global BASS_CD_StreamGetTrack:Int(handle:Int)"Win32"                                                                                                    = GetProcAddress(DllHandle, "BASS_CD_StreamGetTrack")
Global BASS_CD_StreamSetTrack:Int(handle:Int, track:Int)"Win32"                                                                                         = GetProcAddress(DllHandle, "BASS_CD_StreamSetTrack")
EndRem


Function LoWord:Short(Value:Int)
   Return Value & $0000FFFF
End Function

Function HiWord:Short(Value:Int)
   Return (Value & $FFFF0000) Shr 16
End Function


das auskommentierte is für die bass_cd.dll version 2.2
gibts auch hier: http://www.un4seen.com/

Garfield

BeitragMo, Dez 05, 2005 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe den Player von Suco-X (1. Beispiel) mit einer einfachen GUI Version ausgestattet und ein Levelmeter integriert.
Benötigt werden im gleichen Verzeichnis die bass.bmx (von Suco-X) und Levelmeter.bmx

Global LMSize_X = 40 ' hier kann die Breite der Anzeige variiert werden
Global LMSize_Y = 680 ' hier kann die Höhe der Anzeige variiert werden

Was jetzt fehlt, ist eine Integration der LevelWerte um den Pegel etwas ruhiger werden zu lassen. Die Abstände der Pegelmessung in der Zeit zu vergrößern ist leider nicht der richtige Weg, da gehen Pegelspitzen verloren bzw. bekommt man dann erst recht Sprünge.

Außerdem habe ich die Rückfallzeit des Meters bei Signal = 0 noch nicht hinbekommen

Player:
BlitzBasic: [AUSKLAPPEN]

'modifizierter BassDll Audioplayer von Suco-X
' Levelmeter von Garfield

Import \"bass.bmx\"
Import \"Levelmeter.bmx\"

'Strict


Global appwindow:TGadget = CreateWindow(\"window\",0,0,1024,768)

Global button_play:tgadget = CreateButton(\"Play\",50,0,50,30,appwindow,1)
Global button_ende:tgadget = CreateButton(\"Ende\",570,0,50,30,appwindow,1)

Global Musiktitel:TGAdget = CreateLabel(\"Titelname\",200,60,600,20,appwindow)


' Werte für die Pegelanzeige und gleichzeitig für das CanvaS
Global LMSize_X = 40 ' hier kann die Breite der Anzeige variiert werden
Global LMSize_Y = 680 ' hier kann die Höhe der Anzeige variiert werden


' falls das Canvas größer ist als die Anzeige oder im Vollbildmodus kann die Position der Anzeige verändert werden
Global LMPos_X = 0
Global LMPos_Y = 0

' erzeugen des Grafikbereiches
Global levelmeter:tgadget = CreateCanvas(950,5,LMSize_X,LMSize_Y,appwindow)

Global grafik = CanvasGraphics(levelmeter)

SetGraphics grafik
' erzeugen des Levelmeter -Types mit der im Type integrierten Funktion Create
Global LMeter:Tlevelmeter = Tlevelmeter.Create(LMSize_X,LMSize_Y,LMPos_X,LMPos_Y,10)
Cls
Flip

If Not BASS_Init(1, 44100, 0, 0, Null)
Notify(\"Fehler bei der Initialisierung\")
End
EndIf

BASS_start()

Global filter$=\"Audio Files:wav,mp3\"
Global filename$=RequestFile( \"Select graphic file to open\",filter$ )
SetGadgetText Musiktitel,filename$
Global MusicStream:Int = BASS_StreamCreateFile(False,filename$.toCString(),0,0,0)

Print \"ErrorCode \"+ BASS_ErrorGetCode()
' Hauptprogramm
time1 = MilliSecs()
While Not KeyDown(KEY_ESCAPE)

Select WaitEvent ()

Case EVENT_GADGETACTION ' Button

ED:Float = EventData()
Select EventSource ()
Case button_play
Play()
Case button_ende
End
End Select
End Select

levelmeterdraw()

Wend

End

'-------------------------------------------------------------------------
Function Play()
BASS_ChannelPlay(MusicStream,0) ' ohne Wiederholung

End Function
'-------------------------------------------------------------------------
End

'-------------------------------------------------------------------------
Function levelmeterdraw()
Level:Int = BASS_ChannelGetLevel(MusicStream)
LeftLevel:Float = LoWord(Level)
RightLevel:Float = HiWord(Level)

If BASS_ChannelIsActive(MusicStream)<> 1 'wenn nichts spielt dann Levels 0
LeftLevel = 0
RightLEvel = 0
End If

LMeter.Draw( LeftLevel,RightLevel) ' Aufruf der Methode Draw(mit Levels)
RedrawGadget levelmeter
Flip
Cls
End Function


Datei Levelmeter.bmx:
BlitzBasic: [AUSKLAPPEN]

Rem
Levelmeter Erweiterung für beliebige Anwendungen
von Garfield - 2005
End Rem

Type TLevelmeter

Field Size_X:Int
Field Size_Y:Int
Field Pos_X:Int
Field Pos_Y:Int
Field Grafik:TImage ' erzeugte \"LED\"-Grafik
Field MinWert:Int
Field MaxWert:Int
Field Integerzeit:Float ' für die Rücklaufzeit
Field LeftLevel:Float
Field RightLevel:Float

'--------------------------------------------------------------------------------
' Aufruf zum Zeichnen mit Übergabe der Level Links und Rechts
' bisher nur für 16 Bit Samples
Method Draw(llevel:Float,rlevel:Float)

If llevel > 0
LeftLevel = llevel*Size_Y/32768 ' Verhältnis zu 100% der Größe Y
Else
LeftLevel= LeftLevel - (1/Integerzeit) ' Reziprok der Rücklaufzeit wenn kein Signal
End If
If rlevel > 0
RightLevel = rlevel*Size_Y/32768 ' Verhältnis zu 100% der Größe Y
Else
RightLevel= RightLevel - (1/Integerzeit) ' Reziprok der Rücklaufzeit wenn kein Signal
End If


SetColor 255,255,255 ' wegen DrawImage sonst sieht man nichts
DrawImage ( Grafik,Pos_X,Pos_Y)
SetColor 0,0,0
DrawRect (Pos_X,Pos_Y,Size_x/2,Size_Y-LeftLevel)
DrawRect (Pos_X+Size_X/2,Pos_Y,Size_x/2,Size_Y-RightLevel)

End Method
'---------------------------------------------------------------------------------
'---------------------------------------------------------------------------------
' Erzeugen des Levelmeter Objects
' es müssen folgende Werte übergeben werden: Breite SizeX , Höhe SizeY , Position X und Y
' sowie eine Konstante für die Rücklaufzeit der Levelanzeige bei keinem Signal
Function Create:TLevelmeter(SizeX:Int,SizeY:Int,PosX:Int,PosY:Int,Integralzeit:Int)
Local NewMeter:TLevelmeter = New TLevelmeter

NewMeter.Size_X = SizeX
NewMeter.Size_Y = SizeY
NewMeter.Pos_X = PosX
NewMeter.Pos_Y = PosY
NewMeter.Integerzeit = Integralzeit

Cls
SetColor 0,0,0
DrawRect(0,0,NewMeter.Size_X,NewMeter.Size_Y)'Hintergrundbild erzeugen

Local Menge = NewMeter.Size_Y
Local RoteMenge = Menge*5/100
Local GelbeMenge = Menge*10/100
Local StartRot = 0
Local StartGelb = StartRot + RoteMenge+4
Local StartGruen = StartGelb + GelbeMenge+4

For Local y = StartRot To StartGelb Step 3' rote LED´s erzeugen
SetColor 255,0,0
DrawRect (0,y,(NewMeter.Size_X/2)-1,2)
DrawRect (NewMeter.Size_X/2,y,(NewMeter.Size_X/2)-1,2)
Next

For y = StartGelb To StartGruen Step 3' gelbe LED´s erzeugen
SetColor 255,255,0
DrawRect (0,y,(NewMeter.Size_X/2)-1,2)
DrawRect (NewMeter.Size_X/2,y,(NewMeter.Size_X/2)-1,2)
Next

For y = StartGruen To NewMeter.Size_Y Step 3' grüne LED´s erzeugen
SetColor 0,255,0
DrawRect (0,y,(NewMeter.Size_X/2)-1,2)
DrawRect (NewMeter.Size_X/2,y,(NewMeter.Size_X/2)-1,2)
Next

Local image:Timage =CreateImage(NewMeter.Size_X,NewMeter.Size_Y,1,DYNAMICIMAGE|MASKEDIMAGE)
GrabImage image,0,0
NewMeter.Grafik = Image
Cls
Return NewMeter ' wegen Objekt
End Function
End Type
BlitzPlus|BMax|BMax-GUI -- Sony VAIO Win7 * MacBookPro Sierra

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group