У меня есть приложение ударных, которое я создал на основе AVAudioPlayer
вместо обычных системных звуков, чтобы иметь немного контроля.
Проблема в том, что всякий раз, когда два или более звука воспроизводятся одновременно, он отстает и останавливает все звуки, поэтому ваш удар барабана становится прерывистым и случайно останавливается.
Например: бум-бум чхххх бум-бум ч --- бум-бо ---- ---- чхххх
Если вы вообще можете отличить от этой звукоподражания.
Вот звуковой код, у меня есть предварительно загруженный массив AVAudioPlayer
, чтобы он загружался быстрее.
- (void)triggerSound:(NSInteger)soundNumber {
NSInteger deltaNum = soundNumber*numberOfBuffers;
AVAudioPlayer *lowBuffer = [bufferBox objectAtIndex:deltaNum];
Boolean soundFired = FALSE;
// Find an unused buffer if possible, otherwise play sound from first buffer.
for (int i=0; i<numberOfBuffers; i++) {
NSLog(@"Buffer loop: %d", i);
NSLog(@"Buffer to load: %d", deltaNum);
AVAudioPlayer *tempBuffer = [bufferBox objectAtIndex:deltaNum+i];
if (!tempBuffer.playing) {
tempBuffer.currentTime = 0;
[tempBuffer play];
soundFired = TRUE;
break;
} else if (lowBuffer.currentTime>tempBuffer.currentTime) {
lowBuffer = tempBuffer;
}
}
if (!soundFired) {
lowBuffer.currentTime = 0;
[lowBuffer play];
soundFired = TRUE;
}
}
Этот метод вызывается при нажатии кнопки IBAction. например: [drumObject triggerSound: 3].
Вся помощь приветствуется!