Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Кто знает как безопасно добавить TAG1 или TAG2 в MP3 если его не существовало до того / 5 сообщений из 5, страница 1 из 1
24.01.2010, 14:05
    #36427417
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как безопасно добавить TAG1 или TAG2 в MP3 если его не существовало до того
Читать знаю как. Вот я уже доследил
В TAG2 на разную длину отдвигается начинка mp3 от даных тега. В TAG2 поля разной длины, там с навицией нет проблем, но понять не могу от чего зависит отступ такой большой и не определенный начинки даных mp3. В TAG1 (старый) информация добавляется в конец. Вот не определил пока каким образом она добавляется или тупо прибавляя те поля или там есть свои правила. TAG1 думаю вскорем буду знать как работает, а мне бы TAG2 для подписи CUE и BPM, а также для указания ссилок (не путь а реал.арт и название трека) на оригинал если этот трек является миксом или ремикс
с уважением Андрей
...
Рейтинг: 0 / 0
25.01.2010, 00:43
    #36428007
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как безопасно добавить TAG1 или TAG2 в MP3 если его не существовало до того
Думаю сдесь больше чем достаточно розжовано, только вот с английским не дружил. Теперь мучаюсь с переводчиком.
...
Рейтинг: 0 / 0
25.01.2010, 00:54
    #36428009
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как безопасно добавить TAG1 или TAG2 в MP3 если его не существовало до того
Так. Разсмотрил один файл. Вот только не понял почему такая строгая привязка к числу 2049 или 4097 (если не хватило). Ведь есть точное указание куда перейти (GOTO) зачем столько байтов пускать на ветер забивая неиспользованое 0. Может чтоб в другой раз было быстрее что-то менять...
Ясно стало. Значит сначало 10 байтов несут информацию:
ID3v2/file identifier "ID3"
ID3v2 version $03 00
ID3v2 flags %abc00000
ID3v2 size 4 * %0xxxxxxx

В моем примере:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ASC
73  - I
68  - D
51  - E
3   - версия
0   - версия
0   - флаг
0   - размер TAG
0   - размер TAG
15  - размер TAG
118 - размер TAG

Пробую:
15*128 (используется только 7 бит) + 118 = 2038 + 10 байт (те которые не учитываются) = 2049
...
Рейтинг: 0 / 0
25.01.2010, 17:58
    #36429839
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как безопасно добавить TAG1 или TAG2 в MP3 если его не существовало до того
Кое что начертил, что работает, только еще не все поля послушны. Несколько полей еще не работают. Работаю над этим.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
'Конвертує вхідний адрес в 16кову систему і розкидує в два байти їх
Public Function KonvertTo_2ByteHEXAdres(Adres As Long) As String
  Dim S As String
  S = Right("00000000" + Hex(Adres),  8 )
  KonvertTo_2ByteHEXAdres = Chr(CInt("&H" + Left(S,  2 ))) + Chr(CInt("&H" + Mid(S,  3 ,  2 ))) + Chr(CInt("&H" + Mid(S,  5 ,  2 ))) + Chr(CInt("&H" + Mid(S,  7 ,  2 )))
End Function

'Редагує TAG2
Public Function P_Tag2Save(VhShlah As String, NewTitle As String, NewArtist As String, NewAlbum As String, NewYear As String, NewComment As String, NewJanr As String, NewTrack As String, NewComposer As String, NewOrigArtist As String, NewCopyright As String, NewEncoder As String, NewURL As String, NewBPM As String) As Boolean
'Ця функція нічого не перевіряє. Вона прямо виконує збереження без перевірок. Перевірки повинні бути до неї!!!!

Dim StatONTAG2 As Boolean
StatONTAG2 = Not (NewTitle = "" And NewArtist = "" And NewAlbum = "" And NewYear = "" And NewComment = "" And NewJanr = "" And NewTrack = "" And NewComposer = "" And NewOrigArtist = "" And NewCopyright = "" And NewEncoder = "" And NewURL = "" And NewBPM = "")

