Я создаю метроном как часть более крупного приложения, и у меня есть несколько очень коротких wav файлов для использования в качестве отдельных звуков. Я хотел бы использовать AVAudioEngine, потому что NSTimer имеет значительные проблемы с задержкой, и Core Audio кажется довольно сложным для реализации в Swift. Я пытаюсь сделать следующее, но в настоящее время я не могу выполнить первые 3 шага, и мне интересно, есть ли лучший способ.
Схема кода:
- Создайте массив URL-адресов файлов в соответствии с текущими настройками метронома (количество ударов на панель и разбиение на бит, файл A для бит, файл B для подразделений)
- Программно создайте wav файл с соответствующим количеством кадров молчания на основе темпа и длины файлов и вставьте его в массив между каждым звуком
- Прочитайте эти файлы в одном AudioBuffer или AudioBufferList
-
audioPlayer.scheduleBuffer(buffer, atTime:nil, options:.Loops, completionHandler:nil)
До сих пор мне удалось воспроизвести циклный буфер (шаг 4) одного звукового файла, но мне не удалось создать буфер из массива файлов или создать тишину программно, и я не нашел никаких ответы на StackOverflow, которые обращаются к этому. Поэтому я предполагаю, что это не лучший подход.
Мой вопрос: Возможно ли запланировать последовательность звуков с низкой задержкой, используя AVAudioEngine, а затем закодировать эту последовательность? Если нет, какая структура/подход лучше всего подходит для планирования звуков при кодировании в Swift?