Изменение частоты дискретизации AUGraph на iOS - PullRequest
3 голосов
/ 28 декабря 2011

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 28 декабря 2011

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

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

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

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

0 голосов
/ 28 декабря 2011

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

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

0 голосов
/ 28 декабря 2011

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

...