Dim L As Long
Dim S As String
Dim MPos As Long
Dim TmpS As String
Dim TmpS_2 As String
Dim n As Long
Dim TmpZ As String
Dim TmpL As Long
Dim TypTag As Boolean
Dim GotoMP3 As Long
Dim MP3 As String
Dim Vstup As String

 L = FileLen(VhShlah)
Open VhShlah For Binary As # 55 
 S = Space(L)
 Get # 55 ,  1 , S
 Close  55 
 MPos =  1 
  If Left(S,  3 ) = "ID3" Then
    GotoMP3 = (Asc(Mid(S,  7 )) *  2048383 ) + (Asc(Mid(S,  8 )) *  16129 ) + (Asc(Mid(S,  9 )) *  127 ) + Asc(Mid(S,  10 ))
    MP3 = Mid(S, GotoMP3)
  Else
    MP3 = S
  End If
 S = ""
  
  
'If NewEncoder <> "" Then
'  S = S + "TBPM" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewEncoder))) + Chr(0) + Chr(0) + KonvToSimvOut_All(NewEncoder)
'End If
  
  
If NewEncoder <> "" Then
  S = S + "TENC" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewEncoder)) +  3 ) + Chr( 64 ) + Chr( 0 ) + Chr( 1 ) + Chr( 255 ) + Chr( 254 ) + KonvToSimvOut_All(NewEncoder)
End If
''If NewURL <> "" Then ' Є помилка!!!
''  S = S + "WXXX" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewURL)) + 2) + Chr(0) + Chr(0) + Chr(0) + Chr(0) + KonvToSimvOut_All(NewURL)
''End If
If NewCopyright <> "" Then
  S = S + "TCOP" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewCopyright)) +  3 ) + Chr( 0 ) + Chr( 0 ) + Chr( 1 ) + Chr( 255 ) + Chr( 254 ) + KonvToSimvOut_All(NewCopyright)
End If
If NewOrigArtist <> "" Then
  S = S + "TOPE" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewOrigArtist)) +  3 ) + Chr( 0 ) + Chr( 0 ) + Chr( 1 ) + Chr( 255 ) + Chr( 254 ) + KonvToSimvOut_All(NewOrigArtist)
End If
'If NewOrigArtist <> "" Then
'  S = S + "TPUB" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewOrigArtist)) + 3) + Chr(0) + Chr(0) + Chr(1) + Chr(255) + Chr(254) + KonvToSimvOut_All(NewOrigArtist)
'End If
'If NewOrigArtist <> "" Then
'  S = S + "TPOS" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewOrigArtist)) + 3) + Chr(0) + Chr(0) + Chr(1) + Chr(255) + Chr(254) + KonvToSimvOut_All(NewOrigArtist)
'End If
If NewTrack <> "" Then
  S = S + "TRCK" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewTrack)) +  3 ) + Chr( 0 ) + Chr( 0 ) + Chr( 1 ) + Chr( 255 ) + Chr( 254 ) + KonvToSimvOut_All(NewTrack)
End If
If NewComposer <> "" Then
  S = S + "TCOM" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewComposer)) +  3 ) + Chr( 0 ) + Chr( 0 ) + Chr( 1 ) + Chr( 255 ) + Chr( 254 ) + KonvToSimvOut_All(NewComposer)
End If
If NewArtist <> "" Then 'СПІВАК АЛЬБОМУ
  S = S + "TPE2" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewArtist)) +  3 ) + Chr( 0 ) + Chr( 0 ) + Chr( 1 ) + Chr( 255 ) + Chr( 254 ) + KonvToSimvOut_All(NewArtist)
End If
'Повторюється бо то тоже композитор
'If NewArtist <> "" Then
'  S = S + "COMM" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewArtist)) + 10) + Chr(0) + Chr(0) + Chr(1)+Chr(0)+Chr(0)+Chr(0)+Chr(255)+Chr(254)+Chr(0)+Chr(0) + Chr(255) + Chr(254) + KonvToSimvOut_All(NewArtist)
'End If
If NewTitle <> "" Then
  S = S + "TIT2" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewTitle)) +  3 ) + Chr( 0 ) + Chr( 0 ) + Chr( 1 ) + Chr( 255 ) + Chr( 254 ) + KonvToSimvOut_All(NewTitle)
