1

Тема: VBS: Разобрать MP3 файлы

Добрый день

Пришла идея навести порядок в своей медиатеке, проблема в том, что очень много файлов песен с непонятными именами и исполнителями. Перебрал целую кучу программ, которые заполняют информацию о mp3 файле, но ищут ее в зависимости если имеется хоть какое-либо название файла вообщем тупиковая ветка. Если мне перебрать мой архив музыки нужно просто каждый файлик  послушать определить исполнителя и переименовать.

У меня на телефоне имеется программа TrackID интересная программа по определению музыки по звуку с динамика.

Нашел сервис который действует с данным проектом http://supertrubka.org/trackid/trackid.php
Загружаем  файл AMR  и получаем например:

Track: What I've Done
Artist: Linkin Park
Album: Minutes To Midnight

Берем данные имена и переименовываем при помощи скрипта.

Итого:
1) При помощи скрипта производим перебор файлов MP3. Берем файл.
2) Далее конвертируем в AMR первые 10 секунд(правда нужна какой-нибудь конверте, который переводил бы в AMR из MP3).
3) Определяем при помощи сервиса.
4) При помощи скрипта производим переименование файла MP3
5)  И уже при помощи программ производим заполнение альбома в описании MP3

Как еще перебрать архив с музыкой пока не определил. Хотя в интернете многие говорят что проще удалить

Так же еще рассказывают, что можно через строку подключения когда браузер выдает себя за телефон, но его запустить у меня не получилось.

Прошу прощения если написал не в том разделе.

Post's attachments

ссылка.rar 787 b, 7 downloads since 2016-01-11 

You don't have the permssions to download the attachments of this post.

2

Re: VBS: Разобрать MP3 файлы

wildwolf007 пишет:

но ищут ее в зависимости если имеется хоть какое-либо название файла

Эти все проверялись - 1, 2, 3, 4 ?
А откуда они набрались безымянные-то?

Прошу прощения если написал не в том разделе.

Префикс VBS: убрать и будет подходящий.

3

Re: VBS: Разобрать MP3 файлы

Взялись с компакт дисков. Названия неизвестный или 01-track.mp3 например.

4

Re: VBS: Разобрать MP3 файлы

Перебрал целую кучу софта, но проблема одна все программы берут информацию из файла либо от его описания если же происходит анализ файла, то он достаточно сырой и из 10 файлов определяет 5 композиций и то, из этих 5 файла 3 определяет как индийские песни и подгружает обложку индийского альбома
Получается база у Sony самая лучшая и определяет процентов 80 всех закинутых в нее песен.

Ваши ссылки еще раз перепроверил все указанные программы действуют по такому же принципу указанному выше.

Если не получится все автоматизировать придется все эти операции производить вручную чего бы очень не хотелось бы.

Программами указанными Вами можно в конечном итоге произвести заполнение тегов и закачки обложки на правильно определенные композиции.

5

Re: VBS: Разобрать MP3 файлы

wildwolf007 пишет:

все указанные программы действуют по такому же принципу указанному выше.

Взял, к примеру, 2 последние программы, закинул туда файлы из альбома Пелагеи полностью без тегов и имён композий (даже в путях), в итоге сервер MusicBrainz вернул мне чёткий результат.

6

Re: VBS: Разобрать MP3 файлы

Я раньше делал через WMP OCX, но он вроде бы шарит только по ID3 тэгам.


Set wmp = WScript.CreateObject("WMPlayer.OCX")
Set media = wmp.newMedia("my.mp3")
Dim s
For i=0 to media.attributeCount-1
	s = s & media.getAttributeName(i) & ": " & media.getItemInfo(media.getAttributeName(i)) & vbCrlf
Next
msgbox s

А как альтерантива сделать Upload трэков на сервис через WinHttpRequest и получение инфы со страницы не вариант ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

7

Re: VBS: Разобрать MP3 файлы

Xameleon пишет:

А как альтерантива сделать Upload трэков на сервис через WinHttpRequest и получение инфы со страницы не вариант ?

А как? Там же скриптовые кнопки, одна из которых выводит окно выбора файла.

8

Re: VBS: Разобрать MP3 файлы

Flasher, попробуем обойти)

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

9 (изменено: Flasher, 2016-01-13 00:46:33)

Re: VBS: Разобрать MP3 файлы

Xameleon
Хм. И без объекта IE? Интересно будет посмотреть. В таком случае с меня конвертер MP3 в AMR:

Set FSO = CreateObject("Scripting.FileSystemObject")
Dim WSH : Set WSH = CreateObject("WScript.Shell")

MadPlay = """C:\MyPrograms\Mobile AMR converter\madplay.exe"""
AMRConv = """C:\MyPrograms\Mobile AMR converter\Converter.exe"""
TempFile = CreateObject("Shell.Application")._
NameSpace(WSH.ExpandEnvironmentStrings("%TEMP%")).Self.Path & "\" & FSO.GetTempName

Convert "C:\stock\MusicFile.mp3"

Sub Convert(FilePath)
  WSH.Run MadPlay & "-m -R 8000 -b 16 -o wave:" & TempFile & " """ & FilePath & """", 0, True
  WSH.Run AMRConv & " wav2amr " & TempFile & " """ & FSO.GetParentFolderName(FilePath) &_
  "\" & FSO.GetBaseName(FilePath) & ".amr"" MR122", 0, True
  FSO.GetFile(TempFile).Delete
End Sub
Post's attachments

Converter.7z 211.54 kb, 8 downloads since 2016-01-12 

You don't have the permssions to download the attachments of this post.

10

Re: VBS: Разобрать MP3 файлы

Flasher, ок. А с меня код загрузки на сайт и парсинг. )

Как выяснилось, там передаётся обычный POST (multipart) запрос.

Тестировал на файле 1.amr. Добавил его к посту ниже.


'Константы режима работы ADODB.Stream
Const adTypeBinary = 1
Const adTypeText = 2

'Префикс разделителей данных
Const boundaryPrefix = "--"
'Boundary - разделитель блоков данных
Const boundary = "----WebKitFormBoundary5iH6W3g1OUAMdwgQ"

'Объект для передачи данных по http протоколу
Dim httpRequest
Set httpRequest = createObject("WinHttp.WinHttpRequest.5.1")
'Для красоты задаём заголовок User-Agent
httpRequest.option(0) = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"

'Объект для работы с файлами в binary mode
Dim stream
Set stream = createObject("ADODB." & "Stream")

