This is the code I'm using:
VB Code:
  1. Option Explicit
  2.  
  3. Public Type MP3Header
  4.     MP3Length As Long
  5.     Position As Long
  6.     Duration As Integer
  7.     ID As String
  8.     Layer As String
  9.     SampleRate As String
  10.     Mode As String
  11.     Emphasis As String
  12.     Padding As Boolean
  13.     FrameSize As Long
  14.     FrameCount As Long
  15.     CopyRighted As Boolean
  16.     Original As Boolean
  17.     BitRate As String
  18.     CRC As Boolean
  19. End Type
  20.  
  21.  
  22. Public Version As Byte
  23.  
  24. Private Sub ReadFile(strFilename As String, mHeader As MP3Header)
  25.  
  26.     Static BitRate(11 To 23, 1 To 14) As String
  27.     Dim fn As Integer
  28.     Dim lngHeaderPosition As Long
  29.     Dim lngFilesize As Long
  30.     Dim BitLine As Integer
  31.     Dim i As Byte
  32.    
  33.     Dim Tag2 As String
  34.     Dim TagSize As String * 4
  35.     Dim ID3Tag As String * 3
  36.     Dim sHeader As String * 4
  37.  
  38.     If BitRate(11, 1) = "" Then
  39.         BitRate(11, 1) = "32"
  40.         BitRate(11, 2) = "64"
  41.         BitRate(11, 3) = "96"
  42.         BitRate(11, 4) = "128"
  43.         BitRate(11, 5) = "160"
  44.         BitRate(11, 6) = "192"
  45.         BitRate(11, 7) = "224"
  46.         BitRate(11, 8) = "256"
  47.         BitRate(11, 9) = "288"
  48.         BitRate(11, 10) = "320"
  49.         BitRate(11, 11) = "352"
  50.         BitRate(11, 12) = "384"
  51.         BitRate(11, 13) = "416"
  52.         BitRate(11, 14) = "448"
  53.         BitRate(12, 1) = "32"
  54.         BitRate(12, 2) = "48"
  55.         BitRate(12, 3) = "56"
  56.         BitRate(12, 4) = "64"
  57.         BitRate(12, 5) = "80"
  58.         BitRate(12, 6) = "96"
  59.         BitRate(12, 7) = "112"
  60.         BitRate(12, 8) = "128"
  61.         BitRate(12, 9) = "160"
  62.         BitRate(12, 10) = "192"
  63.         BitRate(12, 11) = "224"
  64.         BitRate(12, 12) = "256"
  65.         BitRate(12, 13) = "320"
  66.         BitRate(12, 14) = "384"
  67.         BitRate(13, 1) = "32"
  68.         BitRate(13, 2) = "40"
  69.         BitRate(13, 3) = "48"
  70.         BitRate(13, 4) = "56"
  71.         BitRate(13, 5) = "64"
  72.         BitRate(13, 6) = "80"
  73.         BitRate(13, 7) = "96"
  74.         BitRate(13, 8) = "112"
  75.         BitRate(13, 9) = "128"
  76.         BitRate(13, 10) = "160"
  77.         BitRate(13, 11) = "192"
  78.         BitRate(13, 12) = "224"
  79.         BitRate(13, 13) = "256"
  80.         BitRate(13, 14) = "320"
  81.         BitRate(21, 1) = "32"
  82.         BitRate(21, 2) = "64"
  83.         BitRate(21, 3) = "96"
  84.         BitRate(21, 4) = "128"
  85.         BitRate(21, 5) = "160"
  86.         BitRate(21, 6) = "192"
  87.         BitRate(21, 7) = "224"
  88.         BitRate(21, 8) = "256"
  89.         BitRate(21, 9) = "288"
  90.         BitRate(21, 10) = "320"
  91.         BitRate(21, 11) = "352"
  92.         BitRate(21, 12) = "384"
  93.         BitRate(21, 13) = "416"
  94.         BitRate(21, 14) = "448"
  95.         BitRate(22, 1) = "32"
  96.         BitRate(22, 2) = "48"
  97.         BitRate(22, 3) = "56"
  98.         BitRate(22, 4) = "64"
  99.         BitRate(22, 5) = "80"
  100.         BitRate(22, 6) = "96"
  101.         BitRate(22, 7) = "112"
  102.         BitRate(22, 8) = "128"
  103.         BitRate(22, 9) = "160"
  104.         BitRate(22, 10) = "192"
  105.         BitRate(22, 11) = "224"
  106.         BitRate(22, 12) = "256"
  107.         BitRate(22, 13) = "320"
  108.         BitRate(22, 14) = "384"
  109.         BitRate(23, 1) = "8"
  110.         BitRate(23, 2) = "16"
  111.         BitRate(23, 3) = "24"
  112.         BitRate(23, 4) = "32"
  113.         BitRate(23, 5) = "64"
  114.         BitRate(23, 6) = "80"
  115.         BitRate(23, 7) = "56"
  116.         BitRate(23, 8) = "64"
  117.         BitRate(23, 9) = "128"
  118.         BitRate(23, 10) = "160"
  119.         BitRate(23, 11) = "112"
  120.         BitRate(23, 12) = "128"
  121.         BitRate(23, 13) = "256"
  122.         BitRate(23, 14) = "320"
  123.     End If
  124.  
  125.     fn = FreeFile
  126.     Open strFilename For Binary As #
  127.     lngFilesize = LOF(fn)                                  
  128.          
  129.     Get #fn, 1, ID3Tag
  130.    
  131.     If ID3Tag = "ID3" Then
  132.         lngHeaderPosition = 1
  133.         Dim R As Long
  134.         Get #fn, 4, Version
  135.         Get #fn, 7, TagSize
  136.  
  137.         R = CVL(TagSize, 128)
  138.         If R > lngFilesize Or R > 2147483647 Then
  139.             Exit Sub
  140.         End If
  141.         Tag2 = Space$(R)
  142.         Get #fn, 11, Tag2
  143.         lngHeaderPosition = R + 11
  144.     End If
  145.    
  146.     Get #fn, 11 + Len(Tag2), sHeader
  147.        
  148.         With mHeader
  149.             .MP3Length = FileLen(strFilename)
  150.             .Position = 11 + Len(Tag2)
  151.            
  152.             '*** Second Byte ***
  153.             sHeader = Mid$(sHeader, 2)
  154.            
  155.             'MPEG Audio version ID
  156.             '00 - MPEG Version 2.5
  157.             '01 - reserved
  158.             '10 - MPEG Version 2 (ISO/IEC 13818-3)
  159.             '11 - MPEG Version 1 (ISO/IEC 11172-3)
  160.             i = (Asc(sHeader) And 24) / 8
  161.             .ID = IIf(i = 0, "MPEG-2.5", IIf(i = 1, "reserved", _
  162.                  IIf(i = 2, "MPEG-2", "MPEG-1")))
  163.             BitLine = IIf(i = 3, 10, 20)
  164.            
  165.             'Layer description
  166.             '0 0 Not defined
  167.             '0 1 Layer III
  168.             '1 0 Layer II
  169.             '1 1 Layer I
  170.             i = (Asc(sHeader) And 6) / 2
  171.             .Layer = IIf(i = 0, "Not defined", IIf(i = 1, "Layer 3", _
  172.                  IIf(i = 2, "Layer 2", "Layer 1")))
  173.             BitLine = BitLine + (4 - i)
  174.            
  175.             'CRC
  176.             '0 = No
  177.             '1 = Yes
  178.             i = (Asc(sHeader) And 1)
  179.             .CRC = Not (-i)
  180.            
  181.             ' *** Third Byte ***
  182.             sHeader = Mid$(sHeader, 2)
  183.            
  184.              i = (Asc(sHeader) And 240) / 16
  185.             On Error Resume Next
  186.             .BitRate = "Not defined"
  187.             .BitRate = BitRate(BitLine, i) & "kbit"
  188.             On Error GoTo errorhandler
  189.            
  190.             'Frequency
  191.             'value MPEG-1 MPEG-2
  192.             '0 0 44100 Hz 22050 Hz
  193.             '0 1 48000 Hz 24000 Hz
  194.             '1 0 32000 Hz 16000 Hz
  195.             '1 1
  196.             i = (Asc(sHeader) And 12) / 4
  197.             If .ID = "MPEG-1" Then
  198.                 .SampleRate = IIf(i = 0, "44100 Hz", _
  199.                      IIf(i = 1, "48000 Hz", "32000 Hz"))
  200.             Else
  201.                 .SampleRate = IIf(i = 0, "22050 Hz", _
  202.                      IIf(i = 1, "24000 Hz", "16000 Hz"))
  203.             End If
  204.            
  205.             'Padding Bit
  206.             '0 - frame is not padded
  207.             '1 - frame is padded with one extra slot
  208.             i = (Asc(sHeader) And 2) / 2
  209.             .Padding = i
  210.            
  211.             ' *** Forth Byte ***
  212.             sHeader = Mid$(sHeader, 2)
  213.            
  214.             'Mode value mode
  215.             '0 0 Stereo
  216.             '0 1 Joint stereo
  217.             '1 0 Dual channel
  218.             '1 1 Mono
  219.             i = (Asc(sHeader) And 192) / 64
  220.             .Mode = IIf(i = 0, "Stereo", IIf(i = 1, "Joint Stereo", _
  221.                  IIf(i = 2, "Dual channel", "Mono")))
  222.  
  223.             'Copyright
  224.             '0 - Audio is not copyrighted
  225.             '1 - Audio is copyrighted
  226.             i = (Asc(sHeader) And 8) / 8
  227.             .CopyRighted = i
  228.            
  229.             'Original
  230.             '0 - Copy of original media
  231.             '1 - Original media
  232.             i = (Asc(sHeader) And 4) / 4
  233.             .Original = i
  234.            
  235.             'Emphasis value Emphasis method
  236.             '0 0 none
  237.             '0 1 50/15ms
  238.             '1 0
  239.             '1 1 CCITT j.17
  240.             i = (Asc(sHeader) And 3)
  241.             .Emphasis = IIf(i = 0, "None", IIf(i = 1, "50/15ms", _
  242.                  IIf(i = 2, "reserved", "CCITT j.17")))
  243.            
  244.             .FrameSize = IIf(.Layer = "Layer 1", _
  245.                12 * Val(.BitRate) * 1000 \ Val(.SampleRate) - .Padding, _
  246.                144 * Val(.BitRate) * 1000 \ Val(.SampleRate) - .Padding)
  247.                
  248.             .FrameCount = (.MP3Length - .Position - 4) \ .FrameSize
  249.             .Duration = ((.MP3Length - .Position - 4) * 8 \ Val(.BitRate)) / 1000
  250.         End With
  251.         Close
  252. End Sub
  253.  
  254. Public Function CVL(ByVal Cadena As String, Optional Valor As Integer = 256) _
  255.   As Long
  256.     Dim i As Integer
  257.     CVL = 0
  258.    
  259.     For i = 3 To 0 Step -1
  260.         CVL = CVL + (Valor ^ i) * Asc(Cadena)
  261.         Cadena = Mid$(Cadena, 2)
  262.     Next i
  263.    
  264. End Function
  265.  
  266. Private Sub Form_Load()
  267.     Dim mHeader As MP3Header
  268.     ReadFile "D:\Downloaded Files\MP3\4 Non Blondes - What's Up.mp3", mHeader
  269.  
  270.     With mHeader
  271.         lblMPEGInfo.Caption = "Size: " & .MP3Length & " bytes" & _
  272.             vbCr & "Header found at: " & .Position & " bytes" & _
  273.             vbCr & "Length: " & .Duration & " seconds" & _
  274.             vbCr & .ID & " " & .Layer & _
  275.             vbCr & .BitRate & ", " & .FrameCount & " frames" & _
  276.             vbCr & .SampleRate & " " & .Mode & _
  277.             vbCr & "CRCs: " & IIf(.CRC, "Yes", "No") & _
  278.             vbCr & "Copyrighted: " & IIf(.CopyRighted, "Yes", "No") & _
  279.             vbCr & "Original: " & IIf(.Original, "Yes", "No") & _
  280.             vbCr & "Emphasis: " & .Emphasis    
  281.     End With
  282. End Sub