#objective-c #ios #cocoa-touch #audio #avaudioplayer
#objective-c #iOS #cocoa-touch #Аудио #avaudioplayer
Вопрос:
Я создаю приложение для iPhone, которое включает в себя учебные пособия по гитарным гаммам. Цель состоит в том, чтобы у меня было много звуков, которые воспроизводит моя функция, пока масштаб не будет завершен.
Вот случайная шкала: F G A B C D 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) amp;amp; (pressed == 0)) {
[self performSelector:@selector(playScale) withObject:nil afterDelay:0.8];
}
}
Это работает. Функция воспроизводит шкалу, но я не могу найти способ определить, когда вызывать более высокую ноту C2. В результате, когда он воспроизводит D, а затем C, C должен быть C2, но все равно вызывает C, который ниже.
Ответ №1:
Вы могли бы сохранить массив NSStrings, которые содержат имена ваших файлов, что-то вроде:
[NSArray arrayWithObjects:@"C", @"D"..., @"C2", @"D2", nil]
И тогда вы могли бы сохранить int
переменную, которую вы используете для итерации по массиву.
В качестве дополнительного замечания, вы уверены AVAudioPlayer
, что это правильный выбор для воспроизведения ваших звуков? Вы должны хотя бы взглянуть AudioServicesPlaySystemSound()
, что больше подходит для воспроизведения коротких звуков.
Комментарии:
1. Merci! Я попробую поиграть с этим! : p
2. Решено! Работает как шарм с помощью большого NSArray и нескольких манипуляций с int / strings / array