'Буффер для складывания временных данных
Dim buffer
With stream
	'Указываем в какой кодировке мы пишем строки в Stream
	.charset = "Windows-1251"
	'Выставляем двоичный режим работы
	.type = adTypeBinary
	'Открываем stream
	.open
	'Загружаем в него тело нашего amr файла
	.loadFromFile "1.amr"
	'Кидаем в буффер
	data = .Read
	'Закрываем стрим, чтобы очистилось содержимое
	.close
	
	'Меняем режим на текстовый, чтобы записать в него заголовки
	.type = adTypeText
	'Открываем стрим
	.open

	'Пишем текстовые заголовок перед телом файла
	.writeText boundaryPrefix & boundary & vbCrlf & _
			"Content-Disposition: form-data; name=""userfile""; filename=""1.amr""" & vbCrlf & _
			"Content-Type: application/octet-stream" & vbCrlf & _
			vbCrlf
	
	'Переключаем режим работы на двоичный
	changeStreamType stream, adTypeBinary

	'Пишем тело файла
	.write data

	'Переключаем режим работы на текстовый
	changeStreamType stream, adTypeText
	
	'Дописываем оставшиеся данные
	.writeText vbCrlf & boundaryPrefix & boundary & vbCrlf & _
			"Content-Disposition: form-data; name=""lng""" & vbCrlf & _
			vbCrlf & _
			"russian" & vbCrlf & _
			boundaryPrefix & boundary & vbCrlf & _
			"Content-Disposition: form-data; name=""MAX_FILE_SIZE""" & vbCrlf & _
			vbCrlf & _
			"512000" & vbCrlf & _
			boundaryPrefix & boundary & vbCrlf & _
			"Content-Disposition: form-data; name=""submit""" & vbCrlf & _
			vbCrlf & _
			"Search!" & vbCrlf & _
			boundaryPrefix & boundary & boundaryPrefix & vbCrlf
	
	'Перематываем стрим на начало
	.position = 0
	'Возвращаемся в двоичный режим работы
	.type = 1
End With

'Отправляем нашу посылку
With HttpRequest
	.Open "POST","http://supertrubka.org/trackid/trackid.php", False
	.SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & boundary
	.Send stream.Read
End With

'****
'Вообще тут стоит сделать регулярки. Но пока соберём коряво для теста
'****

'Грузим данные в html документ
Dim document
Set document = CreateObject("htmlfile")
With document
	'Отключаем исполнение скриптов
	.designMode = "on"
	.open
	.write HttpRequest.responseText
	.close
End With

'Перебираем все тэги "U" и ищем те, которые содержат нужный нам префикс
Dim uTag, track, artist, album 
For Each uTag in document.all.tags("u")
	if InStr(1,uTag.innerText,"Track:",1) > 0 Then
		'Делим по двоеточию и убираем пробелы про краям
		track = Trim(split(uTag.parentElement.innerText,":",2)(1))
	Else
		if InStr(1,uTag.innerText,"Artist:",1) > 0 Then
			artist = Trim(split(uTag.parentElement.innerText,":",2)(1))
		Else
			if InStr(1,uTag.innerText,"Album:",1) > 0 Then
				album = Trim(split(uTag.parentElement.innerText,":",2)(1))
			End If
		End If
	End if
Next

MsgBox "Альбом: " & album & vbCrlf & "Трэк: " & track & vbCrlf & "Исполнитель: " & Artist, vbInformation

'Процедура переключения режима работы stream	
Sub changeStreamType(stream, streamType)
	Dim position
	With Stream
		position = stream.position
		.position = 0
		.Type = streamType
		.position = position
	End With
End Sub
Post's attachments

1.amr 113.16 kb, 6 downloads since 2016-01-12 

You don't have the permssions to download the attachments of this post.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

11

Re: VBS: Разобрать MP3 файлы

Xameleon
Вэри найс. Работает! Ещё до правки с двумя файликами попробовал.
Теперь можно менять на регулярки и объединять под рекурсию.
Мне, в принципе, несложно доделать, если лень.

12

Re: VBS: Разобрать MP3 файлы

Flasher 1) Рад, что пригодилось ) 2) Не лень, просто регулярки никак не освою нормально. ( Так что буду благодарен за помощь.

P.S Можно ещё через http://www.mp3cut.ru/ конвертнуть и обрезать. ) Тогда вообще утилиты не понадобятся.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

13

Re: VBS: Разобрать MP3 файлы

Xameleon
С регулярками разберёмся. А вот насчёт замены утилит не уверен. Ведь тогда и теги вбивать придётся через сервис. Это ж  сколько нужно инет дёргать в таком случае?
А то я тут уже заготовил парочку утилит на выбор. ID3 и Tag (в скрепке).

Post's attachments

tag_2.0.52.zip 195.28 kb, 4 downloads since 2016-01-13 

You don't have the permssions to download the attachments of this post.

14

Re: VBS: Разобрать MP3 файлы

Flasher, не понял. Зачем тэги вбивать ? O_o Вроде же исходно считаем, что mp3 никакой информации о себе не содержит ? Я что-то упустил ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

15

Re: VBS: Разобрать MP3 файлы

Ну так надо переименовать и теги вбить заодно, как это в указанных прогах делается.

16

Re: VBS: Разобрать MP3 файлы

Так вроде WMP.OCX позволяет это делать ? У него есть метод - SetItemInfo.

Или это только для медиатеки установка свойств элемента, но на файл не сказывается ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

17 (изменено: Flasher, 2016-01-13 06:44:13)

Re: VBS: Разобрать MP3 файлы

В Note написано, что вроде как можно. Я не пробовал. Нужно проверить.

Add: Работает, но нестабильно. Какие-то теги при перезаписи блокирует, какие-то пишет всегда.

File   = WScript.Arguments(0)  ' через параметр
Name   = "Название композиции"
Album  = "Название альбома"
Artist = "Исполнитель"
Genre  = "Жанр"

Set WMP  = CreateObject("WMPlayer.OCX")
Set Coll = WMP.MediaCollection
Set Song = Coll.Add(File)
Call SetAttr("Name",Name)("Description",Name)("Title",Name)("Album",Album)_
    ("WM/AlbumTitle",Album)("HMEAlbumTitle",Album)("DisplayArtist",Artist)_
("Author",Artist)("WM/AlbumArtist",Artist)("Genre",Genre)("WM/Genre",Genre)
Coll.Remove Song, True

Function SetAttr(Attr, Item)
  If Not Song.isReadOnlyItem(Attr) Then Song.setItemInfo Attr, Item
  Set SetAttr = GetRef("SetAttr")
End Function

18

Re: VBS: Разобрать MP3 файлы

Flasher, в принципе можно и так наверное - sample (последний пост)

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

19 (изменено: Flasher, 2016-01-13 17:13:39)

Re: VBS: Разобрать MP3 файлы

Xameleon
Эм. Что-то мне подсказывает, что утилита это куда быстрее сделает. Что выбрать-то в итоге?
Регулярки там простые.

+ Это
With New Regexp
  .Multiline = True
  .Pattern = "^.+u>.+;(.+)</b>.+;(.+)</b>.+;(.+)</b>"
  All = Split(.Replace(.Execute(HttpRequest.ResponseText)(0), "$1*$2*$3"),"*")
End With : Track = All(0) : Artist = All(1) : Album = All(2)

вместо

+ этого
'Грузим данные в html документ
Dim document
Set document = CreateObject("htmlfile")
With document
	'Отключаем исполнение скриптов
	.designMode = "on"
	.open
	.write HttpRequest.responseText
	.close
End With

'Перебираем все тэги "U" и ищем те, которые содержат нужный нам префикс
Dim uTag, track, artist, album 
For Each uTag in document.all.tags("u")
	if InStr(1,uTag.innerText,"Track:",1) > 0 Then
		'Делим по двоеточию и убираем пробелы про краям
		track = Trim(split(uTag.parentElement.innerText,":",2)(1))
	Else
		if InStr(1,uTag.innerText,"Artist:",1) > 0 Then
			artist = Trim(split(uTag.parentElement.innerText,":",2)(1))
		Else
			if InStr(1,uTag.innerText,"Album:",1) > 0 Then
				album = Trim(split(uTag.parentElement.innerText,":",2)(1))
			End If
		End If
	End if
Next

20

Re: VBS: Разобрать MP3 файлы

Flasher Ого, супер ! ) Поправлю свой скрипт.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

