【发布时间】:2011-11-03 10:36:56
【问题描述】:
在我的应用程序中,我有一个以 caf 和 aac 格式存储的音频文件。我需要从音频 url 获取音频文件的大小(以 kb 为单位)。有没有办法达到这个要求?
【问题讨论】:
标签: iphone objective-c audio avaudioplayer nsdata
在我的应用程序中,我有一个以 caf 和 aac 格式存储的音频文件。我需要从音频 url 获取音频文件的大小(以 kb 为单位)。有没有办法达到这个要求?
【问题讨论】:
标签: iphone objective-c audio avaudioplayer nsdata
您可以使用NSFileManager 请求属性字典,然后从属性字典中获取大小:
NSFileManager * fileManager = [NSFileManager new];
NSError * error = 0;
NSDictionary * attr = [fileManager attributesOfItemAtPath:path error:&error];
// error checking
unsigned long long size = [attr fileSize];
[fileManager release];
这在 iOS 2 和 OSX.5 上可用
【讨论】:
NSData 表示时,您应该保留这种方法。如果您需要 NSData 表示,那么您的方法可以正常工作。如果您不需要 NSData 表示,那么应该支持我的方法,因为与从文件创建 NSData 实例相比,它会节省大量 CPU、磁盘活动和内存。
你可以使用下面的命令行
$ curl --head $URL_OF_AUDIO_FILE | grep 内容长度 | awk '{打印 ($2/1024);}'
[[ PDF 示例]]
卷曲 --head http://cran.r-project.org/doc/manuals/R-intro.pdf | grep 内容长度 | awk '{打印 ($2/1024);}'
【讨论】:
您可以使用 CF/NSURL 的属性访问器,它们适用于 iOS 5 及更高版本,以及 OSX.6 及更高版本:
id value = 0;
// Key for the file’s size in bytes, returned as an NSNumber object:
NSString * key = NSURLFileSizeKey;
NSError * error = 0;
BOOL result = [audioFileURL getResourceValue:&value forKey:key error:&error];
... error checking here ...
NSNumber * number = value;
文件大小信息有多个键,另一个可能更适合您的需要。
【讨论】:
我通过将其转换为 NSData 并获取其长度属性来解决它。
NSError *err = nil;
NSData *audioData = [NSData dataWithContentsOfFile:file options:0 error:&err];
NSString *audioLength = [NSString stringWithFormat:@"%dkB",[audioData length]/1000];
NSLog(@"[audioData bytes]==%@",audioLength);
【讨论】: