Вверх ↑
Этот топик читают: Гость
Ответов: 100
Рейтинг: 10
#1: 2013-07-16 10:56:07 ЛС | профиль | цитата
Прошу прощения, за может быть глупые вопросы, или же если подобные темы уже поднимались, но поиск по форуму результатов не дал.
В общем, нужно прочитать теги формата m4a (кодек ALAC) через BASS. Элемент BASS_ChannelEnumTags нормально показывает только OGG/FLAC и потоковые данные из интернета (даже c mp3 не так все гладко как хотелось бы).
В идеале, хотелось бы узнать способ считывания тегов любых форматов, подключенных плагинами к bass.dll
карма: 1

0
Ответов: 2059
Рейтинг: 132
#2: 2013-07-16 11:38:41 ЛС | профиль | цитата
PanQ
Это формат Apple.
Это маркетинговый ход Apple, чтобы файлы читались только на этой платформе.
Поэтому надо прикрутить к BASS Dll-ку которая понимает этот формат.
Есть куча конвертеров для этого формата, надо посмотреть как сделано там, может есть готовые библиотеки, или взять описание формата и написать свою.
карма: 6

0
Ответов: 100
Рейтинг: 10
#3: 2013-07-16 12:00:12 ЛС | профиль | цитата
это я все понимаю, библиотеки прикручены, файлы воспроизводятся, но нужно считать с него теги, те же wmp или aimp прекрасно с этим справляются.
так же и с флаком, без прикрученной библиотеки ни воспроизведения формата, ни, соответственно, тегов не получить, но на флак вышеописанный элемент теги показывает на ура
карма: 1

0
Гость
Ответов: 17029
Рейтинг: 0
#4: 2013-07-16 18:16:51 правка | ЛС | профиль | цитата


Редактировалось 3 раз(а), последний 2025-01-11 03:46:39
карма: 0

0
Ответов: 1304
Рейтинг: 405
#5: 2013-07-18 20:03:11 ЛС | профиль | цитата
PanQ, наконец то добрался до компа и сделал небольшой примерчик чтения тегов m4a по заголовку файла. Правда пару пунктов "номер трека" и "жанр" не стал реализовывать в силу необходимости приложения умственных усилий .
m4a.sha
карма: 3

1
файлы: 1m4a.sha [7.4KB] [139]
Голосовали:PanQ
Ответов: 100
Рейтинг: 10
#6: 2013-07-19 22:11:50 ЛС | профиль | цитата
MAV, спасибо, статья полезная, нужно будет на досуге поразбираться. Единственная загвоздка в том, насколько я понял из статьи, что расположение метаданных в m4a произвольное, наверное есть какая-то специальнакя секция данных, в которых указано расположение тегов в файле? Пока пользуюсь давно (уже не помню кем) подсказанным способом считывания тегов (точнее считывание их из свойств файла) через VB-script, хоть и немного не тот способ, которым хотелось бы добиться результата, да и в ХР не работает, т.к. сама система не дружит с м4а. В 7/8 нет никаких проблем по работе скрипта. Кстати, почему-то твоя схема на ХР не работает, на след неделе доберусь до своего компьютера с восьмеркой, протестирую

