XAudio2를 통해 XMA2를 코딩하는 것이 가장 간단한 접근 방식이지만, Audio Control Processor(ACP) 명령을 사용하여 XMA2를 하드웨어에 직접 코딩할 수도 있습니다.
xWMA와 XMA2는 모두 Windows Media Audio(WMA)용으로 개발된 코덱에서 유래했으며, 둘 다 XBOX 게임용으로 특별히 개발되었습니다. XMA2에서 사용하는 사용 가능한 코덱과 매개변수의 부분집합은 xWMA에서 사용하는 부분집합보다 작습니다. xWMA와 XMA2 모두 XBOX용으로 개발되었지만, 서로 교환 가능하지 않습니다: 각 파일 형식의 헤더가 다르며 형식은 PC 버전의 Windows와 호환되지 않습니다. XMA2와 xWMA에서 사용하는 코덱도 약간 다르므로 각각은 사용된 압축 시스템에서 자체 아티팩트를 갖게 됩니다.
XMA2 인코딩
Microsoft Game Development Kit(GDK)의 일부로 제공되는 XMA2 인코더 도구를 사용하여 오디오 데이터를 XMA2로 인코딩하십시오. XMA2 파일은 XMA2WAVEFORMATEX 형식 헤더와Seek 위치 테이블 내의 추가 seek 청크를 가진 .wav 파일입니다.
XMA2 형식은 XBOX 360과 호환되며, Seek 테이블은 XBOX One의 경우 ULONG 바이트 스왑되어야 합니다. 입력이 .wav 파일이라면 출력은 변경 없이 사용할 수 있습니다.
Seek 테이블을 바이트 스왑하려면 다음 코드 줄을 사용하십시오.
SHAPE_XMA_INPUT_BUFFER_ALIGNMENT 플래그의 사용에 유의하십시오.
XMA2 AXI 버스 오류
XMA 하드웨어 디코더(및 XBOX 360)의 오랜 버그는AcpHal을 직접 사용하는 경우 타이틀이 우회 방법을 제공하도록 요구합니다. XAudio2는 이미 우회 방법을 제공합니다. 그러나 XMA2 인코더 도구가 업데이트될 때까지 다음 정보를 유의하십시오.
XMA 비트 스트림을 디코딩하고 단일 XMA 입력 버퍼만 사용할 때, XMA 버퍼의 마지막 64바이트에 인코딩된 데이터가 포함되어 있으면 AXI 버스 오류를 트리거할 수 있습니다. XMA 비트 스트림에 마지막 64바이트 내에 인코딩된 데이터가 포함되는 경우는 드뭅니다. 그럼에도 불구하고 이는 AXI 버스 오류를 방지하기 위해 처리되어야 합니다. XMA2 인코더 도구가 비트 스트림의 마지막 64바이트에 인코딩된 데이터가 포함된 인코딩된 파일이 없도록 업데이트될 때까지, 다음 방법 중 하나를 사용하여 이 문제를 피할 수 있습니다.
- 항상 두 XMA 입력 버퍼를 모두 사용하고, 어느 입력 버퍼의 포인터도 유효하지 않은 값으로 설정하지 마십시오.
- 다른 버퍼를 활성화하지 않더라도 사용되지 않은 입력 버퍼의 포인터를 다른 입력 버퍼의 포인터와 동일하게 설정하십시오. 예:
- 콘텐츠를 생성하는 동안 오프라인 도구를 사용하여 XMA 파일을 스캔하십시오. 인코딩된 XMA 비트 스트림의 마지막 64바이트 중 하나라도 0xFF 이외의 값이 있으면 파일을 다시 인코딩하십시오.
참조 API 문서
- APU (API contents)
- XMA2Defs (API contents)
- Structures
