链接iTunes的ITC2文件和“iTunesLibrary.XML”

链接iTunes的ITC2文件和“iTunesLibrary.XML”,第1张

概述我正在尝试从iTunes的.ITC2文件中转储专辑图片.我能做到的女巫.但在我尝试转储图像之前,我需要记下它对应的Album / Track / Artist(三者中的任何一个).有没有人发现他们是否改变了缓存文件的命名方式?因为文件名为“2100F8A77FA24601-F2E26C349A9AB861.itc2”,“2100F8A77FA24601”实际上是我的库ID,但在我的库的 XML文件 我正在尝试从iTunes的.ITC2文件中转储专辑图片.我能做到的女巫.但在我尝试转储图像之前,我需要记下它对应的Album / Track / Artist(三者中的任何一个).有没有人发现他们是否改变了缓存文件的命名方式?因为文件名为“2100F8A77FA24601-F2E26C349A9AB861.itc2”,“2100F8A77FA24601”实际上是我的库ID,但在我的库的 XML文件中找不到“F2E26C349A9AB861”.有人可以向我解释如何将itc2文件与位于XML文件中的曲目相关联.

reference

我确实从上面的链接获得了有关如何设置iTunes的一些信息.但这篇文章已经过时,并不是100%正确到今天的iTunes版本(v11).

谢谢,
Throdne

解决方法 实际上,.itc2文件名的第二部分应该是iTunes library.xml文件中的track persistent ID.也许你有删除曲目的艺术品缓存?

可以通过以下方式从XML库中检索的信息计算图稿的路径:

[itunes library folder]/Album Artwork/Cache/[library Persistent ID]/XX/YY/ZZ/[library Persistent ID - Track Persistent ID].itc2

哪里:

XX: First hex digit from the end in the track persistent ID in decimal form    YY: Second hex digit from the end in the track persistent ID in decimal form    ZZ: Third hex digit from the end in the track persistent ID in decimal form

因此,如果:

library Persistent ID = BEAE1DB35624CB18Track Persistent ID = 2488665ADBC5420F

然后文件夹是:

[itunes library folder]/Album Artwork/Cache/BEAE1DB35624CB18/15/00/02/BEAE1DB35624CB18-2488665ADBC5420F.itc2

iTunes XML库使用plist xml format,即XML完成wrong.
不过,你可以通过一些XSLT巫术找到自己的方式.

检查下面的java代码,它将转换iTunes library.xml并将计算出的图稿路径以及艺术家和曲目名称放在output.xml中:

Test.java:

import java.io.file;import javax.xml.transform.source;import javax.xml.transform.transformer;import javax.xml.transform.transformerFactory;import javax.xml.transform.stream.StreamResult;import javax.xml.transform.stream.StreamSource;public class Test {    public static voID main(String[] args) throws Exception {           String libraryFolder = "/Path/To/iTunes/";        transformerFactory factory = transformerFactory.newInstance();        Source xslt = new StreamSource(new file("convert.xsl"));        transformer transformer = factory.newtransformer(xslt);        transformer.setParameter("library_folder",libraryFolder);        Source text = new StreamSource(new file(libraryFolder + "iTunes library.xml"));        transformer.transform(text,new StreamResult(new file(libraryFolder  + "output.xml")));    }}

并且convert.xsl:

<?xml version="1.0"?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/transform">    <xsl:output indent="yes"/>    <xsl:param name="library_folder"/>    <xsl:template match="pList">        <xsl:variable name="libID">            <xsl:value-of select="dict/key[. = 'library Persistent ID']/following-sibling::string[1]"/>        </xsl:variable>        <tracks>            <xsl:apply-templates select="dict/key[. = 'Tracks']/following-sibling::dict[1]/dict" mode="track">                <xsl:with-param name="libID"><xsl:value-of select="$libID"/></xsl:with-param>            </xsl:apply-templates>        </tracks>    </xsl:template>    <xsl:template match="dict" mode="track">          <xsl:param name="libID" />        <entry>            <xsl:variable name="trackID">                <xsl:value-of select="key[. = 'Persistent ID']/following-sibling::string[1]"/>            </xsl:variable>            <xsl:variable name="dig1">                <xsl:call-template name="HexToDecimal">                    <xsl:with-param name="hexnumber" select="substring($trackID,string-length($trackID))"/>                </xsl:call-template>            </xsl:variable>            <xsl:variable name="dig2">                <xsl:call-template name="HexToDecimal">                    <xsl:with-param name="hexnumber" select="substring($trackID,string-length($trackID) - 1,1)"/>                </xsl:call-template>            </xsl:variable>            <xsl:variable name="dig3">                <xsl:call-template name="HexToDecimal">                    <xsl:with-param name="hexnumber" select="substring($trackID,string-length($trackID) - 2,1)"/>                </xsl:call-template>            </xsl:variable>            <artist><xsl:value-of select="key[. = 'Artist']/following-sibling::string[1]"/></artist>            <name><xsl:value-of select="key[. = 'name']/following-sibling::string[1]"/></name>            <track_ID><xsl:value-of select="$trackID"/></track_ID>            <artwork><xsl:value-of select="concat($library_folder,'Album Artwork/Cache/',$libID,'/',$dig1,$dig2,$dig3,'-',$trackID,'.itc2')"/></artwork>        </entry>    </xsl:template>    <!-- Very simple hex to decimal,only one digit -->    <xsl:template name="HexToDecimal">        <xsl:param name="hexnumber" />        <xsl:value-of select="format-number(number(substring-before(substring-after('00/11/22/33/44/55/66/77/88/99/A10/B11/C12/D13/E14/F15/a10/b11/c12/d13/e14/f15/',$hexnumber),'/')),'00')" />    </xsl:template></xsl:stylesheet>
总结

以上是内存溢出为你收集整理的链接iTunes的ITC2文件和“iTunesLibrary.XML”全部内容,希望文章能够帮你解决链接iTunes的ITC2文件和“iTunesLibrary.XML”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1103301.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-28
下一篇2022-05-28

发表评论

登录后才能评论

评论列表(0条)

    保存