Search code examples
iosuitableviewaudioavfoundationdocuments

Load audio in DOCUMENTS when UITableView "cell" is pressed


I have a UITableView displaying a llist f files in the Documents Directory... and I want it to play the audio file in the Documents directory when pressed...

It runs with no errores but doesn't play the audio when pressed...

    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%d.caf",indexPath.row+1]];
NSURL *audioURL = [NSURL URLWithString:fileName];

NSData *audioData = [NSData dataWithContentsOfURL:audioURL];

NSError *error;

_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:&error];

    _audioPlayer.delegate = self;
        [_audioPlayer play];
}

Solution

  • Change this line:

    NSURL *audioURL = [NSURL URLWithString:fileName];
    

    to this:

    NSURL *audioURL = [NSURL fileURLWithPath:fileName isDirectory:NO];
    

    And then just do:

     if(_audioPlayer == nil)
        {
            _audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioURL error:nil];
        }
        else
        {
            _audioPlayer = [self.audioAlert initWithContentsOfURL:audioURL error:nil];
        }