2012-01-20 2 views
1

Accelerate 프레임 워크로 사인 톤 생성기를 만들고 싶습니다. 제네레이터에 어택/릴리즈 (즉, 진폭 엔벨로프)를 설정하고 싶습니다.vecLib/vDSP를 사용하여 봉투가있는 사인 톤 생성기 만들기

사인 값이있는 벡터를 만드는 방법을 알고 있습니다. 내가 모르는 것은 내 벡터 데이터에 진폭 엔벨로프를 적용하는 방법입니다.

선형 볼륨 인 벨롭 벡터를 만들고 내 사인 벡터를 내 인 벨롭 벡터로 곱하기 위해 vDSP_vgen을 사용하여 경사 형 벡터를 만들 수 있음을 알고 있습니다. 하지만, 많은 데이터 포인트를 처리하고 진폭 범위를 저장하기위한 중간 벡터를 작성하는 것이 내 환경에서 메모리를 낭비하기 때문에 이것은 낭비가되는 것 같습니다.

Accelerate 프레임 워크에서 진폭 봉투로 작업하는 가장 좋은 방법은 무엇입니까?

참고 : 저는 벡터 프로그래밍에 익숙하지 않으므로 나와 양장 해주세요.

답변

0

벡터를 작성하거나 벡터에서 조작 할 필요가 없습니다. 벡터 함수는 존재하고 더 빠를 때 유용합니다. 각 벡터 요소에 대해 envelope() * sinf() 호출을 사용하여 봉투를 사용하여 사인을 만드는 것에 대한 벡터 연산 시퀀스를 벤치 마크하고 iOS 테스트 장치에서 더 빠른 것을 확인합니다.

중간 벡터를 오래 유지하고 재사용 (예 : 봉투 재사용) 할 수있는 충분한 메모리가 있으면 후속 반복에 성능이 향상 될 수 있습니다. 일반적인 메모리 사용 대 성능 Ytrade-off입니다.

0

음악 응용 프로그램의 경우, 선형 앰프 엔벌 로프는별로 일반적이지 않습니다. 비선형 램프에 대한

은 기본 옵션은 다음과 같습니다

  1. 봉투의 길이 인에 의해 번식하는 버퍼를 생성 - 다음 VDSP의 곱셈을 사용합니다.
  2. 즉시 생성하는 엔벨로프 값을 곱하면됩니다.