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, 6 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 файлы

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