2013-02-16 1 views
0

Мне нужно воспроизвести несколько звуковых файлов. У меня есть следующий код:Как играть в несколько звуков?

мой .h класс

#import <UIKit/UIKit.h> 
#import <AVFoundation/AVFoundation.h> 
#import <AudioToolbox/AudioToolbox.h> 

@interface ViewController : UIViewController { 
    AVAudioPlayer *musicPlayer; 
} 

- (IBAction)music1:(id)sender; 
- (IBAction)music2:(id)sender; 
- (IBAction)music3:(id)sender; 
- (IBAction)music4:(id)sender; 
- (IBAction)music5:(id)sender; 

@end 

.m мой файл

#import "ViewController.h" 
@interface ViewController() 
@end 
@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (IBAction)music1:(id)sender { 

    if(musicPlayer.isPlaying) 
    { 
     [musicPlayer pause]; 
     return; 
    } 
    if(musicPlayer == nil) 
    { 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music1" ofType:@"wav" ]]; 
     musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    } 
    [musicPlayer play]; 
} 

- (IBAction) music2:(id)sender { 

    if(musicPlayer.isPlaying) 
    { 
     [musicPlayer pause]; 
     return; 
    } 
    if(musicPlayer == nil) 
    { 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music2" ofType:@"wav" ]]; 
     musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    } 
    [musicPlayer play]; 
} 

- (IBAction) music3:(id)sender { 

    if(musicPlayer.isPlaying) 
    { 
     [musicPlayer pause]; 
     return; 
    } 
    if(musicPlayer == nil) 
    { 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music3" ofType:@"wav" ]]; 
     musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    } 
    [musicPlayer play]; 
} 

- (IBAction) music4:(id)sender { 

    if(musicPlayer.isPlaying) 
    { 
     [musicPlayer pause]; 
     return; 
    } 
    if(musicPlayer == nil) 
    { 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music4" ofType:@"wav" ]]; 
     musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    } 
    [musicPlayer play]; 
} 

- (IBAction) music5:(id)sender { 

    if(musicPlayer.isPlaying) 
    { 
     [musicPlayer pause]; 
     return; 
    } 
    if(musicPlayer == nil) 
    { 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music5" ofType:@"wav" ]]; 
     musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    } 
    [musicPlayer play]; 
} 
@end 

но этот код не работает: только один музыкальный файл воспроизводится. Другого файла нет.

Также есть пример:
Музыка1 воспроизведение. Я нажимаю кнопку Music2 -> Music1 end, Music2 start.
Как мне написать код?

Большое спасибо ..

ответ

0

Вы должны AVAudioPlayer для каждого звука:

.h:

 #import <UIKit/UIKit.h> 
      #import <AVFoundation/AVFoundation.h> 
      #import <AudioToolbox/AudioToolbox.h> 

      @interface ViewController : UIViewController { 
       AVAudioPlayer *musicPlayer1; 
       AVAudioPlayer *musicPlayer2; 
       AVAudioPlayer *musicPlayer3; 
       AVAudioPlayer *musicPlayer4; 
       AVAudioPlayer *musicPlayer5; 

NSMutableArray playingMusicArray; 

      } 

      - (IBAction)music1:(id)sender; 
      - (IBAction)music2:(id)sender; 
      - (IBAction)music3:(id)sender; 
      - (IBAction)music4:(id)sender; 
      - (IBAction)music5:(id)sender; 

     @end 

.m:

#import "ViewController.h" 
@interface ViewController() 
@end 
@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    playingMusicArray = [[NSMutableArray alloc] init]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 



- (void)stopPlayingMusic { 
    for(AVAudioPlayer *audioPlayer in playingMusicArray) 
    { 
     [audioPlayer pause]; 
     [playingMusicArray removeObject:audioPlayer]; 


    } 
} 
- (IBAction)music1:(id)sender { 


    [self stopPlayingMusic]; 
    if(musicPlayer1 == nil) 
    { 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music1" ofType:@"wav" ]]; 
     musicPlayer1 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    } 
    [playingMusicArray addObject:musicPlayer1]; 
    [musicPlayer1 play]; 
} 

- (IBAction) music2:(id)sender { 

    [self stopPlayingMusic]; 
    if(musicPlayer2 == nil) 
    { 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music2" ofType:@"wav" ]]; 
     musicPlayer2 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    } 
    [playingMusicArray addObject:musicPlayer2]; 

    [musicPlayer2 play]; 
} 

- (IBAction) music3:(id)sender { 

    [self stopPlayingMusic]; 

    if(musicPlayer3 == nil) 
    { 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music3" ofType:@"wav" ]]; 
     musicPlayer3 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    } 
    [playingMusicArray addObject:musicPlayer3]; 

    [musicPlayer3 play]; 
} 

- (IBAction) music4:(id)sender { 

    [self stopPlayingMusic]; 

    if(musicPlayer4 == nil) 
    { 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music4" ofType:@"wav" ]]; 
     musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    } 
    [playingMusicArray addObject:musicPlayer4]; 

    [musicPlayer4 play]; 
} 

- (IBAction) music5:(id)sender { 

    [self stopPlayingMusic]; 

    if(musicPlayer5 == nil) 
    { 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"music5" ofType:@"wav" ]]; 
     musicPlayer5 = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    } 
    [playingMusicArray addObject:musicPlayer5]; 

    [musicPlayer5 play]; 
} 
@end 
+0

И тогда вы в конечном итоге создание 25 аудиоплееров. Я уверен, что вы имели в виду: «Вам нужно пять« AVAudioPlayer's: по одному для каждого звука ». –

+0

Спасибо вам большое. Я пропустил обзор :) Каков второй ответ на мой вопрос? Также есть пример: Музыка1 играет. Я нажимаю кнопку Music2 -> Music1 end, Music2 start. Как мне написать код? – Axapta

+0

Ищите мой обновленный ответ. Это не лучшее решение, но он должен работать –