⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmplugins.frm

📁 bass player system api c++
💻 FRM
字号:
VERSION 5.00
Object = "{F9043C88-F6F2-101A-A3C9-08002B2F49FB}#1.2#0"; "comdlg32.ocx"
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "mscomctl.ocx"
Begin VB.Form frmPlugins 
   BorderStyle     =   3  'Fixed Dialog
   Caption         =   "BASS plugin test"
   ClientHeight    =   3105
   ClientLeft      =   45
   ClientTop       =   435
   ClientWidth     =   4560
   LinkTopic       =   "Form1"
   MaxButton       =   0   'False
   MinButton       =   0   'False
   ScaleHeight     =   3105
   ScaleWidth      =   4560
   StartUpPosition =   2  'CenterScreen
   Begin VB.Timer tmrPlugins 
      Interval        =   500
      Left            =   0
      Top             =   2400
   End
   Begin MSComctlLib.Slider sldPosition 
      Height          =   435
      Left            =   360
      TabIndex        =   1
      Top             =   2640
      Width           =   3855
      _ExtentX        =   6800
      _ExtentY        =   767
      _Version        =   393216
      TickStyle       =   3
      TickFrequency   =   0
   End
   Begin VB.Frame framePlugins 
      Caption         =   " Loaded plugins "
      Height          =   1455
      Left            =   120
      TabIndex        =   2
      Top             =   120
      Width           =   4335
      Begin VB.ListBox lstPlugins 
         Height          =   1035
         Left            =   120
         TabIndex        =   3
         TabStop         =   0   'False
         Top             =   240
         Width           =   4095
      End
   End
   Begin VB.CommandButton btnOpen 
      Caption         =   "click here to open a file..."
      Height          =   375
      Left            =   120
      TabIndex        =   0
      Top             =   1680
      Width           =   4335
   End
   Begin MSComDlg.CommonDialog cmdOpenFile 
      Left            =   4080
      Top             =   2400
      _ExtentX        =   847
      _ExtentY        =   847
      _Version        =   393216
   End
   Begin VB.Label lblInfo 
      Alignment       =   2  'Center
      Height          =   435
      Left            =   120
      TabIndex        =   4
      Top             =   2160
      Width           =   4320
   End
End
Attribute VB_Name = "frmPlugins"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
'////////////////////////////////////////////////////////////////////////////////
' frmPlugins.frm - Copyright (c) 2006-2007 (: JOBnik! :) [Arthur Aminov, ISRAEL]
'                                                        [http://www.jobnik.org]
'                                                        [  jobnik@jobnik.org  ]
'
' BASS plugin test
' Originally translated from - plugins.c - Example of Ian Luck
'////////////////////////////////////////////////////////////////////////////////

Option Explicit

Dim chan As Long    ' the channel
Dim filter As String

' display error messages
Sub Error_(ByVal mes As String)
    Call MsgBox(mes & vbCrLf & vbCrLf & "(error code: " & BASS_ErrorGetCode & ")", vbExclamation, "Error!")
End Sub

' translate a CTYPE value to text
Public Function GetCTypeString(ByVal ctype As Long, ByVal plugin As Long) As String
    If (plugin) Then ' using a plugin
        Dim pinfo As BASS_PLUGININFO, a As Long

        pinfo = BASS_PluginGetInfo(plugin)  ' get plugin info

        For a = 0 To pinfo.formatc - 1
            If (BASS_PluginGetInfoFormat(plugin, a).ctype = ctype) Then   ' found a "ctype" match...
                GetCTypeString = VBStrFromAnsiPtr(BASS_PluginGetInfoFormat(plugin, a).name)  ' return it's name
                Exit Function
            End If
        Next a
    End If

    ' check built-in stream formats...
    Select Case (ctype)
        Case (BASS_CTYPE_STREAM_OGG):   GetCTypeString = "Ogg Vorbis"
        Case (BASS_CTYPE_STREAM_MP1): GetCTypeString = "MPEG layer 1"
        Case (BASS_CTYPE_STREAM_MP2): GetCTypeString = "MPEG layer 2"
        Case (BASS_CTYPE_STREAM_MP3): GetCTypeString = "MPEG layer 3"
        Case (BASS_CTYPE_STREAM_AIFF): GetCTypeString = "Audio IFF"
        Case (BASS_CTYPE_STREAM_WAV_PCM): GetCTypeString = "PCM WAVE"
        Case (BASS_CTYPE_STREAM_WAV_FLOAT): GetCTypeString = "Floating-point WAVE"
        Case Else: GetCTypeString = "?"
    End Select

    ' other WAVE codec, could use acmFormatTagDetails to get its name, but...
    If (ctype And BASS_CTYPE_STREAM_WAV) Then GetCTypeString = "WAVE"
