Reputation: 1331
I am trying to get the duration of the audio files for trimming them, I am using the below code,
audioAsset = [AVURLAsset assetWithURL:itemURL];
CMTime assetTime = [audioAsset duration];
Float64 duration = CMTimeGetSeconds(assetTime);
when I provide itemURL of any audio file of media library, I get the proper duration, and then I am able to trim the audio file. Then I save the trimmed audio file in document directory. But when I try to trim the already trimmed file the same code returns me 0 as duration. However I am able to play the trimmed file and get the duration using AVAudioPlayer, but what is the problem with AVURLAsset I am not able to figure out.
Can anyone help? I have already tried almost all the answers of such question in stackoverflow.
Upvotes: 13
Views: 7074
Reputation: 103
for my case, the filename's extension have to be recognized, like ".mp3". if not, it will return 0.
... let asset = AVURLAsset(url: URL(fileURLWithPath: filefullname), options: nil) ... asset.duration ...
Upvotes: 1
Reputation: 3023
For Swift 3.0 and above
import AVFoundation
let asset = AVAsset(url: URL(fileURLWithPath: ("Your File Path here")!))
let totalSeconds = Int(CMTimeGetSeconds(asset.duration))
let minutes = totalSeconds / 60
let seconds = totalSeconds % 60
let mediaDuration = String(format:"%02i:%02i",minutes, seconds)
Upvotes: 1
Reputation: 371
I think AVURLAsset
needs to know the type extension of your file to compute its duration.
You're probably storing your file as {fileName}
and not as {fileName}.{extension}
.
If you run the following code with yourFileName
without extension you get *** Could not find format reader for URL
, and return value 0.
import AVFoundation
let fileName = *yourFileName*
let url = NSURL(fileURLWithPath: fileName)
let asset = AVURLAsset(URL: url, options: nil)
println(asset.duration.value.description)
Upvotes: 2
Reputation: 1275
Probably you have used
NSURL *itemPathURL = [NSURL URLWithString:outPath];
instead of
NSURL *itemPathURL = [NSURL fileURLWithPath:outPath];
Upvotes: 23
Reputation: 1477
Try this....
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:Yoururl options:nil];
CMTime time = asset.duration;
double durationInSeconds = CMTimeGetSeconds(time);
int minutes = floor(durationInSeconds/60);
int seconds = round(durationInSeconds - (minutes * 60));
NSString * duration = [NSString stringWithFormat:@"%i:%i",minutes,seconds];
NSLog(@"Duration : %@", duration);
Upvotes: -3
Reputation: 2423
Try like following.....
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *getAudioPath = [documentsDirectory stringByAppendingPathComponent:@"song.mp3"];
NSURL *finalUrl=[[NSURL alloc]initFileURLWithPath:getAudioPath];
NSLog(@"finalUrl===%@",finalUrl);
AVURLAsset *asset = [AVURLAsset assetWithURL: finalUrl];
duration = CMTimeGetSeconds(asset.duration);
NSLog(@"duration==%f",duration);
Upvotes: 0