Разделите звуковую дорожку на сегменты по BPM и проанализируйте каждый сегмент, используя Superpowered iOS
Я использую библиотеку Superpowered iOS для анализа аудио и извлечения BPM, громкости, высоты звука. Я работаю над проектом iOS Swift 3.0 и смог настроить классы C на Swift, используя заголовки Bridging для ObjC.
Проблема, с которой я сталкиваюсь, заключается в том, что, хотя я могу создать объект декодера, извлечь аудио из музыкальной библиотеки и сохранить его как.WAV - я не могу создать объект декодера только для фрагментов извлеченного аудио и получить класс анализатора вернуть данные.
Мой подход заключается в создании объекта декодера следующим образом:
var decodeAttempt = decoder!.open(self.originalFilePath, metaOnly: false, offset: offsetBytes, length: lengthBytes, stemsIndex: 0)
'offsetBytes' и 'LengthBytes' Я думаю, это позиция в аудио-файле. Поскольку я уже распаковал аудио, сохранил его в формате WAV и затем предоставляю его декодеру, я рассчитываю смещение и длину, используя формулу аудио PCM Wave, равную 44100 x 2 x 16 / 8 = 176400 байт в секунду. Затем используйте это, чтобы указать начальную точку и длину в байтах. Я не уверен, что это правильный способ сделать это, поскольку декодер вернет "Неизвестный формат файла".
Любые идеи или даже альтернативные предложения о том, как добиться названия этого вопроса? Заранее спасибо!
1 ответ
Параметры смещения и длины в SuperpoweredDecoder существуют из-за формата файла Android APK, в котором связанные аудиофайлы просто объединяются в пакет.
Несмотря на то, что WAV-файл настолько "несжатый", насколько это возможно, в начале есть заголовок, поэтому смещение и длина не подходят для этой цели. Тем более что заголовок присутствует только в начале, а без заголовка декодирование невозможно.
Вы упоминаете, что вы можете извлечь аудио в PCM (и сохранить в WAV). Тогда у вас есть ответ: просто отправьте разные извлеченные части разным экземплярам SuperpoweredOfflineAnalyzer.