Получить информацию об аудио-файле из плейлиста/с CD/DVD, изменить текущую позицию - VB

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

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

В моем аудио-плеере есть всего заметных невооруженным глазом бага: не выходит получить информацию об аудио-файле из плейлиста [формат M3U] и также из CD/DVD диска (то есть название, альбом, год, если они записаны в тегах). И ещё нельзя перемотать на нужное место запись из плейлиста и диска. Вот фрагменты кода, которые работают с обычными аудио-файлами и совершенно не работают с плейлистами и дисками. Получить данные из тегов файла:
Листинг программы
  1. ' opredeliaem svoistva MP3 file
  2. ' delaem vidimimi LABELs
  3. lblStatus.Visible = True
  4. lblTitleHL.Visible = True
  5. lblArtistHL.Visible = True
  6. lblAlbumHL.Visible = True
  7. lblYearHL.Visible = True
  8. lblCommentHL.Visible = True
  9. ' vse peremenie localnie
  10. Dim fNum As Integer
  11. Dim sTagIdent As String * 3
  12. Dim sTitle As String * 30
  13. Dim sArtist As String * 30
  14. Dim sAlbum As String * 30
  15. Dim sYear As String * 4
  16. Dim sComment As String * 30
  17. fNum = FreeFile
  18. ' esli iz file, to 4itaem tak
  19. If urlfile = True Then
  20. Open CDlg1.FileName For Binary As fNum
  21. Seek #fNum, LOF(fNum) - 127
  22. Get #fNum, , sTagIdent
  23. If sTagIdent = "TAG" Then
  24. Get #fNum, , sTitle
  25. Get #fNum, , sArtist
  26. Get #fNum, , sAlbum
  27. Get #fNum, , sYear
  28. Get #fNum, , sComment
  29. End If
  30. Close #fNum
  31. ' vivod
  32. lblTitleHL.Caption = "Title: " & sTitle
  33. lblArtistHL.Caption = "Artist: " & sArtist
  34. lblAlbumHL.Caption = "Album: " & sAlbum
  35. lblYearHL.Caption = "Year: " & sYear
  36. lblCommentHL.Caption = "Comment: " & sComment
  37. End If
Перемотать запись на нужное место [Position - это объект Slider]:
Листинг программы
  1. ' нажатие кнопки мыши на слайдер
  2. Private Sub Position_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
  3. ' esli nazhatie na SLIDER - menyaem position
  4. tmrUpdate.Enabled = False
  5. Player.Controls.currentPosition = Position.Value
  6. End Sub
  7. ' отпускание кнопки мыши со слайдера
  8. Private Sub Position_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
  9. ' esli nazhatie na SLIDER - menyaem position
  10. tmrUpdate.Enabled = True
  11. Player.Controls.currentPosition = Position.Value
  12. End Sub
  13. ' обновляется каждую миллисекунду и выводит текущее время записи
  14. Private Sub tmrUpdate_Timer()
  15. ' position maximalnoe
  16. If urlfile = True Then
  17. ' вызов функции Pos
  18. Pos
  19. ' dvigat ego na SLIDER
  20. Position.Value = Player.Controls.currentPosition
  21. End If
  22. End Sub
  23. ' позволяет получить время записи в секундах, используется функция из модуля
  24. Public Function Pos()
  25. ' 2 znaka sleva - minuti
  26. aPos = Left(MP3HeaderInfo.FPlayTime, 2) * 60
  27. ' pribavlyaem k secyndam
  28. bPos = Right(MP3HeaderInfo.FPlayTime, 2) + aPos
  29. ' vivodim ograni4enye SLIDERa
  30. Position.Max = bPos
  31. End Function
