Разделите звуковую дорожку на сегменты по 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.

Другие вопросы по тегам