End If
If NewAlbum <> "" Then
  S = S + "TALB" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewAlbum)) +  3 ) + Chr( 0 ) + Chr( 0 ) + Chr( 1 ) + Chr( 255 ) + Chr( 254 ) + KonvToSimvOut_All(NewAlbum)
End If
If NewArtist <> "" Then ' ЦЕ СПІВАК
  S = S + "TPE1" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewArtist)) +  3 ) + Chr( 0 ) + Chr( 0 ) + Chr( 1 ) + Chr( 255 ) + Chr( 254 ) + KonvToSimvOut_All(NewArtist)
End If
''If NewComment <> "" Then ' коментар не працює!!!
''  S = S + "COMM" + KonvertTo_2ByteHEXAdres(Len(KonvToSimvOut_All(NewComment)) + 3) + Chr(0) + Chr(0) + Chr(1) + Chr(255) + Chr(254) + KonvToSimvOut_All(NewComment)
''End If


If Len(S) <  2049  Then
  For n =  1  To  2049  - Len(S): S = S + Chr( 0 ): Next
  MP3 = "ID3" + Chr( 3 ) + Chr( 0 ) + Chr( 0 ) + Chr( 0 ) + Chr( 0 ) + Chr( 15 ) + Chr( 18 ) + S + MP3
End If
If Len(S) >  2048  And Len(S) <  4097  Then
  For n =  1  To  4097  - Len(S): S = S + Chr( 0 ): Next
  MP3 = "ID3" + Chr( 3 ) + Chr( 0 ) + Chr( 0 ) + Chr( 0 ) + Chr( 0 ) + Chr( 32 ) + Chr( 0 ) + S + MP3
End If

Open VhShlah For Binary As # 55 
 Put # 55 ,  1 , MP3
Close # 55 
End Function

Public Function KonvToSimvOut_All(Vhid As String) As String
If Vhid = "" Then Exit Function
Dim i As Long
 For i =  1  To Len(Vhid)
   KonvToSimvOut_All = KonvToSimvOut_All + KonvToSimvOut(Mid(Vhid, i,  1 ))
 Next
End Function

