如何使用一个动作循环播放多个声音?

时间:2012-04-07 03:41:49

标签: iphone ios cocoa-touch avaudioplayer

现在我只用一个动作,按钮按钮,加速度计等播放单个声音。

我想知道如何通过用户启动的单个操作循环播放几个声音(我正在为我的项目使用3个声音)。

我目前正在使用下面显示的代码,它的目的是为每个用户操作播放单个声音。我以前没有在项目中使用过NSArray,所以如果你包含它,请包括任何细节。

NSURL *url = [NSURL fileURLWithPath: [NSString stringWithFormat:@"%@/Jet.wav", [[NSBundle mainBundle] resourcePath]]];

        NSError *error;
        audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
        audioPlayer.numberOfLoops = 0;

        if (audioPlayer == nil)
            NSLog(@"%@", [error description]);
        else 
            [audioPlayer play];

2 个答案:

答案 0 :(得分:1)

如果您只使用3种声音,那么只需使用NSString的C数组即可,但如果您需要动态的声音,则应更改为使用NSArray

// .m
NSString *MySounds[3] = {
    @"sound1.wav",
    @"sound2.wav",
    @"sound3.wav",
};

@implementation ...

然后在你的方法中你需要添加一些额外的逻辑

- (void)playSound;
{
    NSString *path = [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], [self nextSoundName]];

    NSURL *url = [NSURL fileURLWithPath:path];

    NSError *error;
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    audioPlayer.numberOfLoops = 0;

    if (audioPlayer == nil) {
        NSLog(@"%@", [error description]);
    } else {
        [audioPlayer play];
    }
}

- (NSString *)nextSoundName;
{
    static NSInteger currentIndex = -1;

    if (++currentIndex > 2) {
        currentIndex = 0;
    }

    return MySounds[currentIndex];
}

答案 1 :(得分:0)

-(IBAction)playSound:(UIButton *)sender{
    NSURL *url = [NSURL fileURLWithPath: [NSString stringWithFormat:@"%@/%@", [[NSBundle mainBundle] resourcePath], [MySounds objectAtIndex:[sender tag]]]];
    NSError *error;
    audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    audioPlayer.numberOfLoops = 0;

    if (audioPlayer == nil)
        NSLog(@"%@", [error description]);
    else 
        [audioPlayer play];
}

在这里,您可以对所有按钮使用单个操作按钮。您需要做的就是将标签设置为按钮。使用Paul所描述的数组