21

Re: VBS: Разобрать MP3 файлы

Xameleon
Ок. Я даже ещё подсократил выражение.
Предлагаю согласовать итоговый вариант.
Данные: папка с подпапками, флаг рекурсии (определит, см. ли в глубину).
Выполняем, появлется всплывающее оконце, что пошла запись. Наподобие:

Set HH = CreateObject("Internet.HHCtrl")
HH.TextPopup "Поиск тегов запущен!"&vbCr&"Ожидайте ...",_
"Verdana,10", 11, 8, 6611199, 3549952 : WScript.Sleep 300

Скрипт проверяет наличие тегов в файлах, если несовпадающее с именем название есть, то переименовываем в него.
В конце видим окно оповещения, что все возможные файлы переименованы и заполнены отсутствующими тегами.

P.S.: По-моему, тему давно пора переносить сюда.

22

Re: VBS: Разобрать MP3 файлы

Прошу прощения я немного затерялся в делах. Может попробовать загрузить на оф сайт сайт Sony без посредников ?
Там как-то предлагается произвести подмену якобы мы это телефон http://trackid.gracenote.com/trackid/pa … access.jsp

Скажите кто-то уже собрал итоговое решение ?

23

Re: VBS: Разобрать MP3 файлы

И еще вопрос если мы делаем рекурсию и сильно ли будет заметно что мы тут так сильно сервис загружаем ? Что б не поставили автоопределитель что я  не робот... И готовое решение может не нужно опубликовывать здесь ?

24

Re: VBS: Разобрать MP3 файлы

http://wap.sonyericsson.com/recognize/query и еще это ваповская версия, а сейчас на современном TrackID как используется ? Установил BlueStacks и установил TrackID при запуске  песни он определил как альбом 1992 года а в дальнейшем оказалось 1982 год.

Post's attachments

скрин.rar 468.77 kb, 3 downloads since 2016-01-16 

You don't have the permssions to download the attachments of this post.

25

Re: VBS: Разобрать MP3 файлы

В начале темы имеется прикрепленный файл и там указан сервис прямой.

26 (изменено: wildwolf007, 2016-01-16 12:36:44)

Re: VBS: Разобрать MP3 файлы

Flasher скажи а обрезать трек ? у меня получилось сейчас конвертнуть, но размер больше 500 кб? Например брать в обработку только 20 секунд от начала трека?

27

Re: VBS: Разобрать MP3 файлы

И так ж официальный сайт показывает год издания альбома и картинку альбома.

28

Re: VBS: Разобрать MP3 файлы

wildwolf007 пишет:

Прошу прощения я немного затерялся в делах.

Большая просьба на сыпать сообщениями, а править одно, как положено, чтобы другие не затерялись.
И для начала не плохо бы прокомментировать сообщение касаемо теста программ.

wildwolf007 пишет:

Скажите кто-то уже собрал итоговое решение ?

Я сперва ждал Xameleon, потом вчера сам собрал, но возникла проблемка с рекурсией. Скрипт почему-то выбивает до обработки папок. Пока думаю.
Общая скорость обработки из-за конвертации, увы, куда медленнее, чем хотелось бы.

wildwolf007 пишет:

И еще вопрос если мы делаем рекурсию и сильно ли будет заметно что мы тут так сильно сервис загружаем ? Что б не поставили автоопределитель что я  не робот... И готовое решение может не нужно опубликовывать здесь ?

Из-за конвертации промежутки не такие уж и маленькие, к тому же разные. Может, и будет заметно. Поставят в связи с этим капчу или будут банить, вот уж не знаю. Может, пронесёт. А решение где ещё публиковать? Вещь-то общественную полезность имеет. Можно опубликовать vbe, но как-то непрезентабельно.

wildwolf007 пишет:

Установил BlueStacks и установил TrackID при запуске  песни он определил как альбом 1992 года а в дальнейшем оказалось 1982 год.

И что предлагается с этим делать?

wildwolf007 пишет:

Flasher скажи а обрезать трек ? у меня получилось сейчас конвертнуть, но размер больше 500 кб? Например брать в обработку только 20 секунд от начала трека?

Для wma cкорее нужно брать что-то, отличное от Converter.exe. У меня 150-300 Кб выдаёт, не больше. Впрочем, можно ужимать ещё больше, выбрав меньший битрейт. Я выбирал самый большой, чтобы распознавало лучше.

А через wap - это не ко мне. И надо раньше было, код уже привели, время потратили.

29

Re: VBS: Разобрать MP3 файлы

Flasher пишет:

Можно опубликовать vbe, но как-то непрезентабельно.

Что это ?

По рекурсии не проблема:

Dim FileMassiv()


Set FSO = WScript.CreateObject("Scripting.FileSystemObject")