End Function

Private Sub Form_Load()
    ' change and set the current path, to prevent from VB not finding BASS.DLL
    ChDrive App.Path
    ChDir App.Path

    ' check the correct BASS was loaded
    If (HiWord(BASS_GetVersion) <> BASSVERSION) Then
        Call MsgBox("An incorrect version of BASS.DLL was loaded", vbCritical)
        End
    End If

    ' initialize default output device
    If (BASS_Init(-1, 44100, 0, Me.hWnd, 0) = 0) Then
        Call Error_("Can't initialize device")
        End
    End If

    ' initialize file selector
    cmdOpenFile.CancelError = True
    cmdOpenFile.flags = cdlOFNExplorer Or cdlOFNFileMustExist Or cdlOFNHideReadOnly
    cmdOpenFile.DialogTitle = "Open"
    cmdOpenFile.filter = filter
    filter = "BASS built-in (*.mp3;*.mp2;*.mp1;*.ogg;*.wav;*.aif)|*.mp3;*.mp2;*.mp1;*.ogg;*.wav;*.aif"

    ' look for plugins (in the executable's directory)
    Dim fh As String
    fh = Dir("bass*.dll")   ' find 1st file

    Do While (fh <> "")
        Dim plug As Long
        plug = BASS_PluginLoad(fh, 0)   ' plugin loaded...
        If (plug) Then
            Dim pinfo As BASS_PLUGININFO
            pinfo = BASS_PluginGetInfo(plug) ' get plugin info to add to the file selector filter...
            Dim a As Long
            For a = 0 To pinfo.formatc - 1
                filter = filter & "|" & VBStrFromAnsiPtr(BASS_PluginGetInfoFormat(plug, a).name) & " (" & VBStrFromAnsiPtr(BASS_PluginGetInfoFormat(plug, a).exts) & ")" & " - " & fh ' format description
                filter = filter & "|" & VBStrFromAnsiPtr(BASS_PluginGetInfoFormat(plug, a).exts)  ' extension filter
            Next a
            
            ' add plugin to the list
            lstPlugins.AddItem fh
        End If
        fh = Dir()  ' get next file
    Loop

    ' no plugins...
    If (lstPlugins.ListCount = 0) Then _
        lstPlugins.AddItem "no plugins - visit the BASS webpage to get some"

    filter = filter & "|" & "All files|*.*"
    cmdOpenFile.filter = filter
End Sub

Private Sub Form_Unload(Cancel As Integer)
    ' "free" the output device and all plugins
    Call BASS_Free
    Call BASS_PluginFree(0)
    End
End Sub

Private Sub btnOpen_Click()
    On Local Error Resume Next    ' if Cancel pressed...

    cmdOpenFile.ShowOpen

    ' if cancel was pressed, exit the procedure
    If Err.Number = 32755 Then Exit Sub

    Call BASS_StreamFree(chan)  ' free the old stream

    chan = BASS_StreamCreateFile(BASSFALSE, StrPtr(cmdOpenFile.filename), 0, 0, BASS_SAMPLE_LOOP)

    ' it ain't playable
    If (chan = 0) Then
        btnOpen.Caption = "click here to open a file..."
        lblInfo.Caption = ""
        Call Error_("Can't play the file")
        Exit Sub
    End If
    
    btnOpen.Caption = cmdOpenFile.filename

    ' display the file type and length
    Dim bytes As Long
    bytes = BASS_ChannelGetLength(chan, BASS_POS_BYTE)

    Dim time As Long
    time = BASS_ChannelBytes2Seconds(chan, bytes)
    
    Dim info As BASS_CHANNELINFO
    Call BASS_ChannelGetInfo(chan, info)
    
    lblInfo.Caption = "channel type = " & Hex(info.ctype) & " (" & GetCTypeString(info.ctype, info.plugin) _
                    & ")" & vbCrLf & "length = " & bytes & " (" & time \ 60 & ":" & Format(time Mod 60, "00") & ")"

    sldPosition.max = time ' update scroller range

    Call BASS_ChannelPlay(chan, BASSFALSE)
End Sub

Private Sub sldPosition_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    tmrPlugins.Enabled = False
End Sub

Private Sub sldPosition_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Call BASS_ChannelSetPosition(chan, BASS_ChannelSeconds2Bytes(chan, sldPosition.value), BASS_POS_BYTE)  ' set the position
    tmrPlugins.Enabled = True
End Sub

Private Sub tmrPlugins_Timer()
    sldPosition.value = BASS_ChannelBytes2Seconds(chan, BASS_ChannelGetPosition(chan, BASS_POS_BYTE)) ' update position
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -