S/PDIF Pass-Through transmission de flux non PCM
Le format d’interface numérique Sony/Philips (S/PDIF) est principalement défini pour la transmission de données audio PCM, mais il peut facilement être adapté pour transmettre des données non-PCM. Le principe de la transmission directe S/PDIF est qu’un flux de données non PCM peut passer par une liaison S/PDIF comme s’il s’agissait d’un flux PCM. La transmission directe ne nécessite pas les ports d’envoi et de réception S/PDIF pour comprendre l’encodage du flux non PCM.
WMA Pro et AC-3 sont tous deux des formats non PCM compressés qui transmettent des flux audio numériques en unités appelées images de synchronisation. Chaque image de synchronisation contient son propre en-tête et peut être décodée indépendamment des autres trames de synchronisation dans le flux. Par exemple, à une fréquence d’échantillonnage de 48 kHz, une trame de synchronisation WMA Pro contient suffisamment de données à lire pour 2 048 cycles de l’exemple d’horloge (42,67 millisecondes). À ce rythme, une trame de synchronisation AC-3 contient suffisamment de données pour 1 536 cycles (32 millisecondes).
À une fréquence d’échantillonnage de 48 kHz, une trame de synchronisation WMA Pro à 5,1 canaux ne dépasse jamais 8 192 octets, soit le nombre d’octets occupés par 2048 échantillons stéréo (deux canaux), 16 bits PCM. De même, une trame de synchronisation AC-3 à 5,1 canaux ne dépasse jamais 6 144 octets, soit le nombre d’octets occupés par 1536 exemples PCM stéréo 16 bits. (Il existe des exceptions à cette règle, mais ces types d’images de synchronisation AC-3 sont très rares, ne peuvent pas être transmis via S/PDIF et peuvent être ignorés ici.)
Lorsqu’un flux audio WMA Pro ou AC-3 de 48 kHz passe par une liaison S/PDIF sous forme numérique sans être décodé, les ports d’envoi et de réception S/PDIF peuvent traiter le flux de la même façon qu’un flux PCM stéréo, 16 bits et 48 kHz. Lorsque vous spécifiez une plage de données pour une broche qui peut transmettre un flux WMA Pro-over-S/PDIF ou AC-3-over-S/PDIF, la balise de format de vague elle-même est la seule chose qui diffère d’une plage de données pour une broche qui transmet un flux PCM via le port S/PDIF. Pour obtenir un exemple, consultez les déclarations de plage de données dans Spécification de plages de données WMA Pro.
Afin d’éviter de remettre un flux compressé WMA Pro sur l’interface S/PDIF plus rapidement que le temps réel (autrement dit, pour empêcher la distribution de 43 millisecondes d’audio en moins de 43 millisecondes), une application audio doit rembourser une trame de synchronisation WMA Pro avec des zéros jusqu’à ce que l’image de synchronisation prenne le même nombre d’octets que les échantillons PCM stéréo 2048. Un cadre de synchronisation AC-3 doit également être rembourré à la taille de 1 536 échantillons PCM stéréo.
Si vous tentez d’envoyer des trames de synchronisation WMA Pro ou AC-3 non pavées à un pilote d’adaptateur PortCls qui utilise WaveCyclique, sachez que lorsque le pilote de port détecte une insuffisance de données (parce que le flux de données contient moins d’octets qu’un flux non compressé à deux canaux), il remplit la mémoire tampon cyclique avec un silence. Le décodeur de flux non PCM rencontre des problèmes lors de l’interprétation de ces périodes de silence, qui sont au format PCM plutôt qu’au format non PCM.
L’illustration suivante montre un exemple d’application de la transmission directe S/PDIF.
La figure montre un PC connecté à un récepteur audio/visuel externe (A/V) via un câble coaxial. Le câble connecte le port de sortie S/PDIF du périphérique audio du PC au port d’entrée S/PDIF du récepteur A/V.
Sur le bord gauche de la figure, une application audio insère une trame de synchronisation à partir d’un flux audio WMA Pro dans le début d’une mémoire tampon de 8192 octets. (Cette taille de mémoire tampon est utilisée uniquement pour faciliter l’illustration. Dans la pratique, une taille de mémoire tampon de 4 096 octets ou 1 0240 octets, par exemple, peut être utilisée à la place.) L’application remplit l’espace restant dans la mémoire tampon avec des zéros. Le pilote audio programme le port de sortie S/PDIF pour transmettre le contenu de la mémoire tampon comme s’il s’agissait de 8192 octets de données PCM.
De même, le port d’entrée S/PDIF sur le récepteur A/V reçoit le flux comme s’il s’agissait de 8 192 octets de données PCM. Il charge les données dans une mémoire tampon d’entrée, qui dans cet exemple a également une taille de 8 192 octets. Le décodeur extrait l’image de synchronisation WMA Pro de la mémoire tampon d’entrée, décode l’image de synchronisation dans un flux audio de 5,1 canaux et lit le flux via les haut-parleurs surround sur le bord droit de la figure.
Pour que le décodeur situé à l’autre extrémité de la connexion sache que le flux audio est dans un format non PCM, le pilote audio doit définir le bit /AUDIO sur l’émetteur-récepteur S/PDIF. Le décodeur lit ce bit à partir du bloc de status canal S/PDIF pour déterminer si le flux de données est encodé dans un format non PCM. La définition de ce bit est la seule chose spéciale que le pilote doit faire pour prendre en charge le flux non PCM. Dans tous les autres cas, le pilote traite le flux comme s’il contient des données PCM.
Un certain nombre d’appareils grand public prennent en charge la transmission directe S/PDIF, mais d’autres interfaces numériques telles que USB et 1394 peuvent également être adaptées pour la transmission directe numérique de données non PCM vers des décodeurs audio externes.
Dolby Laboratories a introduit le format audio compressé AC-3 (Dolby Digital) en 1992. Les premiers récepteurs A/V grand public à prendre en charge AC-3 sur S/PDIF sont devenus disponibles vers 1997. La prise en charge logicielle du format de flux audio WMA Pro est devenue disponible avec la publication de la technologie Microsoft Windows Media 9 Series en 2003. Les récepteurs A/V qui prennent en charge WMA Pro-over-S/PDIF ont été introduits en 2003.
Dans Windows XP et versions ultérieures, les API waveOut, DirectSound et DirectShow prennent en charge les formats non PCM. Les API DirectSound et waveOut sont implémentées de telle sorte que tout format PCM ou non PCM exposé par le pilote soit automatiquement disponible pour les clients de ces API.