reDim preserve FileMassiv(-1)
'Запуск рекурсии по каталогу для нахождения файлов и помещения в массив FileMassiv() с полным путем нахождения
'
Call CheckFolderInFolder ("D:\MP3\")

If Ubound(FileMassiv,1) = -1 Then
	
	MsgBox "Файлов в данном каталоге нет"
Else
	MsgBox "Файлов = " &Ubound(FileMassiv)
	
End IF


Function CheckFolderInFolder (P1)

	'P1 - передаваемый параметр пути где необходима рекурсия возвращаемый заполненный массив FileMassiv(i)
	
	RetCode = 0
	
	If Ubound(FileMassiv) = -1 Then
		i = -1
	End IF
	
	Dim File2,CollectionFolder,CollectionFile,Folder5
	
	Set Folder5 = FSO.GetFolder(P1)
	Set CollectionFolder = Folder5.SubFolders
	Set CollectionFile = Folder5.Files
	
	If CollectionFile.count > 0 Then
		For Each File2 In CollectionFile
			' Сообщение о файле при переборе
			i = i + 1
			reDim preserve FileMassiv(i)
			FileMassiv(i) = File2.Path
			'MsgBox File2.Path &" = " &i
			'WScript.Echo File2.Path &" Размерность =" &i &" Размер массива = " &Ubound(FileMassiv)
		Next
	End If
	
    For Each SubFolder In CollectionFolder
		call CheckFolderInFolder (SubFolder)
	Next

End Function

Я взял песню 7 минут и она как раз таки после конвертации стала больше весить. И плюс если конвертировать не всю песню, а только часть  время можно будет немного сократить.

30

Re: VBS: Разобрать MP3 файлы

Проблема не в создании рекурсии, а в преждевременном вылете, связанном с основным кодом.

31

Re: VBS: Разобрать MP3 файлы

TrackId определяет гораздо хуже, чем SHAZAM.
http://www.shazam.com/
Вот если бы на него можно было бы как-нибудь посылать...

а обрезать трек ? у меня получилось сейчас конвертнуть, но размер больше 500 кб? Например брать в обработку только 20 секунд от начала трека?

Можно все резать ffmpeg.

32

Re: VBS: Разобрать MP3 файлы

У ffmpeg большой дистрибутив. Лучше Mp3splt. Но и тут минимум 4 Мб нужно на либы. Итого 3 утилиты. Если сгодится, то впишу в код пару строк. Основной груз ложится на wav2amr. Остальное в разы быстрее.
Есть ещё SoX (он поддерживает amr-nb, но похоже сразу из mp3 в него тоже не пишет, для обрезки - trim).

P.S.: Про SHAZAM-ы и т.п. слушалки пока забудем.

33

Re: VBS: Разобрать MP3 файлы

Flasher, прошу прощения за долгое молчание. На работе завал был. ) Решил пооптимизить скрипт + использовал давно "валяющийся" у меня компонент для формирования данных HTML формы.

test.vbs


Dim webFormDataBuilder: Set webFormDataBuilder = GetObject("script:file:webFormDataBuilder.wsc")
Dim httpRequest: Set httpRequest = CreateObject("WinHttp.WinHttpRequest.5.1")
With webFormDataBuilder
	.method = "POST"
	.enctype = "multipart/form-data"
	.addTextField "lng", "russian"
	.addTextField "MAX_FILE_SIZE", "512000"
	.addTextField "submit", "Search!"
	.addFileField "userfile", "test.amr"
	With httpRequest
		.Open webFormDataBuilder.method,"http://supertrubka.org/trackid/trackid.php", False 
		.SetRequestHeader "Content-Type", webFormDataBuilder.contentType
		.Send webFormDataBuilder.Build
	End With
	With New Regexp
		.Multiline = True
		.Pattern = "^.+u>.+;(.+)</b>.+;(.+)</b>.+;(.+)</b>"
		All = Split(.Replace(.Execute(HttpRequest.ResponseText)(0), "$1" & vbCrlf & "$2" & vbCrlf & "$3"),vbCrlf)
	End With : Track = All(0) : Artist = All(1) : Album = All(2)
	MsgBox Join(All,vbCrlf), vbInformation
End With
Post's attachments

webFormDataBuilder.wsc 7.81 kb, 6 downloads since 2016-01-18 

You don't have the permssions to download the attachments of this post.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

34

Re: VBS: Разобрать MP3 файлы

Xameleon
Предлагается wsc ещё закинуть? Без него оптимизация не удастся?
Кстати, а что насчёт UTF-8/16 в charset? В иностранной музыке-то всякое попадается.

Я, кстати, заменил у себя Converter.exe на более быстрый.
Могу пока выложить, что до сего момента накидал (что там вышибало рекурсию, так и не понял):

'••••••••••••••••••••••••••••••• VBS •••••••••••••••••••••••••••••••
' Назначение:
'  1. Авто-переименование mp3-файлов в имена композиций их тегов
'  либо тех, что взяты с http://supertrubka.org/trackid/trackid.php
'  2. Запись отсутствующих тегов [Название], [Альбом], [Исполнитель]
'
' Ключи командной строки:
'  /d:[<Путь к каталогу с MP3-файлами>]
'  /s:<первые секунды MP3> (по умолч. 30, мин. 20, макс. 59)
'  /r:<выкл (по умолч.)/вкл обработку всей структуры каталога: 0/1>

' Пример запуска: D:\Current.vbs /d:"D:\My Music" /s:25 /r:1
'
Option Explicit
'•••••••••••••••••••••••• Пути к программам ••••••••••••••••••••••••
Const MadPlay = "C\My Programs\Audio\Converters\MadPlay\madplay.exe"
Const AMRConv = "C\My Programs\Audio\Converters\amrnb-encoder.exe"
Const MP3Splt = "C\My Programs\Audio\Сutters\mp3splt\mp3splt.exe"
Const ID3Edit = "C\My Programs\Audio\TagEditors\ID3\id3.exe"
'•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••

Dim Folder, Sec, Recurse, Regexp, WMP, WSH, HHCtrl, Shell
Dim FSO, Check(0), HTTP,  TempFolder, TempFile, Bound, NL

Const Title = " Переименование и заполнение тегов в MP3      "
With WScript.Arguments.Named
  If .Exists("d") Then Folder  = .Item("d") Else _
  MsgBox "Укажите ключ /d:<Путь к папке с MP3> !", 4144, Title : WScript.Quit
  If .Exists("s") Then Sec     = .Item("s") Else Sec = 30
  If .Exists("r") Then Recurse = .Item("r")
End With : If Sec < 20 Then Sec = 20 End If : If Sec > 59 Then Sec = 59

Set Regexp = New Regexp
Set WMP    = CreateObject("WMPlayer.OCX")
Set WSH    = CreateObject("WScript.Shell")
Set HHCtrl = CreateObject("Internet.HHCtrl")
Set Shell  = CreateObject("Shell.Application")
Set FSO    = CreateObject("Scripting.FileSystemObject")
Set HTTP   = CreateObject("WinHttp.WinHttpRequest.5.1")
TempFolder = Shell.NameSpace(WSH.ExpandEnvironmentStrings("%TEMP%")).Self.Path & "\"
TempFile   = TempFolder & FSO.GetTempName

If Not FSO.FolderExists(Folder) Then _
MsgBox "Путь каталога с MP3-файлами указан неверно!", 4144, Title : WScript.Quit
For Each Bound in Array(MadPlay, AMRConv, MP3Splt, ID3Edit)
  If Not FSO.FileExists(WSH.ExpandEnvironmentStrings(Bound)) Then NL = NL & " " & FSO.GetFileName(Bound)
