Воспроизведение перекрывающегося звука в iOS - PullRequest
1 голос
/ 02 апреля 2012

Я использую AVAudioPlayer для воспроизведения небольшого звука при нажатии пользователем кнопки.Звук длится около 3 секунд, и я хочу, чтобы, если пользователь нажимал кнопку несколько раз, выстрел должен звучать несколько раз.Если пользователь нажимает дважды в течение 2 секунд, второй звук должен перекрывать первый выстрел.

Моя проблема заключается в том, что выстрел звучит только каждые 3 секунды (если пользователь нажимает быстро) вместо каждого нажатия кнопки.,

Inside ViewDidLoad

NSString *path = [[NSBundle mainBundle] pathForResource:@"shot" ofType:@"caf"];
urlShotCaf = [NSURL fileURLWithPath:path];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:urlShotCaf error:nil] ;
[player prepareToPlay];

И когда человек нажимает кнопку выстрела

- (IBAction)tap:(id)sender {
    clicks++;
    [player play];
}

Могу ли я сделать это с AVAudioPlayer?Должен ли я использовать другой фреймворк?

Ответы [ 3 ]

1 голос
/ 02 апреля 2012

Как указано в ссылке здесь :

Воспроизведение нескольких звуков одновременно, по одному звуку на аудиоплеер, с точной синхронизацией

Я полагаю, вынужен AVAudioPlayer для каждого звука, который вы хотите воспроизвести одновременно.В противном случае вы можете использовать любую простую библиотеку, такую ​​как CocosDenshion , которая действительно проста, легко встраивается и мощна (она находится в OpenAL).

Просто выполните

[SimpleAudioEngine sharedEngine] playEffect:@"yoursound.wav"];

ивсе готово.

1 голос
/ 16 октября 2014

Пожалуйста, попробуйте это. У меня это работает.

- (IBAction) tap:(id)sender {
    if ([player isPlaying]) {
        [player stop];
        [player setCurrentTime:0.0];
    }
    [player play];
}
0 голосов
/ 02 апреля 2012

Если высокоуровневые фреймворки терпят неудачу, вы можете окунуться в AUSampler - проигрыватель семплов AudioUnit (обычно используется для воспроизведения сэмплированных инструментов, звуков ударных и т. Д.). Это должно иметь очень быстрое время отклика и поддерживать несколько активных заметок. Настройте воспроизведение сэмпла как однократное. Когда кнопка нажата, смоделируйте заметку о событии. Вы также можете отобразить разные сэмплы (аудиозаписи) на разные ноты и диапазоны скоростей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...