0

現在、1つのアクション、ボタンの押下、加速度計などから1つのサウンドを再生しています。

ユーザーが開始する1つのアクションから、複数のサウンド(プロジェクトでは3つのサウンドを使用しています)を循環させる方法を知りたいです。

私は現在、以下に示すコードを使用しています。これは、ユーザーアクションごとに1つのサウンドを再生するという目的を果たします。私はこれまでプロジェクトでNSArrayを使用したことがないので、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つのサウンドのみを使用している場合は、のC配列を使用するだけで済みNSStringますが、動的な量のサウンドが必要な場合は、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 に答える