Add(FilePart,10795269,203,77)
{
NameWOExt=1
link(onPath,10020164:doValue,[])
link(onName,7314340:doValue,[])
}
Add(Memory,10020164,252,77)
{
link(onData,9350761:doClear,[(400,83)(400,160)])
}
Add(Memory,7314340,301,84)
{
link(onData,15369908:doCompare,[(393,90)(393,225)(184,225)(184,181)])
}
Add(VBJScript,1062235,273,182)
{
WorkPoints=#6:doWork|
EventPoints=#6:onRead|
DataPoints=#4:Path|8:FileName|
Script=#24:Sub doWork (Data, Index)|0:|55: Set objShellApp = CreateObject("Shell.Application")|51: Set objFolder = objShellApp.NameSpace(sys.Path)|51: Set objItem = objFolder.ParseName(sys.Filename)|0:|32: strResult = vbNullString|64: strResult = objFolder.GetDetailsOf(objItem, 0) & "|" &_|53: objFolder.GetDetailsOf(objItem, 13) & " |" &_|53: objFolder.GetDetailsOf(objItem, 21) & " |" &_|53: objFolder.GetDetailsOf(objItem, 27) & " |" &_|53: objFolder.GetDetailsOf(objItem, 28) & " |" &_|53: objFolder.GetDetailsOf(objItem, 14) & " |" &_|53: objFolder.GetDetailsOf(objItem, 15) & " |" &_|53: objFolder.GetDetailsOf(objItem, 16) & " |" &_|70: objFolder.GetDetailsOf(objItem, 19) & " |" &_ |54: objFolder.GetDetailsOf(objItem, 20) & " |" &_ |52: objFolder.GetDetailsOf(objItem, 1) & " |" &_|53: objFolder.GetDetailsOf(objItem, 26) & " |" &_|53: objFolder.GetDetailsOf(objItem, 24) & " |" &_|44: objFolder.GetDetailsOf(objItem, 31) |28: sys.onRead strResult|0:|7:End Sub|
UseName=0
link(onRead,15543029:doWork3,[(319,188)])
link(Path,4325696:Var3,[(279,117)])
link(FileName,16629360:Var2,[])
}
Add(StrPart,3413476,336,140)
{
Char="|"
link(onSplit,15543029:doWork1,[(380,146)(380,125)(319,125)])
link(onPart,9350761:doAdd,[])
}
Add(HubEx,15543029,315,140)
{
link(onEvent,3413476:doSplit,[])
}
Add(Memo,9350761,413,147)
{
Left=100
Top=5
Width=380
Height=190
Color=1973790
Font=[MS Sans Serif,8,0,9139319,1]
Ctl3D=1
ScrollBars=1
ReadOnly=0
}
Add(VBJScript,1658486,252,140)
{
WorkPoints=#6:doWork|
EventPoints=#6:onRead|
DataPoints=#4:Path|8:FileName|
Script=#24:Sub doWork (Data, Index)|0:|55: Set objShellApp = CreateObject("Shell.Application")|51: Set objFolder = objShellApp.NameSpace(sys.Path)|51: Set objItem = objFolder.ParseName(sys.Filename)|0:|32: strResult = vbNullString|64: strResult = objFolder.GetDetailsOf(objItem, 0) & "|" &_|53: objFolder.GetDetailsOf(objItem, 16) & " |" &_|53: objFolder.GetDetailsOf(objItem, 10) & " |" &_|53: objFolder.GetDetailsOf(objItem, 21) & " |" &_|53: objFolder.GetDetailsOf(objItem, 22) & " |" &_|53: objFolder.GetDetailsOf(objItem, 17) & " |" &_|53: objFolder.GetDetailsOf(objItem, 18) & " |" &_|53: objFolder.GetDetailsOf(objItem, 20) & " |" &_|70: objFolder.GetDetailsOf(objItem, 99) & " |" &_ |53: objFolder.GetDetailsOf(objItem, 9) & " |" &_ |52: objFolder.GetDetailsOf(objItem, 1) & " |" &_|53: objFolder.GetDetailsOf(objItem, 19) & " |" &_|53: objFolder.GetDetailsOf(objItem, 14) & " |" &_|49: objFolder.GetDetailsOf(objItem, 99) |28: sys.onRead strResult|0:|7:End Sub|
UseName=0
link(onRead,15543029:doWork2,[])
link(Path,4325696:Var2,[])
link(FileName,16629360:Var1,[(265,128)])
}
Add(ComputerInfo,7521657,175,112)
{
Mask=""
WinInfoMask="%M"
}
Add(If_else,15369908,196,175)
{
Type=3
Op2=Integer(5)
link(onTrue,1658486:doWork,[(240,181)(240,146)])
link(onFalse,1062235:doWork,[])
link(Op1,7521657:WinInfo,[])
}
Add(GetDataEx,16629360,280,123)
{
Angle=1
link(Data,7314340:Value,[(307,128)])
}
Add(GetDataEx,4325696,252,112)
{
link(Data,10020164:Value,[])
}
Add(Label,1573434,413,35)
{
Left=5
Top=5
Width=91
Height=192
Color=1973790
Font=[MS Sans Serif,8,0,9139319,1]
Caption="Имя:
Исполнитель:
Название:
Длительность:
Битрейт:
Альбом:
Год:
Жанр:
Оценка:
Авторы:
Размер:
Номер дорожки:
Комментарии: "
AutoSize=1
Alignment=1
}
Add(Button,3860687,91,77)
{
Left=160
Top=205
Width=85
Caption="open file"
link(onClick,5601059:doExecute,[])
}
Add(ODialog,5601059,140,77)
{
StartDir=""
link(onExecute,10795269:doPart,[])
}

карма: 1

0
6
Сообщение
...
Прикрепленные файлы
(файлы не залиты)