اطلاعیه

Collapse
No announcement yet.

MP3 Header

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    MP3 Header

    با عرض سلام خدمت اساتید محترم
    من دارم روی mp3 کار میکنم و تا الان تونستم header و id3v1 رو بخونم ولی مشکل اینجاست که این header واسه بعضی اهنگها درست کار میکنه و واسه بعضی هاش هم نه , اعصابه منو ریخته بهم :angry: , کدش رو میزارم اگه کسی از دوستان میتونه کمک کنه :
    کد:
    Function Read_mp3_info(byval Filename As String) As Long
       Ff = Freefile()
       Filename = Dir(filename)
       Printf 1 , 1 , Filename , Blue , White , 8
       Open Filename For Binary As #ff
         Lngfilesize = Lof(#ff)
         Get #ff , B , 1
         If B <> 255 Then
          If B <> 73 Then
            'End
          End If
         End If
         Get #ff , B , 2
         If B < 250 Or B > 251 Then
          If B = 68 Then
            Get #ff , B , 3
            If B = 51 Then
             Get #ff , Id3ver , 4
             Get #ff , B , 7
             R = B * 20917152
             Get #ff , B , 8
             Temp = B * 16384
             R = R + Temp
             Get #ff , B , 9
             Temp = B * 128
             R = R + Temp
             Get #ff , B , 10
             R = R + B
             If R > Lngfilesize Or R > 2147483647 Then
             End If
            End If
          End If
         End If
          Pos = Lngfilesize - 127
          Get #ff , Tag , Pos
          If Tag = "TAG" Then
            Title = "" : Artist = "" : Album = ""
            Get #ff , Title
            Title = Trim(title)
            If Title = "" Or Title = " " Then Title = "No Title"
            Get #ff , Artist
            Artist = Trim(artist)
            If Artist = "" Or Artist = " " Then Artist = "No Artist"
            Get #ff , Album
            Album = Trim(album)
            If Album = "" Or Album = " " Then Album = "No Album"
          End If
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
          Pos = 1 : Seek #ff , Pos
          Find_header:
          While Eof(#ff) = 0
            Get #ff , Bytes(1) , , 2
            Bcheck(1) = Bytes(2) And &HE0
            If Bytes(1) = &HFF And Bcheck(1) = &HE0 Then Exit While
          Wend
          Header(1) = Bytes(1) : Header(2) = Bytes(2)
          Get #ff , Bytes(1) , , 2
          Header(3) = Bytes(1) : Header(4) = Bytes(2)
          Bcheck(2) = Bytes(1) And &HF0
          If Bcheck(2) = &HF0 Then Goto Find_header
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    '%%%%%%%%%% Get MPEG ID
          Ext = Header(2)
          Shift Ext , Right , 3
          Ext = Ext And 3
          Mpeg_id = Lookup(ext , Mpgver)
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    '%%%%%%%%%% Get LAYER
          Ext = Header(2)
          Shift Ext , Right , 1
          Ext = Ext And 3
          Layer = Lookup(ext , Layers)
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    '%%%%%%%%%% Get BITRATRE
          Ext = Header(3)
          Shift Ext , Right , 4
          Bitrate = Ext And &HF
          If Mpeg_id = 1 Then
            Select Case Layer :
             Case 1:
               Br = Lookup(bitrate , Mpeg1_l1)
             Case 2:
               Br = Lookup(bitrate , Mpeg1_l2)
             Case 3:
               Br = Lookup(bitrate , Mpeg1_l3)
            End Select
          Elseif Mpeg_id = 2 Or Mpeg_id = 25 Then
            Select Case Layer :
             Case 1:
               Br = Lookup(bitrate , Mpeg2_l1)
             Case 2:
               Br = Lookup(bitrate , Mpeg2_l2o3)
             Case 3:
               Br = Lookup(bitrate , Mpeg2_l2o3)
            End Select
          End If
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    '%%%%%%%%%% Get SAMPLE RATE
          Ext = Header(3)
          Shift Ext , Right , 2
          Samplerate = Ext And 3
          Select Case Mpeg_id:
            Case 1:
             Sr = Lookup(samplerate , Mpeg1)
            Case 2:
             Sr = Lookup(samplerate , Mpeg2)
            Case 25
             Sr = Lookup(samplerate , Mpeg2o5)
          End Select
    '%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
          Total_t = Get_duration(lngfilesize , Br)
          Mm = Total_t / 60
          Ss = Total_t Mod 60               '
          If Mm < 10 Then Smm = "0" + Str(mm)
          If Mm > 9 Then Smm = Str(mm)
          If Ss < 10 Then Sss = "0" + Str(ss)
          If Ss > 9 Then Sss = Str(ss)
          Total_time = Smm + ":" + Sss
       Close #ff
       Read_mp3_info = Lngfilesize
    End Function
    
    Function Get_duration(byval File_size As Long , Byval File_bitrate As Integer) As Integer
      Local Tp1 As Single
      Local Tp2 As Single
      Tp1 = File_size / File_bitrate
      Tp2 = Tp1 * 8
      Tp2 = Tp2 / 1000
      Get_duration = Int(tp2)
    End Function
    اینم table هاش :

    کد:
    Mpgver:
      Data 25 , 0 , 2 , 1
    Layers:
      Data 0 , 3 , 2 , 1
    
    'Bitrate :
    Mpeg1_l1:
      Data 000% , 032% , 064% , 096% , 128% , 160% , 192% , 224% , 256% , 288% , 320% , 352% , 384% , 416% , 448%
    Mpeg1_l2:
      Data 000% , 032% , 048% , 056% , 064% , 080% , 096% , 112% , 128% , 160% , 192% , 224% , 256% , 320% , 384%
    Mpeg1_l3:
      Data 000% , 032% , 040% , 048% , 056% , 064% , 080% , 096% , 112% , 128% , 160% , 192% , 224% , 256% , 320%
    
    Mpeg2_l1:
      Data 000% , 032% , 048% , 056% , 064% , 080% , 096% , 112% , 128% , 144% , 160% , 176% , 192% , 224% , 256%
    Mpeg2_l2o3:
      Data 000% , 008% , 016% , 024% , 032% , 040% , 048% , 056% , 064% , 080% , 096% , 112% , 128% , 144% , 160%
    
    'Sample Rate :
    Mpeg1:
      Data 44100% , 48000% , 32000% , 00000%
    Mpeg2:
      Data 22050% , 24000% , 16000% , 00000%
    Mpeg2o5:
      Data 11025% , 12000% , 08000% , 00000%
    دلا خو کن به تنهایی که از تنها بلا خیزد

    #2
    پاسخ : MP3 Header

    با سلام

    بررسی فرمایید که آیا احتمالا برای فایلهای با نام طولانی دچار مشکل می شود؟
    اگر بله، حافظه بیشتری برای نام فایل و هدر و .... تخصیص دهید.

    ضمن اینکه دوستانی که با این زبان کار می کنند، بهتر می توانند راهنمایی کنند.

    با سپاس
    گشتی در لاله زار
    http://www.eca.ir/forum2/index.php?topic=76138.0

    http://www.eca.ir/forum2/index.php?topic=76141

    دیدگاه


      #3
      پاسخ : MP3 Header

      دوست عزیز چه ربطی به اسم فایل داره , کل header ما 32bit هست اگر هم اینطوره پس چرا id3tag رو راحت میخونه ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
      دلا خو کن به تنهایی که از تنها بلا خیزد

      دیدگاه

      لطفا صبر کنید...
      X