如题:我做的播放器不知道为什么要一直动主音量里面的波形才能听到声音?歌是一直在放的,但是就是听不到声音,一定要一直动那个主音量里面的波形才能听到。
我是新手,啥都不会,请大家帮帮忙好吗?如果需要查看源程序才能知道的话,加QQ:150972046谢谢~我今晚就要用到了,请大家帮帮忙哦~

解决方案 »

  1.   

    程序在此,请大家帮忙看看好吗?
    还有我不会不知道怎么匹配那个歌词和MP3的文件名
    Private Sub cmdadd_Click() '添加按钮
        '功能在于把列表中的音乐文件放入Mp3的播放列表中
        Dim i As Integer
        Call mp3_Click
        sound_count = 0                     'Mp3播放列表中的文件个数,初始为0
        For i = 0 To Lstwavefilename.ListCount - 1
            If Lstwavefilename.Selected(i) = True Then
               If s_first = False And sound_count = 0 Then
                  sound_count = 0
                  s_first = True
               Else   sound_count = sound_count + 1
               End If
               ReDim Preserve temp_sound(sound_count) As iSound
               temp_sound(sound_count).sFileLoad = Lstwavefilename.List(i)
            End If
        Next
        
        money.Tag = STR(sound_count)
        File_Save = False
        
    End SubSub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 2 Then
    PopupMenu qq
    End If
    End Sub
    Private Sub help_Click()
    Form1.Show 1
    End Sub
    Private Sub mp3_Click()             '打开按钮
        '添加文件到列表中
       Dim w_file_name As String
       Dim pStr As String
       Dim aStr As String
       Dim space_place As Integer           '空格
       Dim file_load As String              '用于标识选取的一个文件
      
       C.Flags = cdlOFNAllowMultiselect       '可选多个文件
       C.Filter = "mp3 file(*.mp3)|*.mp3|Wave file(*.wav)|*.wav|AVI File(*.avi)|*.avi|Movie File(*.mov)|*.mov|Media File(*.mmm)|*.mmm|Mid File(*.mid;*.rmi)|*.mid;*rmi|MPEG File(*.mpeg)|*.mpeg;*.mpg|All File(*.*)|*.*"           '过滤器
       C.ShowOpen
       w_file_name = C.FileName
       
       aStr = w_file_name
           
       space_place = InStr(aStr, " ")
       
       If space_place = 0 Then              '只选了一个文件
          pStr = aStr
          Lstwavefilename.AddItem pStr       'a_index Else
       '如果选取多个文件,比如选取了C:\Music下的a.mp3、b.mp3、c.mp3三个文件,则获得的字符
    '串为"C:\Music\ a.mp3 b.mp3 c.mp3",目录路径与文件名之间有个空格,文件名之间也有空格
          file_load = Left(aStr, space_place - 1)       '取文件所在文件夹的路径
          aStr = Right(aStr, Len(aStr) - space_place)
            '选取的文件
       
       Do While (aStr <> "")                    '反复从aStr中提取文件名
       
           space_place = InStr(aStr, " ")
     If space_place = 0 Then                '最后一个文件名
              pStr = aStr
              aStr = ""
             ' Lstwavefilename.AddItem file_load & "\" & pStr ', a_index       Else                             '反复取文件名
              pStr = Left(aStr, space_place - 1)
              aStr = Right(aStr, Len(aStr) - space_place)
             
              Lstwavefilename.AddItem file_load & "\" & pStr ', a_index     ' 添加到列表
               End If
           w_file_name = file_load & "\" & pStr
        Loop
      End If
      wave_file_name = w_file_name
    '最后一个文件放入wave_file_name中,以供mp3控件播放End SubPrivate Sub moneystop_Click()                '暂停按钮
       Mp3Play1.Pause
       
       If Timer.Enabled = False Then
          Timer.Enabled = True
          Command1.Caption = "||"
       Else
           Timer.Enabled = False
           Command1.Caption = "■"
       End If
    End Sub
    Private Sub begin_Click()             '播放按钮
       Dim inputfile As String                          '要播放的文件名
       Dim err
       Dim ret
     
      
       Dim iLine As String
       Dim iSumL As String
       Open "I:\多媒体\作业\money\素材\王光良-第一次.txt" For Input As #1
       While Not EOF(1)
          Line Input #1, iLine
          iSumL = iSumL + iLine & vbNewLine
       Wend
       Text1.Text = iSumL
      Text1.Top = Picture1.ScaleHeight
       Text1.Visible = True   inputfile = wave_file_name '播放的是上次打开的文件
          ret = Mp3Play1.Authorize("LightBringer", "1441658209")
       
       Mp3Play1.Stop                                '先停止
       
       ret = Mp3Play1.open(inputfile, "")                   '打开音乐文件
       
       err = Mp3Play1.Play                          '播放
     money.Caption = "mymp3play-----" & wave_file_name  '设置窗口标题
        
       Sdplaytime.Value = 0                             '设置slider的值
      
       Sdplaytime.Max = Mp3Play1.GetWaveLengthSecs      '设置slider的最大值
       t.Text = Mp3Play1.GetWaveLengthSecs
      
       sdleft.Value = Mp3Play1.GetVolumeLeft                '显示左声道的音量
       sdright.Value = Mp3Play1.GetVolumeRight          '显示右声道的音量
     err = Lstwavefilename.ListIndex
       Timer.Enabled = True                             '开始计时,更新slider和TxtPT的值End Sub
    Private Sub delect_Click()                       '删除按钮
       Dim i As Integer
       Dim SELECTCOUNT As Integer
       
       SELECTCOUNT = Lstwavefilename.ListCount
       
       For i = 0 To SELECTCOUNT - 1
         If i = SELECTCOUNT Then                        '如果已经全删了
           Exit For
         End If
       If Lstwavefilename.Selected(i) = True Then            '删除所选文件
           Lstwavefilename.RemoveItem i
           i = 0
         End If
         
         SELECTCOUNT = Lstwavefilename.ListCount
       
       Next
    End Sub
    Private Sub time_Click()                      '设置播放开始时间
       Dim err
        
       Mp3Play1.Stop                                '先停止播放
       err = Mp3Play1.open(wave_file_name, "")          '打开文件
       
      t.Text = Mp3Play1.GetWaveLengthSecs
      
       Sdplaytime.Value = CInt(TxtPt.Text)              '设置slider的值 err = Mp3Play1.PlayFromToS(TxtPt.Text, t.Text)
       
       Sdplaytime.Max = Mp3Play1.GetWaveLengthSecs      '设置slider的最大值
       
       sdleft.Value = Mp3Play1.GetVolumeLeft                '显示左声道的音量
       sdright.Value = Mp3Play1.GetVolumeRight          '显示右声道的音量
          
       Timer.Enabled = True                             '开始更新slider 和TxtPT
       
       Do While Sdplaytime.Value > Sdplaytime.Max
          Timer.Enabled = False
       Loop
       
    End Sub
    Private Sub back_Click()                     '停止按钮
       Mp3Play1.Stop                                '停止播放
       Timer.Enabled = False                            '停止timer控件
    End SubPrivate Sub Form_Load()                         '窗体载入时的事件
       Dim file_nUmber As Integer
       Dim mp3_file_name As String          'mp3列表文件
       Dim i As Integer
       Dim LST_INDEX As Integer
       Dim F_ENTER As Boolean
       Dim ret
     On Error GoTo A0:
       
     
        ret = Mp3Play1.Authorize("LightBringer", "1441658209")
       
       file_nUmber = FreeFile
       
       mp3_file_name = App.Path & "\ini.kkk"        '打开目录下面的mp3列表文件
       
       Open mp3_file_name For Binary As file_nUmber
       
       Get #file_nUmber, , Lstfilename          '获取音乐文件的顺序和文件名
       
       F_ENTER = False
       
       For i = 0 To Lstfilename.ID              '把mp3列表显示到list控件中
       If Lstfilename.STR(i) <> "" Then
              
              If F_ENTER = False And LST_INDEX = 0 Then
                  F_ENTER = True
                  LST_INDEX = 0
              Else
                 LST_INDEX = LST_INDEX + 1
              End If
              Lstwavefilename.AddItem Lstfilename.STR(i)
          End If
       Next
       
       Close (file_nUmber)
    A0:
       
       Close (file_nUmber)
       
    End SubPrivate Sub Form_Unload(Cancel As Integer)          '关闭窗体事件
       Dim file_nUmber As Integer
       Dim mp3_file_name As String
       Dim i As Integer
       '所完成的功能是把列表里的内容以文件形式存储到目录下的ini.kkk文件里
       For i = 0 To Lstwavefilename.ListCount
          
          ReDim Preserve Lstfilename.STR(i) As String
          
          Lstfilename.STR(i) = Lstwavefilename.List(i)
      Next
       Lstfilename.ID = i
       
       file_nUmber = FreeFile
       
       mp3_file_name = App.Path & "\ini.kkk"
       
       Open mp3_file_name For Binary As file_nUmber
       
       Put #file_nUmber, , Lstfilename
       
       Close (file_nUmber)
        
    End Sub
    Private Sub Lstwavefilename_Click()          '列表点击(单击)事件
       
       current_index = Lstwavefilename.ListIndex     '点击的是哪一个项
       wave_file_name = Lstwavefilename.List(Lstwavefilename.ListIndex)   '获取文件名及地址
    End SubPrivate Sub Lstwavefilename_DblClick()           '列表点击(双击)事件
       current_index = Lstwavefilename.ListIndex
       wave_file_name = Lstwavefilename.List(Lstwavefilename.ListIndex)
           
       Call begin_Click                   '播放选中的音乐
       
    End Sub
    Private Sub Sdplaytime_Change()             '播放时间
        
        TxtPt.Text = Sdplaytime.Value
       
    End SubPrivate Sub Sdplaytime_Click()              '点击
        Dim err
        Dim endtime
        
       Mp3Play1.Stop                        '先停止播放
       err = Mp3Play1.open(wave_file_name, "")      '再重新打开
    endtime = Mp3Play1.GetWaveLengthSecs    '获取音乐的长度(时间)
       err = Mp3Play1.PlayFromToS(Sdplaytime.Value, endtime) '根据slider上的值重新定位播放
       
       'Sdplaytime.Value = 0
       Sdplaytime.Max = Mp3Play1.GetWaveLengthSecs
       
       sdleft.Value = Mp3Play1.GetVolumeLeft        '左声道
       sdright.Value = Mp3Play1.GetVolumeRight  '右声道
          
       Timer.Enabled = True
    '下面的这个while循环的功能是播放到结尾后,停止播放
       'Do While Sdplaytime.Value > Sdplaytime.Max
        'Timer.Enabled = False
         'Loop
       
    End SubPrivate Sub Sdright_Change()                '右声道的值变化
        Dim err
        
        err = Mp3Play1.SetVolume(sdleft.Value, sdright.Value)
    End Sub
    Private Sub Sdright_Click()                     '点击右声道
        Dim err
        
        err = Mp3Play1.SetVolume(sdleft.Value, sdright.Value)
    End SubPrivate Sub timer_Timer()                   '时间控件
         Dim iStep As Integer
    iStep = 20
    Text1.Top = Text1.Top - iStep
          sdleft.Value = Mp3Play1.GetVolumeLeft '左声道值
          sdright.Value = Mp3Play1.GetVolumeRight   '右声道值
          Sdplaytime.Value = Sdplaytime.Value + 1   '更新slider值
          
     Do While Sdplaytime.Value >= Int(Sdplaytime.Max)
             If Lstwavefilename.List(Lstwavefilename.ListIndex + 1) = "" Then
                    '如果播放到最后一首,则从头开始播放
                wave_file_name = Lstwavefilename.List(0)
          
                Lstwavefilename.Selected(Lstwavefilename.ListIndex) = False
     
                Lstwavefilename.Selected(0) = True
             Else                           '否则播放列表的下一首
                wave_file_name = Lstwavefilename.List(Lstwavefilename.ListIndex + 1)
      Lstwavefilename.Selected(Lstwavefilename.ListIndex) = False            Lstwavefilename.Selected(Lstwavefilename.ListIndex + 1) = True
             End If
       
          Call begin_Click                    '播放
     
       Loop
       
       
    End Sub
      

  2.   

    你既要用 sdleft.Value = Mp3Play1.GetVolumeLeft 显示声道的音量,
    又用 Mp3Play1.SetVolume(sdleft.Value, sdright.Value) 设置音量。
    两者相互之间循环影响。