首先申明,我不是要自己做MPEG解码器。
呵呵,咱就菜鸟一个。
其次,俺是个中国老百姓,拜托各位炎黄子孙们(当然,喜欢中国文化的老外也欢迎进来)
最好能尽量用咱的母语来帮帮俺。(只是尽量啦,那些个1234什么的,还是觉得原样方便些:)现在我希望能做到:
1、仅对非网路、本地的MPEG音频文件解读(如MP2,MPA,MP3,MP4等等)
2、想要获取媒体的基本信息(不是ID3数据)
(声道数、取样率、速率、实际播放时间、是否VBR)
如:128KBit VBR 双声道 混合立体声(这个东东一直没搞懂是啥意思?) 44KHz 等等最重要的是如何正确换算出实际播放时间?3、考虑到ID3v2数据头的问题,要能正确定位实际文件头。
4、坚决不用外部控件。基本上以直接读取文件二进制数据的方式。
请各位高手来帮帮小弟,在下不胜感激!

解决方案 »

  1.   

    参看
    http://community.csdn.net/Expert/topic/3592/3592307.xml?temp=.3629267
      

  2.   

    给你段ID3V1读取的模块,试试看.Public Enum enErrorInfo
        ERR_NO_ERROR = 0
        VB_ERR_PATH_NOT_FOUND = 76
    End EnumPublic Type tagID3v1
        Title As String
        Artist As String
        Album As String
        Year As String
        comment As String
        genre As Byte
        genredesc As String
        exErrorInfo As enErrorInfo
        exPrivate As Variant
    End TypePublic Function GetTag(ByVal FileName$, Optional ByVal exRaiseFileIOErrors = False, Optional ByVal asyncIsWorkerThread As Boolean = False) As tagID3v1
        If exRaiseFileIOErrors = True Then
            On Error GoTo errh
            FileLen FileName$
        Else
            On Error Resume Next
            FileLen FileName$
            If Err.Number = VB_ERR_PATH_NOT_FOUND Then
                GetTag.exErrorInfo = VB_ERR_PATH_NOT_FOUND
                GoTo nofileaccess
            End If
            Err.Clear
        End If
        On Error GoTo errh
        Dim locatedTag As Boolean
        Open FileName For Binary As #1
        Dim tagHeader$
        Seek 1, LOF(1)
        Do Until Loc(1) <= 1 Or (LOF(1) - Loc(1)) >= 375
            If asyncIsWorkerThread = False Then DoEvents
            tagHeader = String(130, 0)
            Seek 1, Loc(1) - 130
            Get 1, , tagHeader
            If InStr(1, tagHeader, "TAG", vbBinaryCompare) Then
                Seek 1, Loc(1) - 130
                Seek 1, Loc(1) + (InStr(1, tagHeader, "TAG", vbBinaryCompare) + 4)
                tagHeader = String(30, 0)
                Get 1, , tagHeader
                If InStr(1, tagHeader, Chr(0)) Then
                    If Left(tagHeader, 1) = Chr(0) Then
                        tagHeader = ""
                    End If
                End If
                GetTag.Title = tagHeader
                tagHeader = String(30, 0)
                Get 1, , tagHeader
                If InStr(1, tagHeader, Chr(0)) Then
                    If Left(tagHeader, 1) = Chr(0) Then
                        tagHeader = ""
                    End If
                End If
                GetTag.Artist = tagHeader
                tagHeader = String(30, 0)
                Get 1, , tagHeader
                If InStr(1, tagHeader, Chr(0)) Then
                    If Left(tagHeader, 1) = Chr(0) Then
                        tagHeader = ""
                    End If
                End If
                GetTag.Album = tagHeader
                tagHeader = String(4, 0)
                Get 1, , tagHeader
                If InStr(1, tagHeader, Chr(0)) Then
                    If Left(tagHeader, 1) = Chr(0) Then
                        tagHeader = ""
                    End If
                End If
                GetTag.Year = tagHeader
                tagHeader = String(30, 0)
                Get 1, , tagHeader
                If InStr(1, tagHeader, Chr(0)) Then
                    If Left(tagHeader, 1) = Chr(0) Then
                        tagHeader = ""
                    End If
                End If
                GetTag.comment = tagHeader
                tagHeader = String(1, 0)
                Get 1, , tagHeader
                If InStr(1, tagHeader, Chr(0)) Then
                    If Left(tagHeader, 1) = Chr(0) Then
                        tagHeader = ""
                    End If
                End If
                GetTag.genre = Asc(tagHeader)
                If GetTag.genre Then GetGenreDescription GetTag
                    locatedTag = True
                Exit Do
            End If
            Seek 1, Loc(1) - 125
        Loop
        Close #1
        If locatedTag = False Then
            Dim buffer$
            buffer = Mid$(FileName$, InStrRev(FileName$, "\") + 1)
            buffer = Mid(buffer, 1, InStrRev(buffer, ".") - 1)
            If InStr(1, buffer, "-", 1) < 1 Then
                GetTag.Title = Left(buffer, 30)
                GetTag.Artist = Left(buffer, 30)
            Else
                GetTag.Artist = Trim$(Mid(buffer, 1, IIf((InStr(1, buffer, "-", 1) - 1) > 30, 30, InStr(1, buffer, "-", 1) - 1)))
                GetTag.Title = Trim$(Mid(buffer, InStr(1, buffer, "-", 1) + 1, 30))
            End If
        End If
        Exit Function
    errh:
        On Error Resume Next
        Close #1
        Err.Raise Err.Number, Err.Source, Err.Description
        Exit Function
    nofileaccess:
    End Function
      

  3.   

    Public Sub GetGenreDescription(ByRef id3tag As tagID3v1)
        Select Case id3tag.genre
            Case 0:
                id3tag.genredesc = "Blues"
            Case 1:
                id3tag.genredesc = "Classic Rock"
            Case 2:
                id3tag.genredesc = "Country"
            Case 3:
                id3tag.genredesc = "Dance"
            Case 4:
                id3tag.genredesc = "Disco"
            Case 5:
                id3tag.genredesc = "Funk"
            Case 6:
                id3tag.genredesc = "Grunge"
            Case 7:
                id3tag.genredesc = "Hip-Hop"
            Case 8:
                id3tag.genredesc = "Jazz"
            Case 9:
                id3tag.genredesc = "Metal"
            Case 10:
                id3tag.genredesc = "New Age"
            Case 11:
                id3tag.genredesc = "Oldies"
            Case 12:
                id3tag.genredesc = "Other"
            Case 13:
                id3tag.genredesc = "Pop"
            Case 14:
                id3tag.genredesc = "R&B"
            Case 15:
                id3tag.genredesc = "Rap"
            Case 16:
                id3tag.genredesc = "Reggae"
            Case 17:
                id3tag.genredesc = "Rock"
            Case 18:
                id3tag.genredesc = "Techno"
            Case 19:
                id3tag.genredesc = "Industrial"
            Case 20:
                id3tag.genredesc = "Alternative"
            Case 21:
                id3tag.genredesc = "Ska"
            Case 22:
                id3tag.genredesc = "Death Metal"
            Case 23:
                id3tag.genredesc = "Pranks"
            Case 24:
                id3tag.genredesc = "Soundtrack"
            Case 25:
                id3tag.genredesc = "Euro-Track"
            Case 26:
                id3tag.genredesc = "Ambient"
            Case 27:
                id3tag.genredesc = "Trip-Hop"
            Case 28:
                id3tag.genredesc = "Vocal"
            Case 29:
                id3tag.genredesc = "Jazz+Funk"
            Case 30:
                id3tag.genredesc = "Fusion"
            Case 31:
                id3tag.genredesc = "Trance"
            Case 32:
                id3tag.genredesc = "Classical"
            Case 33:
                id3tag.genredesc = "Instrumental"
            Case 34:
                id3tag.genredesc = "Acid"
            Case 35:
                id3tag.genredesc = "House"
            Case 36:
                id3tag.genredesc = "Game"
            Case 37:
                id3tag.genredesc = "Sound Clip"
            Case 38:
                id3tag.genredesc = "Gospel"
            Case 39:
                id3tag.genredesc = "Noise"
            Case 40:
                id3tag.genredesc = "AlternRock"
            Case 41:
                id3tag.genredesc = "Bass"
            Case 42:
                id3tag.genredesc = "Soul"
            Case 43:
                id3tag.genredesc = "Punk"
            Case 44:
                id3tag.genredesc = "Space"
            Case 45:
                id3tag.genredesc = "Meditative"
            Case 46:
                id3tag.genredesc = "Instrumental Pop"
            Case 47:
                id3tag.genredesc = "Instrumental Rock"
            Case 48:
                id3tag.genredesc = "Ethnic"
            Case 49:
                id3tag.genredesc = "Gothic"
            Case 50:
                id3tag.genredesc = "Darkwave"
            Case 51:
                id3tag.genredesc = "Techo-Industrial"
            Case 52:
                id3tag.genredesc = "Electronic"
            Case 53:
                id3tag.genredesc = "Pop-Folk"
            Case 54:
                id3tag.genredesc = "Eurodance"
            Case 55:
                id3tag.genredesc = "Dream"
            Case 56:
                id3tag.genredesc = "Southern Rock"
            Case 57:
                id3tag.genredesc = "Comedy"
            Case 58:
                id3tag.genredesc = "Cult"
            Case 59:
                id3tag.genredesc = "Gangsta"
            Case 60:
                id3tag.genredesc = "Top 40"
            Case 61:
                id3tag.genredesc = "Christian Rap"
            Case 62:
                id3tag.genredesc = "Pop/Funk"
            Case 63:
                id3tag.genredesc = "Jungle"
            Case 64:
                id3tag.genredesc = "Native American"
            Case 65:
                id3tag.genredesc = "Cabaret"
            Case 66:
                id3tag.genredesc = "New Wave"
            Case 67:
                id3tag.genredesc = "Psychadelic"
            Case 68:
                id3tag.genredesc = "Rave"
            Case 69:
                id3tag.genredesc = "Showtunes"
            Case 70:
                id3tag.genredesc = "Trailer"
            Case 71:
                id3tag.genredesc = "Lo-Fi"
            Case 72:
                id3tag.genredesc = "Tribal"
            Case 73:
                id3tag.genredesc = "Acid Punk"
            Case 74:
                id3tag.genredesc = "Acid Jazz"
            Case 75:
                id3tag.genredesc = "Polka"
            Case 76:
                id3tag.genredesc = "Retro"
            Case 77:
                id3tag.genredesc = "Musical"
            Case 78:
                id3tag.genredesc = "Rock & Roll"
            Case 79:
                id3tag.genredesc = "Hard Rock"
        End Select
    End Sub
      

  4.   

    我想知道的是MP3是否为VBR编码决不要ID3数据!!!谢谢!