Получаем информацию об MP3 файле - VB

Узнай цену своей работы

Формулировка задачи:

На одном сайте нашел код, очень интересный и тут спрашивали уже такое кстати. Так вот получаем информацию из файла MP3, а именно из его тегов, может пригодится для создания проигрывателя.

И так, создадим "Class Module" с именем clsTagInfo в него следующий код:

Листинг программы
  1. Option Explicit 'îáúÿâëåГ*ГЁГҐ ïåðåìåГ*Г*ûõ
  2. Dim sStr As String * 128 ' ñòðîêГ* Гў êîòîðóþ Г§Г*ГЇГЁГёГҐГ¬ ГІГҐГЈ
  3. Dim HasTag As Boolean ' ГґГ«Г*ГЈ Г*Г*ëè÷èÿ èëè îòñóòñòâèÿ ГІГҐГЈГ*
  4. Private varFileName As String ' èìÿ ГґГ*éëГ*
  5. Private Type ID3 ' îáúÿâëåГ*ГЁГҐ ïîëüçîâГ*òåëüñêîãî ГІГЁГЇГ* , îïèñûâГ*ГѕГ№ГҐГЈГ® ГІГҐГЈ
  6. sTitle As String * 30 ' Г*Г*çâГ*Г*ГЁГҐ ГЇГҐГ±Г*ГЁ
  7. sArtist As String * 30 ' èñïîëГ*èòåëü
  8. sAlbum As String * 30 ' Г*ëüáîì
  9. sYear As String * 4 ' ãîä
  10. sComment As String * 28 ' êîììåГ*ГІГ*ðèé
  11. sTrack(1) As Byte ' Г*îìåð òðåêГ*
  12. sGenre As Byte ' Г¦Г*Г*Г°
  13. End Type
  14. Dim info As ID3
  15.  
  16. Private Function Read() ' ГґГіГ*êöèÿ ñ÷èòûâГ*ГѕГ№Г*Гї ГІГҐГЈ
  17. Dim nFile As Integer ' Г*îìåð ГґГ*éëГ*
  18. Dim Tag As String * 3
  19. On Error Resume Next ' Г*ГҐ îñòГ*Г*Г*âëèâГ*ГІГј ïðîãðГ*ììó ïðè îøèáêå
  20. nFile = FreeFile ' ïîëó÷Г*ГҐГ¬ Г*îìåð ñâîáîäГ*îãî ГґГ*éëГ*
  21. Open varFileName For Binary As nFile ' îòêðûâГ*ГҐГ¬ ГґГ*éë varFileName äëÿ ïîáГ*éòîâîãî äîñòóïГ* ïîä Г*îìåðîì nFile
  22. Get nFile, LOF(nFile) - 127, sStr ' Г§Г*ïèñûâГ*ГҐГ¬ 127 ïîñëåäГ*ГЁГµ ñèìâîëîâ ГґГ*éëГ* Гў ïåðåìåГ*Г*ГіГѕ sStr
  23. Close nFile ' Г§Г*êðûâГ*ГҐГ¬ ГґГ*éë
  24. Tag = Mid(sStr, 1, 3) ' ГЁГ№ГҐГ¬ ìåòêó ГІГҐГЈГ* ID3v1
  25. If Tag = "TAG" Then ' åñëè ìåòêГ* ГҐГ±ГІГј
  26. HasTag = True ' ïðèñâГ*ГЁГўГ*ГҐГ¬ ГґГ«Г*ГЈГі ÈñòèГ*Г*
  27. Else
  28. HasTag = False ' åñëè Г*ГҐГІ ìåòêè ГІГ® ГґГ«Г*ГЈ-Г”Г*ëüøü
  29. End If
  30. If HasTag = True Then ' Г°Г*çáèâГ*ГҐГ¬ ГІГҐГЈ Г*Г* îòäåëüГ*ûå ñîñòГ*âëÿþùèå
  31. info.sTitle = Mid(sStr, 4, 30)
  32. info.sArtist = Mid(sStr, 34, 30)
  33. info.sAlbum = Mid(sStr, 64, 30)
  34. info.sYear = Mid(sStr, 94, 4)
  35. info.sComment = Mid(sStr, 98, 28)
  36. info.sTrack(1) = Asc(Mid(sStr, 127, 1))
  37. info.sGenre = Asc(Mid(sStr, 128, 1))
  38. End If
  39. End Function
  40.  
  41. Public Function Save() ' ГґГіГ*êöèÿ Г§Г*ïèñûâГ*ГѕГ№Г*Гї Гў ГґГ*éë Г*îâûé ГІГҐГЈ
  42. Dim nFile
  43. info.sTrack(0) = 0
  44. nFile = FreeFile
  45. If HasTag = True Then ' åñëè òåã åñòü
  46. Open varFileName For Binary As nFile ' îòêðûâГ*ГҐГ¬ ГґГ*éë
  47. Put nFile, LOF(nFile) - 124, info ' Г§Г*ïèñûâГ*ГҐГ¬ ГІГҐГЈ
  48. Close nFile ' Г§Г*êðûâГ*ГҐГ¬ ГґГ*éë
  49. Else ' åñëè ГІГҐГЈГ* Г*ГҐГІ
  50. Open varFileName For Binary As nFile ' îòêðûâГ*ГҐГ¬ ГґГ*éë
  51. Put nFile, LOF(nFile) - 127, "TAG" ' Г§Г*ïèñûâГ*ГҐГ¬ ìåòêó ГІГҐГЈГ*
  52. Close nFile ' Г§Г*êðûâГ*ГҐГ¬ ГґГ*éë
  53. Call Save ' âûïîëГ*ГїГҐГ¬ ðåêóðñèþ
  54. End If
  55. End Function
  56. ' äëÿ äîñòóïГ* ГЄ ГЄГ«Г*Г±Г±Гі èñïîëüçóåì ïðîöåäóðû ñâîéñòâ Property Get ГЁ Property Let
  57. Public Property Get Title() As String
  58. Title = Trim(info.sTitle)
  59. End Property
  60. Public Property Let Title(ByVal vNewValue As String)
  61. info.sTitle = vNewValue
  62. End Property
  63. Public Property Get FileName() As String
  64. End Property
  65. Public Property Let FileName(ByVal vNewValue As String)
  66. varFileName = vNewValue
  67. Read
  68. End Property
  69. Public Property Get Artist() As String
  70. Artist = Trim(info.sArtist)
  71. End Property
  72. Public Property Let Artist(ByVal vNewValue As String)
  73. info.sArtist = vNewValue
  74. End Property
  75. Public Property Get Album() As String
  76. Album = Trim(info.sAlbum)
  77. End Property
  78. Public Property Let Album(ByVal vNewValue As String)
  79. info.sAlbum = vNewValue
  80. End Property
  81. Public Property Get Year() As String
  82. Year = Trim(info.sYear)
  83. End Property
  84. Public Property Let Year(ByVal vNewValue As String)
  85. info.sYear = vNewValue
  86. End Property
  87. Public Property Get Comment() As String
  88. Comment = Trim(info.sComment)
  89. End Property
  90. Public Property Let Comment(ByVal vNewValue As String)
  91. info.sComment = vNewValue
  92. End Property
  93. Public Property Get Track() As Variant
  94. Track = info.sTrack(1)
  95. If Track = 0 Then Track = ""
  96. End Property
  97. Public Property Let Track(ByVal vNewValue As Variant)
  98. If Not IsNumeric(vNewValue) Or vNewValue > 255 Then
  99. MsgBox "Ââåäèòå öèôðó Г*ГҐ áîëüøå 255"
  100. Else
  101. info.sTrack(1) = vNewValue
  102. End If
  103. End Property
  104. Public Property Get Genre() As Variant
  105. Genre = info.sGenre
  106. End Property
  107. Public Property Let Genre(ByVal vNewValue As Variant)
  108. info.sGenre = vNewValue
  109. End Property

