找到了适用于Java的iTunes控制器API,如何播放特定歌曲?

找到了适用于Java的iTunes控制器API,如何播放特定歌曲?,java,api,com,itunes,jacob,Java,Api,Com,Itunes,Jacob,似乎是正确的行动方针。但是,我希望用户能够简单地指定歌曲标题 我可以使用提示让艺术家和相册查看要浏览的文件夹,因为iTunes就是这样存储文件的…(例如C:\Users\username\Music\iTunes\iTunes Media\Artister\Album\song) 有人知道我可以直接进入指定歌曲的方法吗?我已经找了一段时间了 这里是我正在使用的API的文档,如果有帮助的话 更新---------------------------------- 所以我决定 //U

似乎是正确的行动方针。但是,我希望用户能够简单地指定歌曲标题

我可以使用提示让艺术家和相册查看要浏览的文件夹,因为iTunes就是这样存储文件的…(例如C:\Users\username\Music\iTunes\iTunes Media\Artister\Album\song)

有人知道我可以直接进入指定歌曲的方法吗?我已经找了一段时间了

这里是我正在使用的API的文档,如果有帮助的话

更新----------------------------------

所以我决定

        //Using iTunes Controller
        iTunes itc = new iTunes();
        itc.playFile(filePath); // Takes type String
我被卡住了(

编辑:

我想我可以根据从sourcecollection获得的信息手动创建一个曲目。但对构造函数感到困惑

ITTrack(com.jacob.com.d)

有人能澄清一下创建ITTrack对象的正确语法是什么吗? 这是它的javadoc,我不明白

更新--------------------------------------

好的,我使用fetchDispatch()方法创建了一个ITTrack类。

我现在得到一个例外:

//Using iTunes Controller -- work in progress
iTunes itc = new iTunes();
ITSourceCollection libsource = (ITSourceCollection) itc.getSources();
ITSource trackToPlay = libsource.getItemByName(song);
ITTrack track = new ITTrack(trackToPlay.fetchDispatch());
track.play();
太接近了!所以我对物品“名称”的输入方法做了一些错误…但是什么呢

我想如果我输入:

Exception in thread "main" java.lang.NoSuchMethodError: com.jacob.com.Dispatch.call(Lcom/jacob/com/Dispatch;Ljava/lang/String;Ljava/lang/Object;)Lcom/jacob/com/Variant;
at com.dt.iTunesController.ITSourceCollection.getItemByName(ITSourceCollection.java:49)
at Build.Clapper3.process(-----.java:117)
at Build.Clapper3.main(-----.java:232)
查找源的名称…但我想它没有toString()方法? 结果是:

System.out.println(libsource.toString());

我最终放弃了iTunes控制器API,并用JacobGen生成了我自己的API。我发现索引1是库源&对于IITPlaylistCollection,索引1是库播放列表(所有歌曲),然后在IITTrack对象上调用play()。工作得很好,即使iTunes尚未打开也可以打开

com.dt.iTunesController.ITSourceCollection@118278a
与播放列表类似:

ActiveXComponent iTunesCom = new ActiveXComponent("iTunes.Application");
Dispatch iTunesController = new Dispatch(iTunesCom.getObject());
IiTunes it = new IiTunes(iTunesController);
IITSourceCollection sourceList = it.getSources();
IITSource s = sourceList.getItem(1); // Index 1 is library source
IITPlaylistCollection pc = s.getPlaylists();
IITPlaylist p = pc.getItem(1); // Index 1 is library playlist
IITTrackCollection tracks = p.getTracks();
IITTrack track = tracks.getItemByName(songName);
track.play();

谢谢大家的指点,希望这能帮助有类似问题的人。我花了很长时间才弄明白如何让JacobGen工作,因为互联网上几乎没有任何文档。如果有人有问题,我很乐意发表一篇文章。

我会多读一些文档,并尝试一些事情。开始b查看
iTunes#getSelectedTracks
。最终,当您进入
ITrack
时,它有一个
play
方法getSelectedTracks似乎只是返回光标左键单击所选的曲目。我尝试设置它的方式是用户输入歌曲标题,然后将其存储在字符串中。字符串是n用于通过某种我需要弄清楚的方法指定要播放的歌曲。对不起,我的意思是
getSources
:)检查一下,很好!我不知道这是否有帮助,但在doc
中,通常通过ITTrackCollection访问ITrack。您可以使用ITPlaylist.getTracks()检索为播放列表定义的所有曲目我看到
ITSource
getPlaylists()
所以你可以做些什么?但是我对这个api一无所知。
ActiveXComponent iTunesCom = new ActiveXComponent("iTunes.Application");
Dispatch iTunesController = new Dispatch(iTunesCom.getObject());
IiTunes it = new IiTunes(iTunesController);
IITSourceCollection sourceList = it.getSources();
IITSource s = sourceList.getItem(1); // Index 1 is library source
IITPlaylistCollection pc = s.getPlaylists();
IITPlaylist p = pc.getItem(1); // Index 1 is library playlist
IITTrackCollection tracks = p.getTracks();
IITTrack track = tracks.getItemByName(songName);
track.play();
ActiveXComponent iTunesCom = new ActiveXComponent("iTunes.Application");
Dispatch iTunesController = new Dispatch(iTunesCom.getObject());
IiTunes it = new IiTunes(iTunesController);
IITSourceCollection sourceList = it.getSources();
IITSource s = sourceList.getItem(1); // Index 1 is library source
IITPlaylistCollection pc = s.getPlaylists();
IITPlaylist playlist = pc.getItemByName(playlistName);
playlist.playFirstTrack();