다음을 통해 공유


비 PCM 스트림의 S/PDIF Pass-Through 전송

소니/필립스 디지털 인터페이스(S/PDIF) 형식은 주로 PCM 오디오 데이터를 전송하기 위해 정의되지만 PCM이 아닌 데이터를 전송하도록 쉽게 조정할 수 있습니다. S/PDIF 통과 전송의 원칙은 PCM이 아닌 데이터 스트림이 PCM 스트림인 것처럼 S/PDIF 링크를 통과할 수 있다는 것입니다. 통과 전송에는 비 PCM 스트림의 인코딩을 이해하기 위해 S/PDIF 송신 및 수신 포트가 필요하지 않습니다.

WMA Pro 및 AC-3은 모두 동기화 프레임이라는 단위로 디지털 오디오 스트림을 전송하는 압축된 비 PCM 형식입니다. 각 동기화 프레임은 자체 헤더를 포함하며 스트림의 다른 동기화 프레임과 독립적으로 디코딩할 수 있습니다. 예를 들어 48kHz 샘플 속도에서 WMA Pro 동기화 프레임에는 샘플 클록의 2048틱(42.67밀리초)에 대해 재생할 수 있는 충분한 데이터가 포함되어 있습니다. 이와 동일한 속도로 AC-3 동기화 프레임에는 1536틱(32밀리초)에 대한 충분한 데이터가 포함됩니다.

48kHz 샘플 속도에서 5.1 채널 WMA Pro 동기화 프레임은 2048 스테레오(2개 채널) 16비트 PCM 샘플에서 차지하는 바이트 수인 8192바이트를 초과하지 않습니다. 마찬가지로 5.1 채널 AC-3 동기화 프레임은 1536 스테레오, 16비트 PCM 샘플에서 차지하는 바이트 수인 6144바이트를 초과하지 않습니다. (이 규칙에는 예외가 있지만 이러한 유형의 AC-3 동기화 프레임은 매우 일반적이지 않으며 S/PDIF를 통해 전송할 수 없으며 여기에서 무시할 수 있습니다.)

48kHz WMA Pro 또는 AC-3 오디오 스트림이 디코딩되지 않고 디지털 형식의 S/PDIF 링크를 통과하는 경우 S/PDIF 송신 및 수신 포트는 스트림을 스테레오, 16비트, 48kHz PCM 스트림과 동일하게 처리할 수 있습니다. WMA Pro-over-S/PDIF 또는 AC-3 over-S/PDIF 스트림을 전송할 수 있는 핀에 대한 데이터 범위를 지정할 때 웨이브 형식 태그 자체는 S/PDIF 포트를 통해 PCM 스트림을 전송하는 핀의 데이터 범위와 다른 유일한 것입니다. 예를 들어 WMA Pro 데이터 범위 지정의 데이터 범위 선언을 참조하세요.

S/PDIF 인터페이스를 통해 WMA Pro 압축 스트림을 실시간보다 빠르게 전달하지 않도록 하려면(즉, 43밀리초 미만의 43밀리초의 오디오 배달을 방지하기 위해) 오디오 애플리케이션은 동기화 프레임이 2048 스테레오 PCM 샘플과 동일한 바이트를 사용할 때까지 WMA Pro 동기화 프레임을 0으로 패딩해야 합니다. AC-3 동기화 프레임은 마찬가지로 스테레오 PCM 샘플 1536개 크기로 패딩되어야 합니다.

파동되지 않은 WMA Pro 또는 AC-3 동기화 프레임을 WaveCyclic을 사용하는 PortCls 어댑터 드라이버에 보내려는 경우 포트 드라이버가 데이터 고갈을 감지할 때(데이터 스트림에 압축되지 않은 2개 채널 스트림보다 더 적은 바이트가 포함되기 때문에) 순환 버퍼를 무음으로 채웁니다. PCM이 아닌 스트림 디코더는 PCM이 아닌 PCM 형식인 이러한 무음 기간을 해석하는 데 문제가 있습니다.

다음 그림에서는 S/PDIF 통과 전송의 예제 애플리케이션을 보여줍니다.

S/PDIF 통과 전송을 위해 동축 케이블을 통해 A/V 수신기에 연결된 PC를 보여 주는 다이어그램

그림은 동축 케이블을 통해 외부 오디오/시각적 개체(A/V) 수신기에 연결된 PC를 보여줍니다. 케이블은 PC 오디오 디바이스의 S/PDIF 출력 포트를 A/V 수신기의 S/PDIF 입력 포트에 연결합니다.

그림의 왼쪽 가장자리에서 오디오 애플리케이션은 WMA Pro 오디오 스트림의 동기화 프레임을 8192 바이트 버퍼의 시작 부분에 삽입합니다. (이 버퍼 크기는 그림의 용이성을 위해 전적으로 사용됩니다. 실제로 버퍼 크기는 4096바이트 또는 10240바이트입니다.) 애플리케이션은 버퍼의 나머지 공간을 0으로 채웁니다. 오디오 드라이버는 S/PDIF 출력 포트를 프로그래밍하여 버퍼의 콘텐츠를 PCM 데이터의 8192바이트인 것처럼 전송합니다.

마찬가지로 A/V 수신기의 S/PDIF 입력 포트는 PCM 데이터의 8192바이트인 것처럼 스트림을 수신합니다. 이 예제에서는 크기가 8192바이트인 입력 버퍼에 데이터를 로드합니다. 디코더는 입력 버퍼에서 WMA Pro 동기화 프레임을 추출하고, 동기화 프레임을 5.1 채널 오디오 스트림으로 디코딩하고, 그림의 오른쪽 가장자리에 있는 서라운드 스피커를 통해 스트림을 재생합니다.

연결의 다른 쪽 끝에 있는 디코더가 오디오 스트림이 PCM이 아닌 형식임을 알리려면 오디오 드라이버가 S/PDIF 송수신 장치에서 /AUDIO 비트를 설정해야 합니다. 디코더는 S/PDIF 채널 상태 블록에서 이 비트를 읽고 데이터 스트림이 PCM이 아닌 형식으로 인코딩되는지 여부를 확인합니다. 이 비트를 설정하는 것은 드라이버가 PCM이 아닌 스트림을 수용하기 위해 수행해야 하는 유일한 특수한 일입니다. 다른 모든 방법으로 드라이버는 PCM 데이터가 포함된 것처럼 스트림을 처리합니다.

많은 소비자 디바이스가 S/PDIF 통과 전송을 지원하지만 USB 및 1394와 같은 다른 디지털 인터페이스는 PCM이 아닌 데이터를 외부 오디오 디코더로 디지털 통과 전송하도록 조정할 수도 있습니다.

Dolby Labies는 1992년에 AC-3(Dolby Digital) 압축 오디오 형식을 도입했습니다. S/PDIF를 통한 AC-3을 지원하는 최초의 소비자 A/V 수신기는 약 1997년에 출시되었습니다. WMA Pro 오디오 스트림 형식에 대한 소프트웨어 지원은 2003년 Microsoft Windows Media 9 시리즈 기술 릴리스와 함께 제공되었습니다. WMA Pro-over-S/PDIF를 지원하는 A/V 수신기는 2003년에 도입되었습니다.

Windows XP 이상에서는 waveOut, DirectSound 및 DirectShow API가 PCM이 아닌 형식을 지원합니다. DirectSound 및 waveOut API는 드라이버가 노출하는 모든 PCM 또는 비 PCM 형식을 이러한 API의 클라이언트에서 자동으로 사용할 수 있도록 구현됩니다.