샘플 도구 및 소스 코드
시간 영역의 임펄스 응답을 주파수 영역으로 변환하는 데 도움을 주기 위해 포함된 IR 변환 도구가 감소 메커니즘 지원을 포함하도록 업데이트되었습니다. 이 도구는 품질을 지정하는 명령줄 매개변수를 전달하여 이 테이블을 생성하도록 설정할 수 있습니다(0.0에서 99.9 사이, 0.0은 임펄스 응답 에너지의 99.9%가 유지됨을 의미하고, 99.9는 전력의 99.99%가 유지됨을 의미합니다). 이 기능이 활성화되면, XDSP는 처리 속도를 개선하기 위해 임펄스 응답의 극히 낮은 전력 샘플(0에서 거의 0에 가까운 값)을 처리하지 않습니다. 감소 테이블을 설정하고 쓰는 코드는 main.cpp 파일의 ImpulseResponseReduction이라는 하나의 클래스에 있으며, 감소 테이블을 쓰는 함수는 ImpulseResponseReduction::SetReductionBlock입니다. 감소 테이블의 형식이 아래에 지정된 대로 유지되는 한, 필요에 맞게 사용자 지정할 수 있으며, 각 임펄스 응답 블록에 대해 처리하려는 샘플 수를 지정할 수 있습니다.감소 테이블 형식
임펄스 응답 감소 메커니즘은 주파수 영역 임펄스 응답 버퍼의 끝에 추가된 감소 블록을 기반으로 작동합니다. 감소 블록은 하나의 임펄스 응답 블록 크기이며 0xFFFFACE1 과 같은 4바이트 시그니처로 시작하여 최대 15개의 4바이트 구조 항목이 뒤따릅니다. 블록의 나머지는 0으로 채워져야 합니다. 4바이트 구조는 두 개의 16비트 부호 없는 값을 포함합니다: 컷오프 주파수와 블록 인덱스. 다음은 예시입니다:
XDSP가 이러한 감소 블록을 처리할 때 다음이 발생합니다:
- 하드웨어는 블록 8까지 전체 임펄스 응답 블록을 처리합니다(블록이 0 인덱스이므로 첫 8개 블록을 의미).
- 블록 8부터 블록 86까지, 하드웨어는 각 블록의 처음 384개 샘플만 처리하고 출력에 거의 영향을 미치지 않는 것으로 판단되는 나머지 샘플은 버립니다.
- 블록 86부터 블록 102까지, 하드웨어는 각 블록의 처음 128개 샘플만 처리하고 나머지 샘플은 버립니다.
- 블록 102부터 블록 159까지, 하드웨어는 각 블록의 처음 16개 샘플만 처리하고 나머지 샘플은 버립니다. 이 예시에서 임펄스 응답은 158개의 블록만 가지고 있으므로, 이는 테이블의 마지막 유효 항목을 나타냅니다.
- 하드웨어는 다음 항목이 현재 항목보다 큰 블록 인덱스를 가진 경우에만 유효한 것으로 간주합니다. 따라서 테이블의 나머지는 유효하지 않고 무시되어야 함을 나타내기 위해 마지막 유효 항목으로 채워집니다.
참고사항
유효한 임펄스 감소 테이블을 생성하기 위한 사용자 지정 알고리즘을 구현할 때 유의해야 할 여러 사항이 있습니다:- 블록 인덱스는 최소 8의 값을 가져야 합니다. 다시 말해, 임펄스 응답의 첫 8개 블록은 절대 감소되어서는 안 됩니다.
- 컷오프 주파수는 16의 배수여야 하며, 최소 16이어야 합니다.
- 컷오프 주파수는 블록 크기를 초과해서는 안 됩니다. 이는 유효하지 않은 항목이 됩니다.
- 임펄스 응답 감소 블록은 하나의 전체 임펄스 응답 블록의 크기여야 합니다. 테이블 뒤의 공간은 0으로 채워져 있을 것으로 예상됩니다.
- 감소 메커니즘과 함께 스테레오 임펄스 응답을 사용할 때는 각 채널의 끝에 감소 블록이 예상됩니다.
- XDspActivationParameters에서 impulseResponseLengthInFloats 매개변수를 지정할 때 임펄스 응답 감소 블록의 추가 공간을 고려해야 합니다.
참조 API 문서
- XDspAudio (API contents)
- Structures
