📄 internet_music_bass.bas
字号:
Declare Function BASS_FXGetParameters Lib "bass.dll" (ByVal HANDLE As Long, ByRef par As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByRef Destination As Any, ByRef Source As Any, ByVal length As Long)
Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long
Public Function BASS_SPEAKER_N(ByVal n As Long) As Long
BASS_SPEAKER_N = n * (2 ^ 24)
End Function
Public Function MAKEMUSICPOS(ByVal order As Long, ByVal row As Long) As Long
MAKEMUSICPOS = &H80000000 Or MakeLong(order, row)
End Function
'*******************************************
' 32-bit wrappers for 64-bit BASS functions
'*******************************************
Function BASS_ChannelBytes2Seconds(ByVal HANDLE As Long, ByVal pos As Long) As Single
BASS_ChannelBytes2Seconds = BASS_ChannelBytes2Seconds64(HANDLE, pos, 0)
End Function
Function BASS_ChannelSetPosition(ByVal HANDLE As Long, ByVal pos As Long) As Long
BASS_ChannelSetPosition = BASS_ChannelSetPosition64(HANDLE, pos, 0)
End Function
Function BASS_ChannelSetSync(ByVal HANDLE As Long, ByVal atype As Long, ByVal param As Long, ByVal proc As Long, ByVal user As Long) As Long
BASS_ChannelSetSync = BASS_ChannelSetSync64(HANDLE, atype, param, 0, proc, user)
End Function
'****************************
' BASS_PluginGetInfo wrappers
'****************************
Function BASS_PluginGetInfo(ByVal HANDLE As Long) As BASS_PLUGININFO
Dim pinfo As BASS_PLUGININFO, plug As Long
plug = BASS_PluginGetInfo_(HANDLE)
If plug Then
Call CopyMemory(pinfo, ByVal plug, LenB(pinfo))
End If
BASS_PluginGetInfo = pinfo
End Function
Function BASS_PluginGetInfoFormat(ByVal HANDLE As Long, ByVal index As Long) As BASS_PLUGINFORM
Dim pform As BASS_PLUGINFORM, plug As Long
plug = BASS_PluginGetInfo(HANDLE).formats
If plug Then
plug = plug + (index * LenB(pform))
Call CopyMemory(pform, ByVal plug, LenB(pform))
End If
BASS_PluginGetInfoFormat = pform
End Function
'*******************
' callback functions
'*******************
Function STREAMPROC(ByVal HANDLE As Long, ByVal Buffer As Long, ByVal length As Long, ByVal user As Long) As Long
'CALLBACK FUNCTION !!!
' 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 Function
Function STREAMFILEPROC(ByVal action As Long, ByVal param1 As Long, ByVal param2 As Long, ByVal user As Long) As Long
'CALLBACK FUNCTION !!!
' 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 Function
Sub DOWNLOADPROC(ByVal Buffer As Long, ByVal length As Long, ByVal user As Long)
'CALLBACK FUNCTION !!!
' 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 given when calling BASS_StreamCreateURL
End Sub
Sub SYNCPROC(ByVal HANDLE As Long, ByVal channel As Long, ByVal data As Long, ByVal user As Long)
'CALLBACK FUNCTION !!!
'Similarly in here, write what to do when sync function
'is called, i.e screen flash etc.
' NOTE: a sync callback function should be very quick as other
' syncs cannot be processed until it has finished.
' 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 Sub
Sub DSPPROC(ByVal HANDLE As Long, ByVal channel As Long, ByVal Buffer As Long, ByVal length As Long, ByVal user As Long)
'CALLBACK FUNCTION !!!
' VB doesn't support pointers, so you should copy the buffer into an array,
' process it, and then copy it back into the buffer.
' 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 Sub
Function RECORDPROC(ByVal HANDLE As Long, ByVal Buffer As Long, ByVal length As Long, ByVal user As Long) As Long
'CALLBACK FUNCTION !!!
' Recording callback function.
' handle : The recording handle
' buffer : Buffer containing the recorded samples
' length : Number of bytes
' user : The 'user' parameter value given when calling BASS_RecordStart
' RETURN : BASSTRUE = continue recording, BASSFALSE = stop
End Function
Function BASS_GetDeviceDescriptionString(ByVal device As Long) As String
Dim pstring As Long
Dim sstring As String
On Error Resume Next
pstring = BASS_GetDeviceDescription(device)
If pstring Then
sstring = VBStrFromAnsiPtr(pstring)
End If
BASS_GetDeviceDescriptionString = sstring
End Function
Function BASS_SetEAXPreset(Preset) As Long
' This function is a workaround, because VB doesn't support multiple comma seperated
' paramaters for each Global Const, simply pass the EAX_ENVIRONMENT_xxx value to this function
' instead of BASS_SetEAXParameters as you would do in C++
Select Case Preset
Case EAX_ENVIRONMENT_GENERIC
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_GENERIC, 0.5, 1.493, 0.5)
Case EAX_ENVIRONMENT_PADDEDCELL
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_PADDEDCELL, 0.25, 0.1, 0)
Case EAX_ENVIRONMENT_ROOM
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_ROOM, 0.417, 0.4, 0.666)
Case EAX_ENVIRONMENT_BATHROOM
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_BATHROOM, 0.653, 1.499, 0.166)
Case EAX_ENVIRONMENT_LIVINGROOM
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_LIVINGROOM, 0.208, 0.478, 0)
Case EAX_ENVIRONMENT_STONEROOM
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_STONEROOM, 0.5, 2.309, 0.888)
Case EAX_ENVIRONMENT_AUDITORIUM
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_AUDITORIUM, 0.403, 4.279, 0.5)
Case EAX_ENVIRONMENT_CONCERTHALL
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_CONCERTHALL, 0.5, 3.961, 0.5)
Case EAX_ENVIRONMENT_CAVE
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_CAVE, 0.5, 2.886, 1.304)
Case EAX_ENVIRONMENT_ARENA
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_ARENA, 0.361, 7.284, 0.332)
Case EAX_ENVIRONMENT_HANGAR
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_HANGAR, 0.5, 10, 0.3)
Case EAX_ENVIRONMENT_CARPETEDHALLWAY
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_CARPETEDHALLWAY, 0.153, 0.259, 2)
Case EAX_ENVIRONMENT_HALLWAY
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_HALLWAY, 0.361, 1.493, 0)
Case EAX_ENVIRONMENT_STONECORRIDOR
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_STONECORRIDOR, 0.444, 2.697, 0.638)
Case EAX_ENVIRONMENT_ALLEY
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_ALLEY, 0.25, 1.752, 0.776)
Case EAX_ENVIRONMENT_FOREST
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_FOREST, 0.111, 3.145, 0.472)
Case EAX_ENVIRONMENT_CITY
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_CITY, 0.111, 2.767, 0.224)
Case EAX_ENVIRONMENT_MOUNTAINS
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_MOUNTAINS, 0.194, 7.841, 0.472)
Case EAX_ENVIRONMENT_QUARRY
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_QUARRY, 1, 1.499, 0.5)
Case EAX_ENVIRONMENT_PLAIN
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_PLAIN, 0.097, 2.767, 0.224)
Case EAX_ENVIRONMENT_PARKINGLOT
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_PARKINGLOT, 0.208, 1.652, 1.5)
Case EAX_ENVIRONMENT_SEWERPIPE
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_SEWERPIPE, 0.652, 2.886, 0.25)
Case EAX_ENVIRONMENT_UNDERWATER
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_UNDERWATER, 1, 1.499, 0)
Case EAX_ENVIRONMENT_DRUGGED
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_DRUGGED, 0.875, 8.392, 1.388)
Case EAX_ENVIRONMENT_DIZZY
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_DIZZY, 0.139, 17.234, 0.666)
Case EAX_ENVIRONMENT_PSYCHOTIC
BASS_SetEAXPreset = BASS_SetEAXParameters(EAX_ENVIRONMENT_PSYCHOTIC, 0.486, 7.563, 0.806)
End Select
End Function
Public Function HiWord(lParam As Long) As Long
' This is the HIWORD of the lParam:
HiWord = lParam \ &H10000 And &HFFFF&
End Function
Public Function LoWord(lParam As Long) As Long
' This is the LOWORD of the lParam:
LoWord = lParam And &HFFFF&
End Function
Function MakeLong(LoWord As Long, HiWord As Long) As Long
'Replacement for the c++ Function MAKELONG
MakeLong = (LoWord And &HFFFF&) Or (HiWord * &H10000)
End Function
Public Function VBStrFromAnsiPtr(ByVal lpStr As Long) As String
Dim bStr() As Byte
Dim cChars As Long
On Error Resume Next
' Get the number of characters in the buffer
cChars = lstrlen(lpStr)
' Resize the byte array
ReDim bStr(0 To cChars - 1) As Byte
' Grab the ANSI buffer
Call CopyMemory(bStr(0), ByVal lpStr, cChars)
' Now convert to a VB Unicode string
VBStrFromAnsiPtr = StrConv(bStr, vbUnicode)
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -