Выбрать песни из plist (NSArray) и воспроизводить их с помощью AVAudioPlayer? - PullRequest
1 голос
/ 20 апреля 2011

Я студент, работающий над упражнением по кодированию, и я в тупике!

У меня есть два экземпляра AVAudioPlayer в моем приложении - я могу без проблем загружать песни в каждый плеер, используя прямой путь.

То, что я хотел бы сделать, это воспроизвести несколько песен, содержащихся в массиве на каждом проигрывателе.

Возможно ли это? и если да, то как бы я поступил так?

В моем списке свойств ключ "One.mp3" установлен в виде строки, а значение - в качестве пути к файлу ... (угадал в этой части).

Спасибо за понимание.

- (void)viewDidLoad {
    [super viewDidLoad];

    //multiple song array

    NSString *soundsPath = [[NSBundle mainBundle] pathForResource:@"soundslist" 
                                                           ofType:@"plist"];

    soundsList = [[NSArray alloc] initWithContentsOfFile:soundsPath];

    NSString* filename = [soundsList objectAtIndex:0];
    NSString *path = [[NSBundle mainBundle] pathForResource:filename 
                                                     ofType:@"mp3"];  

    AVAudioPlayer * newAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] 
                                                                    error:NULL];  
    self.audioPlayer = newAudio; // automatically retain audio and dealloc old file if new file is loaded

    [newAudio release]; // release the audio safely

    audioPlayer.delegate = self; 
    [audioPlayer prepareToPlay];
    [audioPlayer setNumberOfLoops:0];
    [audioPlayer play];
}

1 Ответ

1 голос
/ 20 апреля 2011

Звучит так, будто вы хотите попробовать воспроизвести несколько песен на одном проигрывателе.Это невозможно, как указано в Обзор AVAudioPlayer (4-я пуля).Можно воспроизвести несколько песен с несколькими AVAudioPlayers.Примерно так:

NSMutableArray *audioPlayers = [NSMutableArray arrayWithCapacity:[soundsList count]];

for (NSString *soundPath in soundsList) {
    NSError *error = nil;

    AVAudioPlayer *audioPlayer = [AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:&error];
    [audioPlayers addObject:audioPlayer];

    audioPlayer.delegate = self; 
    [audioPlayer prepareToPlay];
    [audioPlayer setNumberOfLoops:0];
    [audioPlayer play];
}

Я бы посоветовал вам жестко прописать путь к файлу, а не читать его с помощью plist.Как только вы это заработаете, вы можете попробовать прочитать это с помощью plist.Примерно так будет работать:

NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"One" withExtension:@"mp3"];
AVAudioPlayer *soundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error]

Таким образом вы удаляете один уровень косвенности и одну точку отказа.

...