Function KonvToSimvOut(Simv As String) As String
  If Simv = "Ё" Then KonvToSimvOut = Chr( 1 ) + Chr( 4 ): Exit Function
  If Simv = "Є" Then KonvToSimvOut = Chr( 4 ) + Chr( 4 ): Exit Function
  If Simv = "І" Then KonvToSimvOut = Chr( 6 ) + Chr( 4 ): Exit Function
  If Simv = "Ї" Then KonvToSimvOut = Chr( 7 ) + Chr( 4 ): Exit Function
  If Simv = "А" Then KonvToSimvOut = Chr( 16 ) + Chr( 4 ): Exit Function
  If Simv = "Б" Then KonvToSimvOut = Chr( 17 ) + Chr( 4 ): Exit Function
  If Simv = "В" Then KonvToSimvOut = Chr( 18 ) + Chr( 4 ): Exit Function
  If Simv = "Г" Then KonvToSimvOut = Chr( 19 ) + Chr( 4 ): Exit Function
  If Simv = "Д" Then KonvToSimvOut = Chr( 20 ) + Chr( 4 ): Exit Function
  If Simv = "Е" Then KonvToSimvOut = Chr( 21 ) + Chr( 4 ): Exit Function
  If Simv = "Ж" Then KonvToSimvOut = Chr( 22 ) + Chr( 4 ): Exit Function
  If Simv = "З" Then KonvToSimvOut = Chr( 23 ) + Chr( 4 ): Exit Function
  If Simv = "И" Then KonvToSimvOut = Chr( 24 ) + Chr( 4 ): Exit Function
  If Simv = "Й" Then KonvToSimvOut = Chr( 25 ) + Chr( 4 ): Exit Function
  If Simv = "К" Then KonvToSimvOut = Chr( 26 ) + Chr( 4 ): Exit Function
  If Simv = "Л" Then KonvToSimvOut = Chr( 27 ) + Chr( 4 ): Exit Function
  If Simv = "М" Then KonvToSimvOut = Chr( 28 ) + Chr( 4 ): Exit Function
  If Simv = "Н" Then KonvToSimvOut = Chr( 29 ) + Chr( 4 ): Exit Function
  If Simv = "О" Then KonvToSimvOut = Chr( 30 ) + Chr( 4 ): Exit Function
  If Simv = "П" Then KonvToSimvOut = Chr( 31 ) + Chr( 4 ): Exit Function
  If Simv = "Р" Then KonvToSimvOut = Chr( 32 ) + Chr( 4 ): Exit Function
  If Simv = "С" Then KonvToSimvOut = Chr( 33 ) + Chr( 4 ): Exit Function
  If Simv = "Т" Then KonvToSimvOut = Chr( 34 ) + Chr( 4 ): Exit Function
  If Simv = "У" Then KonvToSimvOut = Chr( 35 ) + Chr( 4 ): Exit Function
  If Simv = "Ф" Then KonvToSimvOut = Chr( 36 ) + Chr( 4 ): Exit Function
  If Simv = "Х" Then KonvToSimvOut = Chr( 37 ) + Chr( 4 ): Exit Function
  If Simv = "Ц" Then KonvToSimvOut = Chr( 38 ) + Chr( 4 ): Exit Function
  If Simv = "Ч" Then KonvToSimvOut = Chr( 39 ) + Chr( 4 ): Exit Function
  If Simv = "Ш" Then KonvToSimvOut = Chr( 40 ) + Chr( 4 ): Exit Function
  If Simv = "Щ" Then KonvToSimvOut = Chr( 41 ) + Chr( 4 ): Exit Function
  If Simv = "Ъ" Then KonvToSimvOut = Chr( 42 ) + Chr( 4 ): Exit Function
  If Simv = "Ы" Then KonvToSimvOut = Chr( 43 ) + Chr( 4 ): Exit Function
  If Simv = "Ь" Then KonvToSimvOut = Chr( 44 ) + Chr( 4 ): Exit Function
  If Simv = "Э" Then KonvToSimvOut = Chr( 45 ) + Chr( 4 ): Exit Function
  If Simv = "Ю" Then KonvToSimvOut = Chr( 46 ) + Chr( 4 ): Exit Function
  If Simv = "Я" Then KonvToSimvOut = Chr( 47 ) + Chr( 4 ): Exit Function

  If Simv = "а" Then KonvToSimvOut = Chr( 48 ) + Chr( 4 ): Exit Function
  If Simv = "б" Then KonvToSimvOut = Chr( 49 ) + Chr( 4 ): Exit Function
  If Simv = "в" Then KonvToSimvOut = Chr( 50 ) + Chr( 4 ): Exit Function
  If Simv = "г" Then KonvToSimvOut = Chr( 51 ) + Chr( 4 ): Exit Function
  If Simv = "д" Then KonvToSimvOut = Chr( 52 ) + Chr( 4 ): Exit Function
  If Simv = "е" Then KonvToSimvOut = Chr( 53 ) + Chr( 4 ): Exit Function
  
  If Simv = "ж" Then KonvToSimvOut = Chr( 54 ) + Chr( 4 ): Exit Function
  If Simv = "з" Then KonvToSimvOut = Chr( 55 ) + Chr( 4 ): Exit Function
  If Simv = "и" Then KonvToSimvOut = Chr( 56 ) + Chr( 4 ): Exit Function
  If Simv = "й" Then KonvToSimvOut = Chr( 57 ) + Chr( 4 ): Exit Function
  If Simv = "к" Then KonvToSimvOut = Chr( 58 ) + Chr( 4 ): Exit Function
  If Simv = "л" Then KonvToSimvOut = Chr( 59 ) + Chr( 4 ): Exit Function
  If Simv = "м" Then KonvToSimvOut = Chr( 60 ) + Chr( 4 ): Exit Function
  If Simv = "н" Then KonvToSimvOut = Chr( 61 ) + Chr( 4 ): Exit Function
  If Simv = "о" Then KonvToSimvOut = Chr( 62 ) + Chr( 4 ): Exit Function
  If Simv = "п" Then KonvToSimvOut = Chr( 63 ) + Chr( 4 ): Exit Function
  If Simv = "р" Then KonvToSimvOut = Chr( 64 ) + Chr( 4 ): Exit Function
  If Simv = "с" Then KonvToSimvOut = Chr( 65 ) + Chr( 4 ): Exit Function
  If Simv = "т" Then KonvToSimvOut = Chr( 66 ) + Chr( 4 ): Exit Function
  If Simv = "у" Then KonvToSimvOut = Chr( 67 ) + Chr( 4 ): Exit Function
  If Simv = "ф" Then KonvToSimvOut = Chr( 68 ) + Chr( 4 ): Exit Function
  If Simv = "х" Then KonvToSimvOut = Chr( 69 ) + Chr( 4 ): Exit Function
  If Simv = "ц" Then KonvToSimvOut = Chr( 70 ) + Chr( 4 ): Exit Function
  If Simv = "ч" Then KonvToSimvOut = Chr( 71 ) + Chr( 4 ): Exit Function
  If Simv = "ш" Then KonvToSimvOut = Chr( 72 ) + Chr( 4 ): Exit Function
  If Simv = "щ" Then KonvToSimvOut = Chr( 73 ) + Chr( 4 ): Exit Function
  If Simv = "ъ" Then KonvToSimvOut = Chr( 74 ) + Chr( 4 ): Exit Function
  If Simv = "ы" Then KonvToSimvOut = Chr( 75 ) + Chr( 4 ): Exit Function
  If Simv = "ю" Then KonvToSimvOut = Chr( 78 ) + Chr( 4 ): Exit Function
  If Simv = "я" Then KonvToSimvOut = Chr( 79 ) + Chr( 4 ): Exit Function
  If Simv = "ь" Then KonvToSimvOut = Chr( 76 ) + Chr( 4 ): Exit Function
  If Simv = "э" Then KonvToSimvOut = Chr( 77 ) + Chr( 4 ): Exit Function
  If Simv = "ё" Then KonvToSimvOut = Chr( 81 ) + Chr( 4 ): Exit Function
  If Simv = "є" Then KonvToSimvOut = Chr( 84 ) + Chr( 4 ): Exit Function
  If Simv = "і" Then KonvToSimvOut = Chr( 86 ) + Chr( 4 ): Exit Function
  If Simv = "ї" Then KonvToSimvOut = Chr( 87 ) + Chr( 4 ): Exit Function
  
  KonvToSimvOut = Simv + Chr( 0 )
