Remstart ------------------------------------------------------------------------- Author: Volker Stepprath, Testaware Project: Bass DLL System using bass.dll Version: 1.00 Language: DarkBASIC Professional v1.058 Description: Play/Volume/Done/Stop MOD,S3M,IT,XM,MTM,UMX,MO3,MP3,WAV... Date: 01. October 2005 / 23:15:08 Homepage: http://home.arcor.de/Testaware ------------------------------------------------------------------------- Hint 1: I used constants for better codestructure Hint 2: Use functions as include in your own sources Hint 3: See BASS.dll manual for more details ------------------------------------------------------------------------- Remend #CONSTANT BASS = 1 #CONSTANT M_MOD = 1 #CONSTANT BASS_FILEPOS_DECODE = 0x0 #CONSTANT BASS_FILEPOS_END = 0x2 #CONSTANT BASS_SAMPLE_LOOP = 0x4 #CONSTANT BASS_MUSIC_RAMPS = 0x400 TYPE strucMOD Ptr AS DWORD : Rem * Pointer to Module Vol AS WORD : Rem * Volume for playback (0-100)% Max AS DWORD : Rem * Maximal Patterns/Bytes to playback Typ AS BYTE : Rem * Module = 1 ENDTYPE MODULE AS strucMOD Module$ = "Music.mo3" : `* Enter here your own song MODULE.Vol = 100 : `* Set the output volumelevel bass_Init() bass_Play( Module$ ) set text opaque print "Playing: ";right$(Module$,20) print "Volume : ";MODULE.Vol repeat set cursor 0,28 print "Done : ";bass_Done();"% " until inkey$()<>"" bass_Stop() bass_Close() FUNCTION bass_Init if dll exist(BASS) = 0 load dll "BASS.dll",BASS endif ENDFUNCTION FUNCTION bass_Close if dll exist(BASS) bass_Stop() delete dll BASS endif ENDFUNCTION FUNCTION bass_Play( Module$ ) Remstart /**************************************************************************** * * Function: Play ( Module$ ) * * Description: Load & play given module * * Input: Path + Name of module * * Returns: TRUE if successful, FALSE if not * \***************************************************************************** \Remend if dll exist(BASS) If MODULE.Ptr Call dll BASS, "BASS_ChannelStop", MODULE.Ptr If MODULE.Typ = M_MOD Call dll BASS, "BASS_MusicFree", MODULE.Ptr Else Call dll BASS, "BASS_SampleFree", MODULE.Ptr EndIf Call dll BASS, "BASS_Free" EndIf MODULE.Ptr = 0 MODULE.Typ = 0 If call dll (BASS, "BASS_Init", 1, 44100, 0, 0, 0) MODULE.Ptr = call dll (BASS, "BASS_MusicLoad", 0, Module$, 0, 0, BASS_MUSIC_RAMPS||BASS_SAMPLE_LOOP, 0) If MODULE.Ptr MODULE.Typ = M_MOD Else MODULE.Ptr = call dll (BASS, "BASS_StreamCreateFile", 0, Module$, 0, 0, BASS_SAMPLE_LOOP) EndIf If MODULE.Ptr If MODULE.Typ = M_MOD MODULE.Max = call dll (BASS, "BASS_MusicGetLength", MODULE.Ptr, 0) Else MODULE.Max = call dll (BASS, "BASS_StreamGetFilePosition", MODULE.Ptr, BASS_FILEPOS_END) EndIf call dll BASS, "BASS_SetVolume", MODULE.Vol param = call dll (BASS, "BASS_ChannelPlay", MODULE.Ptr, 1) Else param = 0 EndIf EndIf endif ENDFUNCTION param FUNCTION bass_Stop Remstart /**************************************************************************** * * Function: Stop * * Description: Stops current module playback * * Input: ./. * * Returns: ./. * \***************************************************************************** \Remend If MODULE.Ptr call dll BASS, "BASS_ChannelStop", MODULE.Ptr If MODULE.Typ = M_MOD call dll BASS, "BASS_MusicFree", MODULE.Ptr Else call dll BASS, "BASS_StreamFree", MODULE.Ptr EndIf call dll BASS, "BASS_Free" EndIf MODULE.Ptr = 0 MODULE.Typ = 0 MODULE.Max = 0 ENDFUNCTION FUNCTION bass_Done Remstart /**************************************************************************** * * Function: Done * * Description: Gets the module playback position * * Input: ./. * * Returns: Position of current playing module in %percent * \***************************************************************************** \Remend If MODULE.Ptr If MODULE.Typ = M_MOD param = call dll(BASS, "BASS_ChannelGetPosition", MODULE.Ptr) hW = (param && 0x0000FFFF) lW = (param && 0xFFFF0000) >> 16 a# = ( 100.0 / (MODULE.Max * 64) ) * ( hW * 64 + lW ) Else param = call dll(BASS, "BASS_StreamGetFilePosition", MODULE.Ptr, BASS_FILEPOS_DECODE) a# = ( 100.0 / MODULE.Max ) * param EndIf param = Int(a#) EndIf ENDFUNCTION param FUNCTION bass_Volume( Volume ) Remstart /**************************************************************************** * * Function: Volume ( Volume ) * * Description: Sets module playback volume in percent * * Input: Unsigned new volume ( 0 - 100 ) * * Returns: ./. * \***************************************************************************** \Remend If MODULE.Ptr If Volume < 0 : Volume = 0 : EndIf If Volume > 100 : Volume = 100 : EndIf MODULE.Vol = Volume Call dll BASS, "BASS_SetVolume", MODULE.Vol EndIf ENDFUNCTION