2012-06-21 2 views
2

오디오 합성을 위해 OpenGLES2.0 쉐이더 (GLSL)를 성공적으로 사용하는 사람이 있습니까?iOS 오디오 가속

이미 iDS 앱에서 오디오를 가속화하기 위해 vDSP를 사용합니다.이 코드는 C 코드에서 간단한 벡터 명령 세트를 제공합니다. vDSP의 주된 문제는 기본 샘플 루프가 각 기본 연산 (벡터 추가, 벡터 곱하기)으로 푸시 다운되기 때문에 벡터 지향 어셈블리 언어에 필요한 양을 작성해야한다는 것입니다. 이러한 시퀀스로 표현식을 컴파일하는 것은 셰이더 언어가 자동화하는 본질입니다. OpenCL은 iOS에서는 공개되지 않습니다. GLSL이 런타임에 컴파일된다는 것도 흥미 롭습니다. 즉, 사운드 엔진의 대부분이 GLSL에있을 수 있다면 사용자는 중요한 패치 기여를 할 수 있습니다.

답변

2

iOS GPU 쉐이더는 상대적으로 "빠름"이지만 GPU에서 데이터를로드하고 복구하는 경로 (텍스처, 처리 된 픽셀 등)는 GLSL을 사용하여 현재의 쉐이더 계산 효율을 상쇄 할만큼 충분히 느립니다 .

실시간 합성을 위해 GPU 픽셀 언로드 경로의 대기 시간은 CPU 합성을 사용하여 RemoteIO를 공급하는 최상의 오디오 응답 대기 시간보다 훨씬 큽니다. 예 : 디스플레이 프레임 속도 (GPU 파이프 라인이 잠기는)가 최적의 RemoteIO 콜백 속도보다 느립니다. 이 짧은 오디오 버퍼 내에서 사용할 수있는 병렬성이 충분하지 않습니다.

+0

저는 웨이브 테이블 합성의 맥락에서 현재 vDSP 코드를 만들고 있습니다. 이론적으로는 실제로 병렬성이 좋습니다. 유리 위에 4 개의 손가락이 있으면 코러스 디 튜닝을 위해 손가락 당 3 개의 목소리가 들리고 오디오 버퍼 당 256 개의 샘플이 있습니다. 카드로 들어오고 나가는 모든 웨이브 테이블 데이터는 미리로드됩니다. 주요 문제는 새로운 매개 변수로 커널을 신뢰할 수있게 호출하고 256 샘플을 다시 가져와 오디오로 렌더링 할 수 있습니다. – Rob

+0

즉, 제어 속도가 약 100hz (음성 스플라인에 대한 새 지점 설정) 및 해당 기간을 충당 할 수있는 충분한 샘플을 안정적으로 가져옵니다. – Rob

+0

먼 미래에, 우리는 이제'CVOpenGLESTextureCache'를 갖게됩니다. 이것은 GPU와 CPU에 동일한 버퍼에 대한 액세스를 부여함으로써, 순수 GL 접근법의 값 비싼 앞뒤를 제거 할 수 있습니다. 그러나 대기 시간에 대해서는 언급 할 수 없었습니다. 이름에서 알 수 있듯이, 이것은 주로 실시간 비디오 처리와 같은 것으로 큰 단계에서 발생하는 경향이 있습니다. – Tommy