Я пытаюсь создать простое приложение Drumpad. Приложение должно быть супер быстрым и воспроизводить звук с минимальной задержкой. Предпосылка - это выборки аудио в массиве, и каждый из них воспроизводится, когда вы нажимаете пэд.Воспроизведение и остановка звукового образца на iOS (Novocaine)
Уловка заключается в том, что некоторые колодки являются аккордами (а не барабанами), поэтому им необходимо немедленно остановиться.
Вот подходы я пытался:
System Sound - Очень прост в реализации, супер отзывчивый, никакого способа остановить звуки, не разрушая их, не звучит косяк быть более чем на 30 секунд.
AV Framework - Способ замедления.
Удивительный звуковой движок - Кажется приятным, но не уверен, что преимущество над CoreAudio, поскольку настройка была довольно сложной, я не смог получить звук для воспроизведения. Также не уверен в задержке.
Novocaine - Я остановился на этом сейчас, это кажется очень быстрым, и я могу воспроизводить звуки, но я не видел возможности остановить их, как только они начнутся. Я не знаю, как я могу остановить один звук, не останавливая весь аудиомастер?
- (void) playSoundN:(int)padNum
{
__weak ViewController * wself = self;
NSURL *inputFileURL = [[NSBundle mainBundle] URLForResource:@"Drum - Kick" withExtension:@"wav"];
self.fileReader = [[AudioFileReader alloc]
initWithAudioFileURL:inputFileURL
samplingRate:self.audioManager.samplingRate
numChannels:self.audioManager.numOutputChannels];
[self.fileReader play];
self.fileReader.currentTime = 0.0;
[self.audioManager setOutputBlock:^(float *data, UInt32 numFrames, UInt32 numChannels)
{
[wself.fileReader retrieveFreshAudio:data numFrames:numFrames numChannels:numChannels];
NSLog(@"Time: %f", wself.fileReader.currentTime);
}];
[self.audioManager play];
}
Кажется, простая задача, начиная и останавливая звук со сверхнизкой задержкой.
Должен ли я использовать один из вышеуказанных подходов или просто укусить пулю и погрузиться в Core Audio Units.
У кого-нибудь есть идеи?
Спасибо, я дам ему выстрел снова и посмотрим, приемлемо ли отставание –