Partager via


Appareils et types de données

[La fonctionnalité associée à cette page, Waveform Audio, est une fonctionnalité héritée. Elle a été remplacée par WASAPI et graphiques audio. WASAPI et graphiques audio ont été optimisés pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise WASAPI et graphiques audio au lieu de Waveform Audio, le cas échéant. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Cette section décrit l’utilisation des appareils audio waveform et inclut des informations sur l’ouverture, la fermeture et l’interrogation de ces appareils pour leurs fonctionnalités. Il explique également comment suivre les appareils d’un système à l’aide de handles d’appareil et d’identificateurs d’appareil.

Ouverture d’appareils de sortie Waveform-Audio

Utilisez la fonction waveOutOpen pour ouvrir un périphérique de sortie audio de forme d’onde pour la lecture. Cette fonction ouvre l’appareil associé à l’identificateur d’appareil spécifié et retourne un handle de l’appareil ouvert en écrivant le handle d’un emplacement de mémoire spécifié.

Certains ordinateurs multimédias ont plusieurs périphériques de sortie audio de forme d’onde. Sauf si vous souhaitez ouvrir un périphérique de sortie audio de forme d’onde spécifique dans un système, vous devez utiliser l’indicateur WAVE_MAPPER pour l’identificateur de l’appareil lorsque vous ouvrez un appareil. La fonction waveOutOpen choisit l’appareil dans le système qui est le mieux en mesure de lire le format de données spécifié.

Interrogation d’appareils audio

Windows fournit les fonctions suivantes pour déterminer le nombre d’appareils d’un certain type disponibles dans un système.

Fonction Description
auxGetNumDevs Récupère le nombre d’appareils de sortie auxiliaires présents dans le système.
waveInGetNumDevs Récupère le nombre d’appareils d’entrée audio waveform-audio présents dans le système.
waveOutGetNumDevs Récupère le nombre d’appareils de sortie audio de forme d’onde présents dans le système.

 

Les appareils audio sont identifiés par un identificateur d’appareil. L’identificateur de l’appareil est déterminé implicitement à partir du nombre d’appareils présents dans un système. Les identificateurs d’appareil sont compris entre zéro et un nombre inférieur au nombre d’appareils présents. Par exemple, s’il existe deux périphériques de sortie audio de forme d’onde dans un système, les identificateurs d’appareil valides sont 0 et 1.

Après avoir déterminé le nombre d’appareils d’un certain type présents dans un système, vous pouvez utiliser l’une des fonctions suivantes pour interroger les fonctionnalités de chaque appareil.

Fonction Description
auxGetDevCaps Récupère les fonctionnalités d’un périphérique de sortie auxiliaire spécifié.
waveInGetDevCaps Récupère les fonctionnalités d’un périphérique d’entrée audio waveform-audio spécifié.
waveOutGetDevCaps Récupère les fonctionnalités d’un appareil de sortie audio waveform-audio spécifié.

 

Chacune de ces fonctions remplit une structure avec des informations sur les fonctionnalités d’un appareil spécifié. Le tableau suivant répertorie les structures qui correspondent à chacune de ces fonctions.

Fonction Structure
auxGetDevCaps AUXCAPS
waveInGetDevCaps WAVEINCAPS
waveOutGetDevCaps WAVEOUTCAPS

 

Les formats standard sont répertoriés dans le membre dwFormats de la structure WAVEOUTCAPS. Les appareils waveform-audio peuvent prendre en charge les formats non standard. Pour déterminer si un format particulier (standard ou non standard) est pris en charge par un appareil, vous pouvez appeler la fonction waveOutOpen avec l’indicateur de WAVE_FORMAT_QUERY. Cet indicateur n’ouvre pas l’appareil. Vous spécifiez le format en question dans la structure WAVEFORMATEX pointée par le paramètre pwfx passé à waveOutOpen.

Les appareils de sortie waveform-audio varient selon les fonctionnalités qu’ils prennent en charge. Le dwSupport membre de la structure WAVEOUTCAPS indique si un appareil prend en charge des fonctionnalités telles que les changements de volume et de pas.

Handles d’appareil et identificateurs d’appareil

Chaque fonction qui ouvre un périphérique audio spécifie un identificateur d’appareil, un pointeur vers un emplacement de mémoire et certains paramètres uniques à chaque type d’appareil. L’emplacement de mémoire est rempli avec un handle d’appareil. Utilisez ce handle d’appareil pour identifier l’appareil audio ouvert lors de l’appel d’autres fonctions audio.

La différence entre les identificateurs et les handles pour les appareils audio est subtile mais importante :

Il n’existe aucune fonction qui ouvre ou ferme des périphériques audio auxiliaires. Les périphériques audio auxiliaires n’ont pas besoin d’être ouverts et fermés comme les appareils audio de forme d’onde, car il n’existe aucun transfert de données continu associé à eux. Toutes les fonctions audio auxiliaires utilisent des identificateurs d’appareil pour identifier les appareils.

types de données de sortie Waveform-Audio

Les types de données suivants sont définis pour les fonctions de sortie audio de forme d’onde.

Type Description
HWAVEOUT Gérer vers un appareil de sortie audio waveform ouvert.
WAVEFORMATEX Structure qui spécifie les formats de données pris en charge par un périphérique d’entrée audio de forme d’onde spécifique. Cette structure est également utilisée pour les périphériques d’entrée audio waveform-audio.
WAVEHDR Structure utilisée comme en-tête pour un bloc de données d’entrée audio de forme d’onde. Cette structure est également utilisée pour les périphériques d’entrée audio de forme d’onde.
WAVEOUTCAPS Structure utilisée pour interroger les fonctionnalités d’un périphérique de sortie audio waveform-audio particulier.

 

Spécification de formats de données Waveform-Audio

Lorsque vous appelez la fonction waveOutOpen pour ouvrir un pilote de périphérique pour la lecture ou pour interroger si le pilote prend en charge un format de données particulier, utilisez le paramètre pwfx pour spécifier un pointeur vers une structure WAVEFORMATEX contenant le format de données audio waveform-audio demandé. WAVEFORMATEX remplace les structuresWAVEFORMATet PCMWAVEFORMAT.

Pour les données audio séparées en plus de deux canaux ou dont la taille d’échantillon n’est pas un multiple de 8, vous devez utiliser WAVEFORMATEXTENSIBLE. Cette structure configure simplement les octets supplémentaires pointés par le cbSize membre de WAVEFORMATEX pour fournir des informations supplémentaires sur le format. WAVEFORMATEXTENSIBLE peut être casté en tant que WAVEFORMATEX.

Il existe également deux formats de Presse-papiers que vous pouvez utiliser pour représenter des données audio : CF_WAVE et CF_RIFF. Utilisez le format CF_WAVE pour représenter les données dans l’un des formats standard, tels que 11 kHz ou 22 kHz PCM. Utilisez le format CF_RIFF pour représenter des formats de données plus complexes qui ne peuvent pas être représentés en tant que fichiers audio de forme d’onde standard.

Écriture de données Waveform-Audio

Après avoir ouvert un pilote de périphérique de sortie audio waveform-audio, vous pouvez commencer à lire un son. Windows fournit la fonction waveOutWrite pour envoyer des blocs de données à des périphériques de sortie audio waveform.

Utilisez la structure WAVEHDR pour spécifier le bloc de données waveform-audio que vous envoyez à l’aide waveOutWrite. Cette structure contient un pointeur vers un bloc de données verrouillé, la longueur du bloc de données et certains indicateurs. Ce bloc de données doit être préparé avant de l’utiliser ; pour plus d’informations sur la préparation d’un bloc de données, consultez blocs de données audio.

Après avoir envoyé un bloc de données à un appareil de sortie à l’aide de waveOutWrite, vous devez attendre que le pilote de périphérique soit terminé avec le bloc de données avant de le libérer. Si vous envoyez plusieurs blocs de données, vous devez surveiller l’achèvement des blocs de données pour savoir quand envoyer des blocs supplémentaires. Pour plus d’informations sur les blocs de données, consultez blocs de données audio.

Format de données Waveform-Audio PCM

Le membre lpData de la structureWAVEHDRpointe vers les exemples de données audio waveform. Pour les données PCM 8 bits, chaque exemple est représenté par un octet de données non signé unique. Pour les données PCM 16 bits, chaque exemple est représenté par une valeur signée 16 bits. Le tableau suivant récapitule les valeurs maximales, minimales et intermédiaires des données audio de forme d’onde PCM.

Format des données Valeur maximale Valeur minimale Valeur midpoint
PCM 8 bits 255 (0xFF) 0 128 (0x80)
PCM 16 bits 32 767 (0x7FFF) –32 768 (0x8000) 0

 

Emballage des données PCM

L’ordre des octets de données varie entre les formats 8 bits et 16 bits et entre les formats mono et stéréo. La liste suivante décrit l’empaquetage des données pour les différents formats de données audio waveform-waveform.

Format audio waveform-PCM Description
Mono 8 bits Chaque échantillon est de 1 octet qui correspond à un seul canal audio. L’échantillon 1 est suivi des échantillons 2, 3, 4, et ainsi de suite.
Stéréo 8 bits Chaque échantillon est de 2 octets. L’échantillon 1 est suivi des échantillons 2, 3, 4, et ainsi de suite. Pour chaque échantillon, le premier octet est le canal 0 (le canal gauche) et le deuxième octet est le canal 1 (canal droit).
Mono 16 bits Chaque échantillon est de 2 octets. L’échantillon 1 est suivi des échantillons 2, 3, 4, et ainsi de suite. Pour chaque échantillon, le premier octet est l’octet de bas ordre du canal 0 et le deuxième octet est l’octet de haut ordre du canal 0.
Stéréo 16 bits Chaque exemple est de 4 octets. L’échantillon 1 est suivi des échantillons 2, 3, 4, et ainsi de suite. Pour chaque échantillon, le premier octet est l’octet de bas ordre du canal 0 (canal gauche) ; le deuxième octet est l’octet de haut ordre du canal 0 ; le troisième octet est l’octet de bas ordre du canal 1 (canal droit) ; et le quatrième octet est l’octet de haut ordre du canal 1.
Autrui Chaque échantillon est contenu dans un bloc qui est un multiple de 4 octets, mais les exemples peuvent être alignés sur des octets. La disposition des canaux est spécifiée par un masque. Pour plus d’informations, consultez WAVEFORMATEXTENSIBLE.

 

Fermeture d’appareils de sortie Waveform-Audio

Une fois la lecture audio waveform terminée, appelez waveOutClose pour fermer l’appareil de sortie. Si waveOutClose est appelé lorsqu’un fichier waveform-audio est lu, l’opération de fermeture échoue et la fonction retourne un code d’erreur indiquant que l’appareil n’a pas été fermé. Si vous ne souhaitez pas attendre la fin de la lecture avant de fermer l’appareil, appelez la waveOutReset fonction avant de fermer. Cela met fin à la lecture et permet à l’appareil d’être fermé. Veillez à utiliser la fonction waveOutUnprepareHeader pour nettoyer la préparation sur tous les blocs de données avant de fermer l’appareil.