Next : If NL <> "" Then _
MsgBox "Укажите верные пути к " & Join(Split(Trim(NL)), ", ") & "!", 4144, Title : WSript.Quit
Bound = "----WebKitFormBound5iH6W3g1OUAMdwgQ" : NL = vbCrLf
HHCtrl.TextPopup "Поиск тегов запущен!"&NL&"Ожидайте ...",_
"Verdana,10", 11, 8, 6611199, 3549952 : WScript.Sleep 300
HTTP.Option(0) = "Mozilla/5.0 (Windows NT 10.0; WOW64) " &_
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 Safari/537.36"
With Regexp
  .Multiline = True : .Pattern = "^.+u>T.+;(.+)</b>.+;(.+)</b>.+;(.+)</b>"
End With
FFolder Folder : HHCtrl.Click : MsgBox ""
If Check(0) = 1 Then MsgBox "Выполнено!", 4160, Title Else _
MsgBox "MP3 файлы в данном каталоге отсутствуют!",4144, Title
If FSO.FileExists(TempFile) Then FSO.GetFile(TempFile).Delete

Sub FFolder(Dir)
  Set Dir = Shell.NameSpace(Dir)
  Dim Items : Set Items = Dir.Items
  Items.Filter 8384, "*.mp3"
  If Items.Count Then
    Dim F, Song, Track, Album, Artist, BN
    For Each F in Items
      BN = FSO.GetBaseName(F) : Set Song = WMP.NewMedia(F.Path)
      Track = "" : Album = "" : Artist = ""
      Track = Trim(Song.getItemInfo("Name"))
      If Track = "" Then Track = Trim(Song.getItemInfo("Title"))
      Album = Trim(Song.getItemInfo("Album")) : If BN = Track Then Track = ""
      If Album = "" Then Album = Trim(Song.getItemInfo("WM/AlbumTitle"))
      For Each Artist in Split("Artist Author AlbumArtist DisplayArtist WM/AlbumArtist")
        Artist = Trim(Song.getItemInfo(Artist)) : If Artist <> "" Then Exit For
      Next : WMP.Close
      If Track = "" Or Album = "" Or Artist = "" Then
        Dim AMRFile, MP3File, Data, Position, All, Tags
        AMRFile = TempFolder & F.Name & ".amr" : MP3File = TempFolder & F.Name
        WSH.Run """" & MP3Splt & """ """ &F.Path& """ 0.0 0."&Sec&" -n -x -Q -d "&TempFolder& " -o @f", 0, True
        WSH.Run """" & MadPlay & """ -Q -m -R 8000 -b 16 -o wave:" & TempFile & " """ & MP3File & """", 0, True
        WSH.Run """" & AMRConv & """ -dtx MR122 " & TempFile & " """ & AMRFile & """", 0, True
        With CreateObject("ADODB." & "Stream")
          .Open : .Charset = "Windows-1251" : .Type = 1 : .LoadFromFile AMRFile
          Data = .Read : .Close : .Type = 2 : .Open
          .WriteText   "--" & Bound  & NL     & "Content-Disposition: form-data; name=""userfile" &_
          """; filename=""" & F.Name & ".amr""" & NL & "Content-Type: application/octet-stream" & NL & NL
          Position = .Position : .Position = 0 : .Type = 1 : .Position = Position
          .Write Data
          Position = .Position : .Position = 0 : .Type = 2 : .Position = Position
          .WriteText NL & "--" & Bound & NL & _
          "Content-Disposition: form-data; name=""lng""" & NL & NL & "russian" & NL & "--" & Bound & NL &_
          "Content-Disposition: form-data; name=""MAX_FILE_SIZE""" & NL & NL & "512000"  & NL & "--" & Bound &_
          NL  &  "Content-Disposition: form-data; name=""submit""" & NL & NL & "Search!" & NL & "--" & Bound &_
          "--" & NL : .Position = 0 : .Type = 1 : All = .Read : .Close
        End With : FSO.GetFile(MP3File).Delete
        With HTTP
          .Open "POST","http://supertrubka.org/trackid/trackid.php", False
          .SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & Bound
          .Send All : All = .ResponseText : .Abort
        End With : FSO.GetFile(AMRFile).Delete
        If Regexp.Test(All) Then
          Tags = Split(Regexp.Replace(Regexp.Execute(All)(0), "$1*$2*$3"),"*")
          If Track  = "" Then Track  = Tags(0)
          If Artist = "" Then Artist = Tags(1)
          If Album  = "" Then Album  = Tags(2)
        End If
      End If
      If Ubound(Tags) >= 0 Then
        If Track <> "" And InStr(F, Track) = 0 Then
          Dim Name, Num
          With New Regexp
            .Global = True
            .Pattern = "["":;/<>\|\\\?\*]" : Name = Trim(.Replace(Track, " "))
            .Pattern = "\s{2,}" : Name = .Replace(Name, " ") : Num = ""
            .Pattern = "^\s*(\d+)([-_ ]{1}.*|$)"
             If .Test(BN) Then
               Num = Trim(.Replace(BN, "$1")) & " - "
             Else .Pattern = "^.*[-_ ]{1}(\d+)(\s*)"
               If .Test(BN) Then Num = Trim(.Replace(.Execute(BN)(0), "$1")) & " - "
             End If
          End With : Name = Num & Name & "." & FSO.GetExtensionName(F)
          If Not FSO.FileExists(FSO.BuildPath(Dir, Name)) Then F.Name = Name
        End If
        WSH.Run """" & ID3Edit & """ -2d -atl """ & Artist & """ """ &_
                Track & """ """ & Album & """ """ & F.Path & """", 0, True
      End If
    Next : Check(0) = 1
  End If
  If Recurse = 1 Then
    Dim Fold : Items.Filter 8352, "*"
    For Each Fold In Items : FFolder Fold.Path : Next
  End if
End Sub

Ссылки на другие программы приводились выше.

Post's attachments

amrnb-encoder.7z 101.53 kb, 7 downloads since 2016-01-18 

You don't have the permssions to download the attachments of this post.

35

Re: VBS: Разобрать MP3 файлы

Flasher,

Flasher пишет:

Предлагается wsc ещё закинуть? Без него оптимизация не удастся?

В принципе не обязательно, но пмсм просто удобнее и код визуально понятнее.

Flasher пишет:

Кстати, а что насчёт UTF-8/16 в charset? В иностранной музыке-то всякое попадается.

Так вроде предложенные Вами утилиты их читают и редактируют адекватно ? Или я не понял вопроса ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

36

Re: VBS: Разобрать MP3 файлы

Xameleon пишет:

Так вроде предложенные Вами утилиты их читают и редактируют адекватно ?

id3.exe и Tag.exe? Нет, не хотят, заменяют вопросами или убирают умляуты. Надо ещё lame посмотреть.

Не хотите на базе данного wsc предложенные сервисы (1, 2) окучить? К mp3 там форма для тегов прилагается.

37

Re: VBS: Разобрать MP3 файлы

Flasher,

Flasher пишет:

id3.exe и Tag.exe? Нет, не хотят, заменяют вопросами или убирают умляуты. Надо ещё lame посмотреть.