Из модуля:
Листинг программы
  1. Option Explicit
  2. Public sGenreMatrix
  3. Type Info
  4. sTitle As String * 30
  5. sArtist As String * 30
  6. sAlbum As String * 30
  7. sComment As String * 30
  8. sYear As String * 4
  9. sGenre As String * 21 ' NEW
  10. End Type
  11. Type HeaderInfo
  12. Layer As String
  13. Frequency As String
  14. Bitrate As String
  15. Mode As String
  16. MpegVersion As String
  17. Emphasis As String
  18. FPlayTime As String 'Formatted playing time - 04:32
  19. mFileSize As String
  20. End Type
  21. Public MP3Info As Info
  22. Public MP3HeaderInfo As HeaderInfo
  23. ''''''Read MP3 Header BEGIN''''''
  24. Public Function ReadMP3Header(sPassFileName As String)
  25. Dim z, i
  26. Dim BinaryString As String
  27. Dim byteArray(4) As Byte 'array that store first four bytes
  28. Dim bin As String 'string that store binary number converted from readed bytes
  29. Dim BinString As String 'containing binary string
  30. Dim DecString As Integer 'containing decimal extracted from BinString
  31. '''''''''''''''end of declarations'''''''
  32. On Error GoTo ende
  33. Open sPassFileName For Binary Access Read As #1 'open file #1 for read
  34. For z = 1 To 4 'step through four bytes
  35. Get #1, z, byteArray(z) 'store every(z)byte in array position z
  36. Next z 'back for next byte
  37. Close #1 'close file
  38. bin = "" 'reset and build the desired binary number in this string
  39. For z = 1 To 4 'convert all bytes to binary
  40. For i = 0 To 7 Step 1 'Here comes the decimal=>binary conversion
  41. If byteArray(z) And (2 ^ i) Then 'Use the logical "AND" operator.
  42. bin = bin + "1"
  43. Else
  44. bin = bin + "0"
  45. End If
  46. Next i 'End of binary conversion
  47. Next z
  48. BinaryString = bin
  49. '''''''''check MP3HeaderInfo.Frequency''''
  50. DecString = 0
  51. BinString = Mid(bin, 19, 2) 'take 19 to 21
  52. For i = 1 To Len(BinString) 'convert to decimal
  53. If Mid(BinString, i, 1) = 1 Then
  54. DecString = DecString + 2 ^ (Len(BinString) - i)
  55. End If
  56. Next i
  57. Select Case DecString
  58. Case 0
  59. MP3HeaderInfo.Frequency = 44100
  60. Case 1
  61. MP3HeaderInfo.Frequency = 32000
  62. Case 2
  63. MP3HeaderInfo.Frequency = 48000
  64. Case 3
  65. End Select
  66. '''''check MP3HeaderInfo.Layer''''
  67. DecString = 0
  68. BinString = Mid(bin, 10, 2)
  69. For i = 1 To Len(BinString)
  70. If Mid(BinString, i, 1) = 1 Then
  71. DecString = DecString + 2 ^ (Len(BinString) - i)
  72. End If
  73. Next i
  74. Select Case DecString
  75. Case 0
  76. MP3HeaderInfo.Layer = ""
  77. Case 1
  78. MP3HeaderInfo.Layer = 2
  79. Case 2
  80. MP3HeaderInfo.Layer = 3
  81. Case 3
  82. MP3HeaderInfo.Layer = 1
  83. End Select
  84. ''''check MP3HeaderInfo.Mode''''
  85. DecString = 0
  86. BinString = Mid(bin, 31, 2)
  87. For i = 1 To Len(BinString)
  88. If Mid(BinString, i, 1) = 1 Then
  89. DecString = DecString + 2 ^ (Len(BinString) - i)
  90. End If
  91. Next i
  92. Select Case DecString
  93. Case 0
  94. MP3HeaderInfo.Mode = "Stereo"
  95. Case 1
  96. MP3HeaderInfo.Mode = "Dual Channel"
  97. Case 2
  98. MP3HeaderInfo.Mode = "Joint stereo"
  99. Case 3
  100. MP3HeaderInfo.Mode = "Mono"
  101. End Select
  102. ''''check MP3HeaderInfo.MpegVersion
  103. If Mid(bin, 12, 1) = 0 Then
  104. MP3HeaderInfo.MpegVersion = 2
  105. Else
  106. MP3HeaderInfo.MpegVersion = 1
  107. End If
  108. '''''check MP3HeaderInfo.Bitrate''''
  109. DecString = 0
  110. BinString = Mid(bin, 21, 4)
  111. For i = 1 To Len(BinString)
  112. If Mid(BinString, i, 1) = 1 Then
  113. DecString = DecString + 2 ^ (Len(BinString) - i)
  114. End If
  115. Next i
  116. Select Case DecString
  117. Case 0
  118. MP3HeaderInfo.Bitrate = 0
  119. Case 1
  120. MP3HeaderInfo.Bitrate = 112
  121. Case 2
  122. MP3HeaderInfo.Bitrate = 56
  123. Case 3
  124. MP3HeaderInfo.Bitrate = 224
  125. Case 4
  126. MP3HeaderInfo.Bitrate = 40
  127. Case 5
  128. MP3HeaderInfo.Bitrate = 160
  129. Case 6
  130. MP3HeaderInfo.Bitrate = 80
  131. Case 7
  132. MP3HeaderInfo.Bitrate = 320
  133. Case 8
  134. MP3HeaderInfo.Bitrate = 32
  135. Case 9
  136. MP3HeaderInfo.Bitrate = 128
  137. Case 10
  138. MP3HeaderInfo.Bitrate = 64
  139. Case 11
  140. MP3HeaderInfo.Bitrate = 256
  141. Case 12
  142. MP3HeaderInfo.Bitrate = 128 '48
  143. Case 13
  144. MP3HeaderInfo.Bitrate = 192
  145. Case 14
  146. MP3HeaderInfo.Bitrate = 96
  147. Case 15
  148. MP3HeaderInfo.Bitrate = 0
  149. If MP3HeaderInfo.Layer = 1 Then
  150. Select Case DecString
  151. Case 0
  152. MP3HeaderInfo.Bitrate = 0
  153. Case 1
  154. MP3HeaderInfo.Bitrate = 128
  155. Case 2
  156. MP3HeaderInfo.Bitrate = 64
  157. Case 3
  158. MP3HeaderInfo.Bitrate = 256
  159. Case 4
  160. MP3HeaderInfo.Bitrate = 48
  161. Case 5
  162. MP3HeaderInfo.Bitrate = 192
  163. Case 6
  164. MP3HeaderInfo.Bitrate = 96
  165. Case 7
  166. MP3HeaderInfo.Bitrate = 384
  167. Case 8
  168. MP3HeaderInfo.Bitrate = 32
  169. Case 9
  170. MP3HeaderInfo.Bitrate = 160
  171. Case 10
  172. MP3HeaderInfo.Bitrate = 80
  173. Case 11
  174. MP3HeaderInfo.Bitrate = 320
  175. Case 12
  176. MP3HeaderInfo.Bitrate = 56
  177. Case 13
  178. MP3HeaderInfo.Bitrate = 224
  179. Case 14
  180. MP3HeaderInfo.Bitrate = 112
  181. Case 15
  182. MP3HeaderInfo.Bitrate = 0
  183. End Select
  184. End If
  185. End Select
  186. '''''MP3HeaderInfo.Emphasis''''
  187. DecString = 0
  188. BinString = Mid(bin, 25, 2)
  189. For i = 1 To Len(BinString) 'go from first
  190. If Mid(BinString, i, 1) = 1 Then
  191. DecString = DecString + 2 ^ (Len(BinString) - i)
  192. End If
  193. Next i
  194. Select Case DecString
  195. Case 0
  196. MP3HeaderInfo.Emphasis = "No"
  197. Case 1
  198. MP3HeaderInfo.Emphasis = "-?-"
  199. Case 2
  200. MP3HeaderInfo.Emphasis = "50/15"
  201. Case 3
  202. MP3HeaderInfo.Emphasis = "CITT j. 17"
  203. End Select
  204. With MP3HeaderInfo
  205. Dim min, sec
  206. .Bitrate = Int(.Bitrate)
  207. .mFileSize = FileSizeMP3(sPassFileName)
  208. .FPlayTime = ((.mFileSize * 8) / (.Bitrate * 1000))
  209. min = .FPlayTime \ 60 'minutes
  210. sec = .FPlayTime - (min * 60) 'seconds
  211. .FPlayTime = Format(min, "#0#") & ":" & Format(sec, "0#") 'format time to 00:00
  212. End With
  213. ende:
  214. End Function
  215. ''''''Read MP3 Header END''''''

Решение задачи: «Получить информацию об аудио-файле из плейлиста/с CD/DVD, изменить текущую позицию»

textual
Листинг программы
  1. Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
  2. Dim lTotalTime As Long
  3. Dim strFileToPlay As String
  4.  
  5. Private Sub TotalTime()
  6.     Dim TotalTime As String * 128
  7.     mciSendString "open " & strFileToPlay & " type MPEGVideo", 0, 0, 0
  8.     mciSendString "set " & strFileToPlay & " time format ms", TotalTime, 128, 0&
  9.     mciSendString "status " & strFileToPlay & " length", TotalTime, 128, 0&
  10.     lTotalTime = Val(TotalTime)
  11.    
  12. End Sub
  13.  
  14. Private Sub Command1_Click()
  15. mciSendString "close all", 0, 0, 0
  16. strFileToPlay = Chr(34) & "C:\E. Vaenga - Kurju.mp3" & Chr(34)
  17. TotalTime
  18. MsgBox lTotalTime / 1000 & "сек."
  19. End Sub
  20.  
  21. Private Sub Form_Unload(Cancel As Integer)
  22. mciSendString "close all", 0, 0, 0
  23. End Sub

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


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

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

13   голосов , оценка 4.154 из 5

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

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

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