我正在使用Cocoa在Mac上创建一个播放音频的应用程序。我认为我的应用程序在用户计算机上搜索音频文件的最佳位置是从iTunes获取目录路径。如何从iTunes中检索目录路径?这会是某种偏好设置吗?
感谢。
答案 0 :(得分:7)
对于那些将来会遇到这个问题的人,我已经记录了我在下面使用过的方法。
我决定不使用卡累利阿框架因为我不需要所有的花里胡哨。我只需要找到iTunes资料库并显示一系列歌曲。
我浏览了Karelia框架,看起来他们通过用户默认设置找到iTunes资料库,如下所示。
+ (NSArray*) parserInstancesForMediaType:(NSString*)inMediaType
{
NSMutableArray* parserInstances = [NSMutableArray array];
if ([self isInstalled])
{
CFArrayRef recentLibraries = CFPreferencesCopyAppValue((CFStringRef)@"iTunesRecentDatabases",(CFStringRef)@"com.apple.iApps");
NSArray* libraries = (NSArray*)recentLibraries;
for (NSString* library in libraries)
{
NSURL* url = [NSURL URLWithString:library];
NSString* path = [url path];
BOOL changed;
(void) [[NSFileManager imb_threadSafeManager] imb_fileExistsAtPath:&path wasChanged:&changed];
NSString *libraryPath = [path stringByDeletingLastPathComponent]; // folder containing .xml file
[IMBConfig registerLibraryPath:libraryPath];
IMBiTunesParser* parser = [[[self class] alloc] initWithMediaType:inMediaType];
parser.mediaSource = path;
parser.shouldDisplayLibraryName = libraries.count > 1;
[parserInstances addObject:parser];
[parser release];
}
if (recentLibraries) CFRelease(recentLibraries);
}
return parserInstances;
}
使用上述方法,您可以使用以下代码找到所有iTunes资料库。
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSDictionary *userPref = [userDefaults persistentDomainForName:@"com.apple.iApps"];
NSArray *recentDatabases = [userPref objectForKey:@"iTunesRecentDatabases"];
for (NSString *key in recentDatabases)
{
NSLog(@"%@", key);
}
此外,如果您检查用户默认的iApps字典,您可以使用这些其他键来获取其他应用程序的信息
iMovie
iPhotoAutoImportPath
iPhotoRecentDatabases
iTunesRecentDatabases
iTunesRecentDatabasePaths
答案 1 :(得分:3)
编辑:正如其他人所指出的,以下方法并未解决iTunes资料库可能不在用户主文件夹中的情况。有关更好的解决方案,请参阅David's answer。查找用户的音乐文件夹对于查找非iTunes音频文件的标准位置(但不是唯一的位置)可能仍然有用(例如,作为打开面板的默认文件夹)。
原始答案:
您可以通过
找到用户的音乐文件夹NSString *musicPath = [NSSearchPathForDirectoriesInDomains(NSMusicDirectory, NSUserDomainMask, YES) objectAtIndex:0];
这通常会有一个iTunes子目录,其中包含“iTunes Music Library.xml”文件,其中包含用户iTunes资料库的大部分元数据。不要尝试写入它 - iTunes只创建此文件,以便其他应用程序可以访问它,但不会在内部使用它。
答案 2 :(得分:1)
使用the Scripting Bridge与iTunes通信。您可以向iTunes询问用户的库及其中的每个轨道;文件轨道将自由地告诉您它们在文件系统中的位置。
或者,嵌入Karelia Software的iMedia Browser框架,它将与您联系。
您可能还应该能够打开用户在您的应用上删除的音频文件,或者在Finder的“获取信息”中分配给它并打开。考虑making your application document-based;或者,实施the right application delegate method并声明the right Info.plist properties。