Music Scale: функция петли для воспроизведения разных нот - PullRequest
0 голосов
/ 08 октября 2011

Я делаю приложение для iPhone, которое включает учебники по гитарным весам.Цель состоит в том, чтобы у меня было много звуков, которые воспроизводит моя функция, пока не будет выполнена шкала.

Вот случайная шкала: FGABCD E. Я записал звуки, такие как C.mp3, D, E, F, G,A, B, C2, D2, E2 ... 2 - высшая нота.Вот код, который я использую:

- (IBAction) playScale {

    NSLog(@"s: %i", s);
    NSLog(@"p: %i", pressed);
    [self.player prepareToPlay];

    components = [self.scale componentsSeparatedByString:@", "];
    ns_NoteToPlay = [components objectAtIndex:s];
    NSString *path = [[NSBundle mainBundle] pathForResource:ns_NoteToPlay ofType:@"m4a"];
    NSLog(@"Path : %@", path);
    self.player.delegate = self;
    self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    [self.player play];
    mChord.text = ns_NoteToPlay;

    NSLog(@"Nombre de notes ds Array : %i", components.count);

    if ( s == 0) { 
        int clean;
        clean = components.count + 1;
        [NSTimer scheduledTimerWithTimeInterval:clean target:self selector:@selector(cleanDots) userInfo:nil repeats:NO];
    }

    nsNowPlayingNote = ns_NoteToPlay;
    [self instrument];
    s = s+1;



    if ((s < components.count) && (pressed == 0)) {
        [self performSelector:@selector(playScale) withObject:nil afterDelay:0.8];    
    } 


}

Это работает.Функция воспроизводит шкалу, но я не могу найти способ определить, когда вызывать более высокую ноту C2.Следовательно, когда он воспроизводит D, тогда C, C должен быть C2, но все равно вызывает C, что ниже.

1 Ответ

0 голосов
/ 08 октября 2011

Вы можете хранить массив строк NSStrings, которые содержат имена ваших файлов, например:

[NSArray arrayWithObjects:@"C", @"D"..., @"C2", @"D2", nil]

И тогда вы можете хранить переменную int, которую вы используете для перебора массива.

Как примечание, вы уверены, что AVAudioPlayer является правильным выбором для воспроизведения ваших звуков? Вы должны хотя бы взглянуть на AudioServicesPlaySystemSound(), который больше подходит для воспроизведения коротких звуков.

...