【问题标题】:Accessing newly added tracks in iTunes with COM interface使用 COM 接口访问 iTunes 中新添加的曲目
【发布时间】:2011-08-22 16:11:47
【问题描述】:

我正在尝试使用 COM 接口和 JavaScript 将曲目信息添加到 iTunes 中新添加的曲目。我能够成功添加文件,但无法使用 OperationStatus.Tracks() 获取它们。我知道 OperationStatus.Tracks() 在 OperationStatus.InProgress() 返回 false 之前不可用。但是,当我尝试对预期的 OperationStatus 对象调用 InProgress() 时,我收到错误消息:“对象不支持此属性或方法。”

var iTunesApp = WScript.CreateObject("iTunes.Application");
var status = iTunesApp.LibraryPlaylist.AddFile('newfile.mp4');
WScript.Echo(status.InProgress());

谁能解释一下这里出了什么问题?

【问题讨论】:

    标签: javascript com itunes


    【解决方案1】:

    我已经能够回答我自己的问题了。当不需要参数时,我只是添加了空括号。因此,方法和属性未被识别。上面提到的最后一行将以以下形式工作:
    WScript.Echo(status.InProgress);

    访问最近添加的曲目可以使用
    var newtracks = status.Tracks;

    然后要访问有关单个轨道的属性,可以按如下方式完成:
    var newtrack = newtracks.ItemByName('filename');
    WScript.Echo(newtrack.Name);

    【讨论】:

    • 我想知道您是如何设置 javascript 来访问 iTunes 的,我有 iTunes sdk,但它是一个 .h 和 .c 文件(它们是 c 类型语言的源文件)。我正在尝试使用在本地 html 文件上运行的 javascript 从 iTunes 获取正在播放的信息并将其显示在页面上。 (这都是在本地计算机上)
    【解决方案2】:

    不要忘记 AddFile 的结果是异步的,因此您需要循环并等待才能访问数据。

    var results = iTunesApp.AddFile( filepath );
    
    // wait for the result to be available
    while( results.InProgress )
        Thread.Yield(); 
    
    foreach( var it in results.Tracks )
    {
        tune = it as IITFileOrCDTrack;
        Console.WriteLine( "Track '{0} - {1}' was added to itunes library", tune.Artist, tune.Name );
    }
    

    要获取最新添加的曲目,我想您可以创建一个智能播放列表,按添加日期和访问周期排序,这可能比访问整个 iTunes 数据库更快。

    【讨论】:

    • 抱歉没有意识到问题是在 javascript 中......我想这仍然是一个有效的观点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-22
    • 2011-02-11
    • 2015-08-13
    • 1970-01-01
    • 2015-10-13
    相关资源
    最近更新 更多