AVAudioFile can not read file from document directory

NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [NSString stringWithFormat:@"%@/audio.mp3",documentsDirectory];
NSURL *audioPathURL = [NSURL fileURLWithPath:filePath];
NSFileManager *filemanager = [[NSFileManager alloc]init];
    if ([filemanager fileExistsAtPath:filePath])
    {
AVAudioFile *audioFile = [[AVAudioFile alloc] initForReading:audioPathURL error:&err];
}

This can not read the audio file, It returns audioFile nil. For same code when I pass url from NSBundle like

NSString *path  = [[NSBundle mainBundle] pathForResource:@"Audio" ofType:@"mp3"];
NSURL *pathURL = [NSURL fileURLWithPath : path]; 

It works fine, Any sugestions. Thank you

Upvotes: 0

Views: 565

Answers (2)

Ronak Chaniyara
Ronak Chaniyara

Reputation: 5435

The NSBundle class is used for finds thing in applications bundle, but the Documents directory is outside the bundle, so the way you're generating the path won't work with Documents directory.

Try as below:

NSArray * paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString * documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"audio.mp3"];

NSURL *audioPathURL = [NSURL fileURLWithPath:filePath];
NSFileManager *filemanager = [[NSFileManager alloc]init];

if ([filemanager fileExistsAtPath:filePath])
{
      AVAudioFile *audioFile = [[AVAudioFile alloc] initForReading:audioPathURL error:&err];
}

Upvotes: 0

Arun Gupta
Arun Gupta

Reputation: 2636

Issue could be the "/" you are using for append filename to path. Try below change

NSString *filePath = [NSString stringWithFormat:@"%@audio.mp3",documentsDirectory];

Or try below alternative:

NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"audio.mp3"];

Upvotes: 0

Related Questions