Понял. Ок. Погляжу, что можно сделать

Flasher пишет:

Не хотите на базе данного wsc предложенные сервисы (1, 2) окучить? К mp3 там форма для тегов прилагается.

Уже пробовал. Конвертацию в AMR и прочие форматы без проблем делает. А вот как обрезка у них реализована пока что не понял. Не вижу в передаваемых запросах установки границ начала и конца трэка.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

38

Re: VBS: Разобрать MP3 файлы

Flasher,

Решил выложить тестовый результат окучивания web сервисов. Пример в архиве.

Скрипт содержит 2 функции Mp3toAmr и IdentifyAmr. Работает действительно медленно, но есть некоторые идеи по оптимизации и ускорению. Есть ещё сервисы по установке ID3 тэгов. В принципе в случае необходимости их тоже можно прикрутить.

P.S Немного изменил скрипт выборки регулярками. Так как RegExp в VBS не поддерживает lookbehind, использовал submatches.

Post's attachments

test.zip 166.93 kb, 3 downloads since 2016-01-20 

You don't have the permssions to download the attachments of this post.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

39

Re: VBS: Разобрать MP3 файлы

Xameleon
Да, медленновато, у меня быстрее даже с бóльшим числом секунд. 12, кстати, мало. Многое не распознает.
А так спасибо, поковыряюсь как-нибудь с примерами.
Вам бы и мой скрипт проверить не помешало, а то выложил требуемое решение, но даже тс не тестирует. Пропал куда..

Посмотрел утилиты. lame, как я понял, пишет только из файла в новый файл. Есть там ключи --id3v2-utf16, --pad-id3v2, --add-id3v2, -T, но я так и не понял, как их заставить работать с -tN.
LameTag - только смотрелка. Под Unix есть id3ted, но нет для win32.
Для AAC, OGG, например, юникодная правка в консоли имеется, а с более популярным форматом беда.

Кстати, ещё пробовал избавиться от резки MP3 с переходом на резку WAV старенькой mp3encdemo31 (она по умолчанию 30 сек. пишет), но нужную частоту задать не может, только битрейт. Есть shntool, но она режет на куски.

Xameleon пишет:

Так как RegExp в VBS не поддерживает lookbehind

А как же .Test (пример в моём скрипте)? Как вариант ещё .Execute().Count.

+ Уже как к модератору:

Что там по P.S.?

40

Re: VBS: Разобрать MP3 файлы

Flasher,

Вам бы и мой скрипт проверить не помешало, а то выложил требуемое решение, но даже тс не тестирует. Пропал куда...

1) Честно хотел посмотреть. Даже вроде сложил всё что нужно в каталоге:

http://forum.script-coding.com/misc.php?action=pun_attachment&amp;item=1099&amp;download=0

Но устал собирать утилиты по страницам. Добрался до строк в коде:


Const MadPlay = "madplay.exe"
Const AMRConv = "amrnb-encoder.exe"
Const MP3Splt = "mp3splt.exe"
Const ID3Edit = "id3.exe"

madplay.exe и amrnb-encoder.exe из первых постов взял. Остальное уже времени не хватило искать. Можно посмотреть готовое решение "из пакета" ?

2) По поводу lame и подобных утилит, особо ничего сказать не смогу наверное. Не имел опыта. Пока наткнулся только на ActiveX - CDDBControl.CddbID3Tag. Часто встречается его использование в скриптах для редактирования id3 тегов.

3)

А как же .Test (пример в моём скрипте)?

Так там lookbehind нет же ? Вижу Replace и Trim задействованы. Или ошибаюсь ?

Как вариант ещё .Execute().Count.

Не понял. Как это связано с lookbehind?

4)

Что там по P.S.?

Исполнено.

Post's attachments

1.jpg 62.63 kb, 167 downloads since 2016-01-20 

You don't have the permssions to download the attachments of this post.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

41

Re: VBS: Разобрать MP3 файлы

Xameleon пишет:

Можно посмотреть готовое решение "из пакета" ?

Нет пакета. Утилиты в разных папках. Mp3Splt, id3 отсюда.

Xameleon пишет:

Пока наткнулся только на ActiveX - CDDBControl.CddbID3Tag.

Мысль. Теперь осталось выяснить, как в нём обстоят дела с Юникодом.

Xameleon пишет:

Так там lookbehind нет же ?

А, понял про что речь. Так есть же. См. (?=шаблон), (?!шаблон).

42

Re: VBS: Разобрать MP3 файлы

1)

Flasher пишет:

Нет пакета. Утилиты в разных папках. Mp3Splt, id3 отсюда.

Понял. Ну согласитесь - не очень удобно, что для запуска примера нужно собирать файлы по всей теме + искать дополнительные утилиты в интернете ?
Когда ещё приходится каждую утилиту проверять на virustotal на всякий пожарный. Ведь мало ли что в инете выложено на публичных ресурсах.

2) 

Flasher пишет:

Мысль. Теперь осталось выяснить, как в нём обстоят дела с Юникодом.

Согласен. Попробую проверить, как время будет.

3)

А, понял про что речь. Так есть же. См. (?=шаблон), (?!шаблон).

Практически везде пишут:

VBScript doesn’t support look-behind assertions.

пруфлинки:

http://stackoverflow.com/questions/1357 … r-vbscript

http://www.regular-expressions.info/vbscript.html

http://www.sql.ru/forum/470409/kak-sdel … exressions

Я пока только вникаю в регулярки, так что могу ошибаться. Пробовал эти конструкции использовать, но так и не смог одним запросом Execute выдернуть из

<html><body>data</body></html>

innerText из body без ухищрений и использования последующей обработки выборок.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

43

Re: VBS: Разобрать MP3 файлы

Xameleon пишет:

Ну согласитесь - не очень удобно, что для запуска примера нужно собирать файлы по всей теме + искать дополнительные утилиты в интернете ?

Я на поиск актуальной версии предложенной библиотеки потратил раз в 50 больше, чем на поиск 2-х ссылок в теме. Впрочем, с моей стороны причина понятна - ещё не уверен, что вариант окончательный, поэтому ссылки в посте скрипта не указывал.

Xameleon пишет:

Когда ещё приходится каждую утилиту проверять на virustotal на всякий пожарный. Ведь мало ли что в инете выложено на публичных ресурсах.

Это, уж простите, паранойя предполагать, что достаточно распространённые консольные утилиты администраторы своих ресурсов вдруг захотели положить во вредоносном виде.

Xameleon пишет:

Попробую проверить, как время будет.

Пока тесты зарегистрированной (в т.ч. таким образом) версии 2.6.204.203 приводят к ошибке. Простой манифест с нужным нам классом тоже зарубил.
Если верить примеру, с Юникодом проблем не будет.

Xameleon пишет:

Практически везде пишут:

VBScript doesn’t support look-behind assertions.

См. на MSDN Positive and Negative Lookaheads.