End Function

Код: plaintext
Call P_Tag2Save("z:\p1.mp3","Title","Artist","Albom","God","Coment","Janr","Track","Composer","OrigArtist","Copyright","Encoder","URL","BMP")
...
Рейтинг: 0 / 0
25.01.2010, 18:00
    #36429849
Андрей159
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кто знает как безопасно добавить TAG1 или TAG2 в MP3 если его не существовало до того
А вот сканер для сравнения двох файлов (с тегом и без тега). Прога оставляет только TAG2.
Для ее работы нужно создать кнопку и List1, List2

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Private Sub Command1_Click()
  Dim s1 As String
  Dim s2 As String
  Const p1 = "z:\p1.mp3"
  Const p2 = "z:\p2.mp3"
  Dim L As Long
  s1 = Space(FileLen(p1))
  Open p1 For Binary As # 1 
    Get # 1 ,  1 , s1
  Close  1 
  s2 = Space(FileLen(p2))
  Open p2 For Binary As # 1 
    Get # 1 ,  1 , s2
  Close  1 
    L = InStr(s2, s1)
    MsgBox L
'2049
'4097
  If L =  0  Then Exit Sub
  Dim i As Long
  List1.Clear
  List2.Clear
  For i =  1  To L -  1 
    List1.AddItem i
    List2.AddItem Str(Asc(Mid(s2, i,  1 ))) + " " + Mid(s2, i,  1 )
  Next
  
End Sub

Private Sub List2_Click()
  List1.ListIndex = List2.ListIndex
End Sub
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Кто знает как безопасно добавить TAG1 или TAG2 в MP3 если его не существовало до того / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]