Я создаю метроном как часть более крупного приложения, и у меня есть несколько очень коротких wav-файлов для использования в качестве отдельных звуков. Я хотел бы использовать AVAudioEngine, потому что NSTimer имеет значительные проблемы с задержкой, и Core Audio кажется довольно сложным для реализации в Swift. Я пытаюсь сделать следующее, но в настоящее время я не могу выполнить первые 3 шага, и мне интересно, есть ли лучший способ.Использование AVAudioEngine для планирования звуков для метронома низкой латентности
Код очертание:
- Создать массив URL-файлы в соответствии с текущими настройками метронома (количество ударов в бар и подразделений в такт, файл А для ударов, файл B для подразделений)
- Программных создайте wav-файл с соответствующим количеством кадров молчания, основанный на темпе и длине файлов, и вставьте его в массив между каждым звуком
- Прочитайте эти файлы в одном AudioBuffer или AudioBufferList
audioPlayer.scheduleBuffer(buffer, atTime:nil, options:.Loops, completionHandler:nil)
До сих пор я был в состоянии играть циклическую буфер (этап 4) одного звукового файла, но я не смог построить буфер из массива файлов или создать тишину программно, ни я нашел ответы на StackOverflow, которые обращаются к этому. Поэтому я предполагаю, что это не лучший подход.
Мой вопрос: Возможно ли запланировать последовательность звуков с низкой задержкой с использованием AVAudioEngine, а затем выполнить цикл этой последовательности? Если нет, какая структура/подход лучше всего подходит для планирования звуков при кодировании в Swift?
Не уверен, что это помогает, но попробуйте [TheAmazingAudioEngine] (https://github.com/TheAmazingAudioEngine/TheAmazingAudioEngine). Он написан в объективе c, но может быть использован как основа в быстром –
Я кратко рассмотрел TAAE, и это может быть лучший вариант, хотя я надеюсь, что есть более привычный подход. – blwinters