0

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

我想知道如何从用户启动的单个操作中循环播放多个声音(我的项目中使用了 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];
4

2 回答 2

1

如果您只使用 3 个声音,那么您可以只使用NSString's 的 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];
}
于 2012-04-07T04:17:49.320 回答
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 所描述的数组

于 2012-04-07T04:23:05.237 回答