Xameleon пишет:

без ухищрений

Каких, например?

44

Re: VBS: Разобрать MP3 файлы

Flasher,

Я на поиск актуальной версии предложенной библиотеки потратил раз в 50 больше, чем на поиск 2-х ссылок в теме

1) А я ещё даже не искал. Рассматривал её как последнюю альтернативу для решения задачи. Не люблю сторонние ActiveX-ы. Хотя иногда без них сложно обойтись.

Впрочем, с моей стороны причина понятна - ещё не уверен, что вариант окончательный, поэтому ссылки в посте скрипта не указывал.

2) Это да. Вариант не окончательный. Но если Вы уже потратили время на подбор утилит, можно же не предлагать другим участникам форума повторять Ваш путь заново для тестирования примера, а сразу вложить утилиты в архив или выложить ссылки на них в посте ? Пмсм - двойная трата времени ? Ошибаюсь ?

3)

Это, уж простите, паранойя предполагать, что достаточно распространённые консольные утилиты администраторы своих ресурсов вдруг захотели положить во вредоносном виде.

OFFTOP: Ахахах. ))) Станешь тут параноиком, когда видишь как знакомые с uTorrent-ом, mail агентом, и всяческими браузерами да и прочим софтом неглядя затаскивают к себе шпионский малвар. ) Вот несколько примеров на вскидку.

http://lmgtfy.com/?q=mail+ru+%D0%B2%D0% … 1%83%D1%81

http://lmgtfy.com/?q=utorrent+%D0%B1%D0 … 0%B5%D1%80

Казалось бы софт массового потребления. Разработчики должны заботиться о своей репутации.... Ан нет... )

Да и к тому же часть утилит, я же брал из Вашего архива. Там приложения без цифровой подписи (Converter.exe / madplay.exe), соответственно я не могу знать откуда они были взяты и что в них заложил разработчик. Поэтому, на мой взгляд - проверка вполне оправдана.

Пока тесты зарегистрированной (в т.ч. таким образом) версии 2.6.204.203 приводят к ошибке. Простой манифест с нужным нам классом тоже зарубил.

Ясно. А какого рода ошибка ? Пояснения в описании какие-нибудь имеются ?

См. на MSDN Positive and Negative Lookaheads.

Так ведь Lookaheads, а не lookbehind ? Вроде разница же есть ?

Каких, например?

Так чтобы возвращаемая коллекция вхождений сразу возвратила искомый результат. Т.е чтобы не приходилось конечные данные обрабатывать через Replace и т.п. ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

45

Re: VBS: Разобрать MP3 файлы

Flasher,

Поковырялся с библиотекой cddbcontrol.dll

Нашёл 2 версии: 1.1.0.28 и 2.6.204.203.

Выяснил, что первая возвращает пригодный для скрипта класс CddbID3Tag, а вторая возвращает Unknown.

Проверил работоспособность. Скрипт нормально редактирует тэги mp3.

Если нужно - могу выложить пример и библиотеку.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

46

Re: VBS: Разобрать MP3 файлы

Xameleon пишет:

Не люблю сторонние ActiveX-ы. Хотя иногда без них сложно обойтись.

В том то и дело.

Xameleon пишет:

а сразу вложить утилиты в архив или выложить ссылки на них в посте ?

Архив большой получится. Тут ограничений нет? А лицензию с распространением в исходном виде тоже учитывать не нужно? Ссылки выложу, а потом опять править при замене?

Xameleon пишет:

Пмсм - двойная трата времени ?

Почему двойная? В теме ссылки найти быстрее, чем в гугле.

Xameleon пишет:

Да и к тому же часть утилит, я же брал из Вашего архива. Там приложения без цифровой подписи (Converter.exe / madplay.exe), соответственно я не могу знать откуда они были взяты и что в них заложил разработчик.

Это было до жалобы, в скрипте Converter.exe уже не фигурировал. Куча известных мне консольных утилит без цифровой подписи. Указанные проги я брал из этого дистрибутива. Впрочем, это Ваше дело, доверять мне или нет.

Xameleon пишет:

Ясно. А какого рода ошибка ? Пояснения в описании какие-нибудь имеются ?

К официалам я стучаться не стал. Скачал с сайта dll-(чего-то там) архив с пояснением распаковки. Вероятно и Вы там же.
Ошибка с регой на строке вызова первого метода: Требуется объект, Код: 800A01A8.
Ошибка с манифестом - нет доступа.

Xameleon пишет:

Так ведь Lookaheads, а не lookbehind ? Вроде разница же есть ?

Без Positive и Negative, может, и есть, а так то же самое. )

Xameleon пишет:

Т.е чтобы не приходилось конечные данные обрабатывать через Replace и т.п. ?

А почему конечные?

Str = "<html><body>data</body></html>"
With New Regexp
   .Global = True
   .Pattern = ".*<body>|</body>.*"
   MsgBox .Replace(Str, "")
End With

47

Re: VBS: Разобрать MP3 файлы

Flasher,

Архив большой получится. Тут ограничений нет? А лицензию с распространением в исходном виде тоже учитывать не нужно? Ссылки выложу, а потом опять править при замене?

Есть. Не больше 3-ёх мег вроде можно загрузить. Но можно на сторонний ресурс выложить. Например на yandex disk. . Про лицензию не понял.

Почему двойная? В теме ссылки найти быстрее, чем в гугле.

Это я другое имел в виду, что - сначала Вам утилиты пришлось искать, а потом всем желающим проверить код. ) Т.е один и тот же поиск дважды.

Это было до жалобы, в скрипте Converter.exe уже не фигурировал. Куча известных мне консольных утилит без цифровой подписи. Указанные проги я брал из этого дистрибутива. Впрочем, это Ваше дело, доверять мне или нет.

У меня недоверие именно к разработчикам утилиты. Думаю мало шансов, что человек будет злонамеренно выкладывать заражённую DLL на специализированный форум дабы заиметь ботнет из 5-10 человек. Просто не могу быть уверен в её происхождении. Как Вы правильно сказали: "Скачал с сайта dll-(чего-то там) архив с пояснением распаковки".
По хорошему конечно, чтобы не тратить время на проверки, надо было просто на виртуалке проверить скрипт. Но я как назло снёс vmware пару дней назад.

К официалам я стучаться не стал. Скачал с сайта dll-(чего-то там) архив с пояснением распаковки. Вероятно и Вы там же.
Ошибка с регой на строке вызова первого метода: Требуется объект, Код: 800A01A8.
Ошибка с манифестом - нет доступа.

Да. И я так же нашёл. И да. Проблема в том, что у последней версии библиотеки интерфейс ICddbID3Tag множественной вложенности, а у старой версии двухступенчатый (если я правильно посчитал)., как у большинства библиотек. В итоге загрузчик у WScript не добирается до нужного интерфейса и отдаёт Unknown.
VB6 же поддерживает не позднее связывание и поэтому в нём библиотека нормально грузится. Хотя часть методов объектов всё-таки вызываю ошибку при вызове, сообщая о том, что функция не адаптирована под VB6.

