获取音频文件大小(以千字节为单位)

3

在我的应用程序中,我有以caf和aac格式存储的音频文件。我需要从音频URL获取音频文件的大小(以KB为单位)。是否有实现这一要求的方法?

4个回答

5
您可以使用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上使用。


嗨,它运行良好,谢谢。但是我已经用另一种方式做过了,如下所述。 - Siddharth
@Siddharth 是的,创建NSData表示并获取其长度也可以工作,但是您应该将该方法保留给需要NSData表示的情况。如果您需要 NSData表示,则您的方法很好。如果您不需要NSData表示,则应该优先考虑我的方法,因为与从文件创建NSData实例相比,它将节省大量CPU、磁盘活动和内存。 - justin

1

您可以使用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;

有多个键可用于文件大小信息,另一个可能更适合您的需求。


我尝试了这个,但是我得到的数字是null。我得到的bool结果为YES。有什么原因吗?我错在哪里了? - Siddharth
文件可读吗?此外,在iOS4中,该方法什么也不做。 - justin
好的 - 在iOS上,您可以在5.0及更高版本上使用此方法。我已经更新了我的答案并加入了这个细节。 - justin
@Siddharth,我提供了一个新答案,具有更好的向后兼容性。 - justin

1

0

我通过将其转换为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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接