如何使用此代码播放更多声音?

时间:2014-02-09 04:02:13

标签: ios iphone objective-c ios7

   //Action to play Audio//
 -(IBAction)playAudio:(id)sender {
[self.loopPlayer play];
}

 //Action to stop Audio//
-(IBAction)stopAudio:(id)sender {
if (self.loopPlayer.isPlaying) {
    [self.loopPlayer stop];
    self.loopPlayer.currentTime = 0;
    self.loopPlayer.numberOfLoops = -1;
    [self.loopPlayer prepareToPlay];
    }
}

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

//Code that gets audio file "trap synth"//
NSURL* audioFileURL = [[NSBundle mainBundle] URLForResource:@"trapsynth" withExtension:@"wav"];
self.loopPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:nil];

}

这是我使用的一个按钮,当按下按钮时播放声音,并在释放按钮时停止声音。我如何为更多按钮添加更多声音?我希望有更多的按钮可以播放并停止不同的声音。

property (nonatomic, strong) AVAudioPlayer *loopPlayer;

此代码也在我的ViewController.h文件中

3 个答案:

答案 0 :(得分:0)

如果你想同时播放不同的声音你应该考虑创建单独的AVAudioPlayers - 如果你为每个声音创建一个不同的声音,那么你可以用一个特定的按钮分别控制(播放/停止)它们

答案 1 :(得分:0)

在最简单的层面上,您可以执行类似的操作,这样您就可以使用相同的按钮处理程序来处理所有音频。 playAudio检查您按下的播放按钮的标签(确保将标签值设置为IB,为1,2等)。实际上只需要一个停止按钮。

您可以通过多种方式增强此功能,例如尝试以某种方式重用AVAudioPlayer,并在开始时动态加载音频而不是全部。或者将您的音频文件信息存储在一个数组中,创建一个AVAudioPlayers数组以供管理等。但这是一个开始。

-(IBAction)playAudio:(id)sender {
    // first, stop any already playing audio
    [self stopAudio:sender];

    if([sender tag] == 1){
        [self.loopPlayer1 play];
    } else if([sender tag] == 2){
        [self.loopPlayer2 play];
    }
}

-(IBAction)stopAudio:(id)sender {
    if (self.loopPlayer1.isPlaying) {
        [self.loopPlayer1 stop];
        self.loopPlayer1.currentTime = 0;
        self.loopPlayer1.numberOfLoops = -1;
        [self.loopPlayer1 prepareToPlay];
    } else if (self.loopPlayer2.isPlaying) {
        [self.loopPlayer2 stop];
        self.loopPlayer2.currentTime = 0;
        self.loopPlayer2.numberOfLoops = -1;
        [self.loopPlayer2 prepareToPlay];
    }
}

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURL* audioFileURL1 = [[NSBundle mainBundle] URLForResource:@"trapsynth" withExtension:@"wav"];
    self.loopPlayer1 = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:nil];

   NSURL* audioFileURL2 = [[NSBundle mainBundle] URLForResource:@"trapsynth" withExtension:@"wav"];
    self.loopPlayer2 = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL error:nil];
}

AND,在.h文件中;

property (nonatomic, strong) AVAudioPlayer *loopPlayer1;
property (nonatomic, strong) AVAudioPlayer *loopPlayer2;

答案 2 :(得分:0)

好的虽然Miro提供的答案在写轨道上,但给出的代码示例存在问题。

应该是viewDidLoad -

- (void)viewDidLoad {
    [super viewDidLoad];

    NSURL* audioFileURL1 = [[NSBundle mainBundle] URLForResource:@"trapsynth" withExtension:@"wav"];
    self.loopPlayer1 = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL1 error:nil];

   NSURL* audioFileURL2 = [[NSBundle mainBundle] URLForResource:@"other_audio_file" withExtension:@"wav"];
    self.loopPlayer2 = [[AVAudioPlayer alloc] initWithContentsOfURL:audioFileURL2 error:nil];
}

也是stopAudio:方法应该是这个

-(IBAction)stopAudio:(id)sender {
    if (self.loopPlayer1.isPlaying && (sender.tag == 1)) {
        [self.loopPlayer1 stop];
        self.loopPlayer1.currentTime = 0;
        self.loopPlayer1.numberOfLoops = -1;
        [self.loopPlayer1 prepareToPlay];
    }
    if (self.loopPlayer2.isPlaying && (sender.tag == 2)) {
        [self.loopPlayer2 stop];
        self.loopPlayer2.currentTime = 0;
        self.loopPlayer2.numberOfLoops = -1;
        [self.loopPlayer2 prepareToPlay];
    }
}

最后是playAudio:

-(IBAction)playAudio:(id)sender {
    if([sender tag] == 1){
        [self.loopPlayer1 play];
    }
    if([sender tag] == 2){
        [self.loopPlayer2 play];
    }
}