Изменение частоты дискретизации AUGraph на iOS

Я реализовал AUGraph, похожий на тот, что был в библиотеке разработчика iOS. Однако в моем приложении мне нужно иметь возможность воспроизводить звук с разной частотой дискретизации (возможно, с двумя разными).

Я просматривал документацию Apple и не нашел способа установить частоту дискретизации во время выполнения. Я думал о трех возможных обходных путях:

  1. Повторно инициализируйте AUGraph каждый раз, когда мне нужно изменить частоту дискретизации;
  2. Инициализируйте разные AUGraph для каждой отдельной частоты дискретизации;
  3. Преобразуйте частоту дискретизации каждого звука перед воспроизведением;

Все эти методы кажутся действительно неуклюжими и тяжелыми для процессора.

Каков наилучший способ изменения частоты дискретизации AUGraph во время выполнения?

3 ответа

Решение

Обычно № 1 для сценариев непрерывной потоковой передачи аудио.

Ваша программа может иметь особые потребности или выгоды, используя другой подход, который вы перечислили:

  • # 2: вам нужно обрабатывать там, где повторная инициализация не является проблемой.
  • № 3: вам нужно одновременно смешивать и обрабатывать два потока с разными входными частотами дискретизации, особенно если вы обнаружите, что SRC-сигнал многократно.

но, если вам просто нужно воспроизведение с SRC и минимальная задержка не является проблемой, вы можете попробовать использовать AudioQueue.

Я уверен, что это невозможно сделать во время выполнения. Решение №2 - ваш лучший выбор, наряду с №3. Для преобразования частоты дискретизации, libsndfile, вероятно, может быть адаптирован к вашим потребностям.

Если вы не хотите, чтобы задержка отрывалась и перестраивала звуковой график, вам может потребоваться повторная выборка звуковых данных (для всех, кроме одной частоты дискретизации).

Вы можете либо повторно сэмплировать данные звуков перед тем, как начать их воспроизведение, либо запустить ресамплер в реальном времени как часть звукового графика. Многие музыкальные приложения для iOS делают последнее как часть встроенного синтезаторного модуля на основе сэмплера, поэтому устройство обладает достаточными вычислительными возможностями для этого.

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