На всякий случай прилагаю рабочую библиотеку к сообщению. Вдруг пригодится.

Без Positive и Negative, может, и есть, а так то же самое. )

Понял. Попробую въехать подробнее. Явно в этом вопросе "плаваю".

Попробовал Ваш пример. Не додумался. Занятно.

Str = "<html><body><body></body></body></html>"
With New Regexp
   .Global = True
   .Pattern = ".*<body>|</body>.*"
   MsgBox .Replace(Str, "")
End With

With New Regexp
   .Global = True
   .Pattern = "<body>(.*)</body>"
   MsgBox .Execute(Str)(0).submatches(0)
End With

Столкнулся с тем, что вариант с Replace не отработал вложенные тэги. Решил всё-таки пока оставить использование submatches. Но я надеялся, что можно в Pattern можно вставить что-то, чтобы на выходе из Execute сразу получить вхождения - "внутренности" тэг(а)(ов).

P.S Поковырялся ещё с WMP. Собрал проектик в VB6. Вроде бы добился работоспособного присвоения ID3 тэгов сразу. Выяснил, что там нужно дождаться события MediaChange после SetItemInfo, чтобы успевали происходить изменения в файле.

Post's attachments

cddbcontrol.zip 1.23 mb, 3 downloads since 2016-01-21 

You don't have the permssions to download the attachments of this post.
Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

48 (изменено: Flasher, 2016-01-22 21:36:55)

Re: VBS: Разобрать MP3 файлы

+ Про скачивание
Xameleon пишет:

Про лицензию не понял.

В ряде лицензий пишется, что файлы из дистрибутива нельзя распространять по отдельности.

Xameleon пишет:

У меня недоверие именно к разработчикам утилиты.

Эти утилиты, думаю, и до нас проверили/перепроверили сотни раз.

Xameleon пишет:

Как Вы правильно сказали: "Скачал с сайта dll-(чего-то там) архив с пояснением распаковки".

Эту библиотеку я и не выкладывал (хотя её то как раз на всякий проверил). А вот все ссылки дистрибутивов с утилитами брались прямыми с оффсатов программ. Поэтому не вижу связи с примерами по mail.ru и utorrent.

Xameleon пишет:

По хорошему конечно, чтобы не тратить время на проверки, надо было просто на виртуалке проверить скрипт.

Мда, похоже не видать мне тестов моего скрипта, если уже до обсуждения виртуалок добрались... )

Xameleon пишет:

На всякий случай прилагаю рабочую библиотеку к сообщению.

Я забыл сказать, что скачал 3 версии, две из которых эти. Только тестировать предпочёл самую новую. Ну, ОК, пусть будет.
По множественной вложенности понятно, спасибо.

Xameleon пишет:

Но я надеялся, что можно в Pattern можно вставить что-то, чтобы на выходе из Execute сразу получить вхождения - "внутренности" тэг(а)(ов).

Тогда не должно быть указания начального и конечного вхождения, а только повторные.
Ага, ситуация ясна. Я был не прав. lookahead (искать справа от ...) - это не то же самое, что lookbehind (искать слева от ...). Второго (?<=) действительно нет. А вот почему - большой вопрос. Можно < было вполне сделать спецсимволом.

Xameleon пишет:

Выяснил, что там нужно дождаться события MediaChange после SetItemInfo, чтобы успевали происходить изменения в файле.

Я тоже думал, что где-то там собака порылась. А можно посмотреть на вызов события?

В сообщении пару раз с bbcode ошиблись. )

49

Re: VBS: Разобрать MP3 файлы

Flasher,
1) Про лицензию понял. ) Благодарю за пояснение
2)

Тогда не должно быть указания начального и конечного вхождения, а только повторные.
Ага, ситуация ясна. Я был не прав. lookahead (искать справа от ...) - это не то же самое, что lookbehind (искать слева от ...). Второго (?<=) действительно нет. hmm А вот почему - большой вопрос. Можно < было вполне сделать спецсимволом.

Вот ! И я о том же подумал - не могу понять, что мешало им сделать "<" спецсимволом ???

Я тоже думал, что где-то там собака порылась. А можно посмотреть на вызов события?

К сожалению в работе погряз. Попробую выложить, когда убежусь в стабильности работы. Там одним событием обойтись не получается. Нужно танцы с бубном устраивать. Дожидаться события(ий), добавлять и удалять трэк из коллекции... Задумался в сторону написания класса, который напрямую просто работает с файлом. на VB6 много примеров, как читать и писать тэги MP3. Но упёрся в то, что тэги есть разных версий. Делать разные методы под разные тэги. Посетила мысль - а как WMP их разделяет ? Пока не выяснил.

В сообщении пару раз с bbcode ошиблись. )

Где ? Не нашёл.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

50

Re: VBS: Разобрать MP3 файлы

Xameleon пишет:

Дожидаться события(ий), добавлять и удалять трэк из коллекции...

Это было понятно по Note. Я так и делал. Вызов события я заменял на Do : Loop Until Song.getItemInfo(Attr) = Item, но толку от этого стало не многим больше, всё равно чаще что-то блокирует запись (одного и тоже же файла в частности).

Xameleon пишет:

Посетила мысль - а как WMP их разделяет ?

В каком смысле "разделяет"?

Xameleon пишет:

Где ? Не нашёл.

Дважды code вместо quote.

51

Re: VBS: Разобрать MP3 файлы

Flasher,

всё равно чаще что-то блокирует запись

У меня дело пошло дальше. Добился стабильной записи, но каждый раз предидущего значения.

В каком смысле "разделяет"?

Ну отличает ID3 v1 / ID3 v2 и подверсии. К примеру поля Album и Artist присутствуют и в той и другой версии. Т.к тэги первой версии были расположены в конце файла, а тэги второй версии в начале файла, то исполнитель и альбом (наверное) могут в начале и в конце отличаться.

Дважды code вместо quote.

Понял. ) Благодарю. Поправил.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

52

Re: VBS: Разобрать MP3 файлы

Прошу прощения так на чем остановились? На каком решении? Итоговая версия получилась?

53

Re: VBS: Разобрать MP3 файлы

wildwolf007
Продолжение разве должно быть односторонним? Я писал про тесты, в ответ ни слуху ни духу (нравится, не нравится, что добавить, устроит сторонний компонент или ждать Xameleon с его продвижением по WMP и т.п.).


Xameleon пишет:

У меня дело пошло дальше. Добился стабильной записи, но каждый раз предидущего значения.

Хотелось бы взглянуть, что вышло.

Xameleon пишет:

Ну отличает ID3 v1 / ID3 v2 и подверсии.

Я думаю, он автоматически обе проверяет. ID3v2 для нас в любом случае предпочтительней.