Далее в форму код:

Листинг программы
  1. Dim info As clsTagInfo
  2. Set info = New clsTagInfo
  3. info.FileName = "ПУТЬ К ФАЙЛУ MP3"
  4. cboGenre.ListIndex = info.Genre
  5. txtAlbum.Text = info.Album
  6. txtArtist.Text = info.Artist
  7. txtComment.Text = info.Comment
  8. txtTitle.Text = info.Title
  9. txtTrack.Text = info.Track
  10. txtYear.Text = info.Year

Ну и еще короче:

Листинг программы
  1. Private Sub Form_Load()
  2. Dim fNum As Integer
  3. Dim sTagIdent As String * 3
  4. Dim sTitle As String * 30
  5. Dim sArtist As String * 30
  6. Dim sAlbum As String * 30
  7. Dim sYear As String * 4
  8. Dim sComment As String * 30
  9. fNum = FreeFile
  10. 'Замените ярлык 'c:\MySong.mp3' любым вашим файлом.
  11. Open "c:\MySong.mp3" For Binary As fNum
  12. Seek #fNum, LOF(fNum) - 127
  13. Get #fNum, , sTagIdent
  14. If sTagIdent = "TAG" Then
  15. Get #fNum, , sTitle
  16. Get #fNum, , sArtist
  17. Get #fNum, , sAlbum
  18. Get #fNum, , sYear
  19. Get #fNum, , sComment
  20. End If
  21. Close #fNum
  22. MsgBox sTitle & "," & sArtist & "," & sAlbum & "," & sYear & "," & sComment
  23. End Sub

В первом варианте, можно создать свой .DLL файлик.

Решение задачи: «Получаем информацию об MP3 файле»

textual
Листинг программы
  1. format(369.5/86400,"h:mm:ss")
  2. format(timeserial(0,0,369.5),"h:mm:ss")

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы