Использование vecLib/vDSP для создания генератора синусоидального тона с огибающей

Я хочу создать генератор синусоидального тона с платформой Accelerate. Я бы хотел, чтобы мой генератор имел настройку атаки/сброса (т. е. огибающую амплитуды).

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

Я знаю, что могу создать наклонный вектор, используя vDSP_vgen, чтобы создать вектор огибающей линейного объема и умножить мой синусоидальный вектор на мой вектор огибающей. Однако это кажется расточительным, потому что я имею дело со многими точками данных, и создание промежуточного вектора только для хранения огибающей амплитуды довольно расточительно в моей среде.

Как лучше всего работать с огибающей амплитуды в среде Accelerate?


person Dany Joumaa    schedule 20.01.2012    source источник


Ответы (2)


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

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

person hotpaw2    schedule 20.01.2012

для музыкальных приложений огибающая линейного усилителя не очень распространена/полезна.

для нелинейной рампы вашими основными вариантами являются:

  1. создайте буфер для умножения, равный длине конверта, а затем используйте умножение vdsp.
  2. просто умножьте на значения конверта, которые вы генерируете на лету.
person justin    schedule 20.01.2012