Appareils et types de données
[La fonctionnalité associée à cette page, Waveform Audio, est une fonctionnalité héritée. Il a été remplacé par WASAPI et Audio Graphs. Les graphiques WASAPI et Audio ont été optimisés pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise WASAPI et Audio Graphs au lieu de Waveform Audio, lorsque cela est possible. 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 de forme d’onde et inclut des informations sur l’ouverture, la fermeture et l’interrogation de leurs fonctionnalités. Il décrit également comment effectuer le suivi des appareils dans 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 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 de périphériques 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 de périphériques d’entrée audio de forme d’onde 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 périphériques audio sont identifiés par un identificateur d’appareil. L’identificateur d’appareil est déterminé implicitement à partir du nombre d’appareils présents dans un système. Les identificateurs d’appareil varient de zéro à un 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.
Une fois que vous avez 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 appareil de sortie auxiliaire spécifié. |
waveInGetDevCaps | Récupère les fonctionnalités d’un périphérique d’entrée audio de forme d’onde spécifié. |
waveOutGetDevCaps | Récupère les fonctionnalités d’un périphérique de sortie audio de forme d’onde 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 audio waveform peuvent prendre en charge des 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 WAVE_FORMAT_QUERY. Cet indicateur n’ouvre pas l’appareil. Vous spécifiez le format en question dans la structure WAVEFORMATEX pointée vers laquelle le paramètre pwfx est passé à waveOutOpen.
Les périphériques de sortie audio de forme d’onde varient dans les fonctionnalités qu’ils prennent en charge. Le membre dwSupport de la structure WAVEOUTCAPS indique si un appareil prend en charge des fonctionnalités telles que les changements de volume et de pitch.
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 mémoire et certains paramètres propres à chaque type d’appareil. L’emplacement de la mémoire est rempli avec un handle d’appareil. Utilisez ce handle d’appareil pour identifier le périphérique 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 :
- Les identificateurs d’appareil sont déterminés implicitement à partir du nombre d’appareils présents dans un système. Ce nombre est obtenu à l’aide de la fonction auxGetNumDevs, waveInGetNumDevs ou waveOutGetNumDevs .
- Les handles d’appareil sont retournés lorsque les pilotes d’appareil sont ouverts à l’aide de la fonction waveInOpen ou waveOutOpen .
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 aucun transfert de données continu ne leur est associé. 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érez vers un périphérique de sortie audio de forme d’onde ouverte. |
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 particulière. Cette structure est également utilisée pour les périphériques d’entrée audio de forme d’onde. |
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 appareils 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 de forme d’onde particulière. |
Spécification des formats de données Waveform-Audio
Lorsque vous appelez la fonction waveOutOpen pour ouvrir un pilote de périphérique à des fins de lecture ou pour vous demander 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 de forme d’onde demandé. WAVEFORMATEX remplace les structures WAVEFORMAT et PCMWAVEFORMAT .
Pour les données audio qui sont séparées en plus de deux canaux ou dont la taille d’exemple n’est pas un multiple de 8, vous devez utiliser WAVEFORMATEXTENSIBLE. Cette structure configure simplement les octets supplémentaires pointés vers le membre cbSize 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 les données audio : CF_WAVE et CF_RIFF. Utilisez le format CF_WAVE pour représenter des données dans l’un des formats standard, par exemple pcm 11 kHz ou 22 kHz. Utilisez le format CF_RIFF pour représenter des formats de données plus complexes qui ne peuvent pas être représentés sous forme de fichiers audio de forme d’onde standard.
Écriture de données Waveform-Audio
Après avoir ouvert avec succès un pilote de périphérique de sortie audio de forme d’onde, vous pouvez commencer à lire un son. Windows fournit la fonction waveOutWrite pour l’envoi de blocs de données aux périphériques de sortie audio de forme d’onde.
Utilisez la structure WAVEHDR pour spécifier le bloc de données audio de forme d’onde que vous envoyez à l’aide de 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 PCM Waveform-Audio
Le membre lpData de la structure WAVEHDR pointe vers les exemples de données audio de forme d’onde. Pour les données PCM 8 bits, chaque exemple est représenté par un seul octet de données non signé. 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 médianes pour les données audio de forme d’onde PCM.
Format de données | Valeur maximale | Valeur minimale | Valeur de point intermédiaire |
---|---|---|---|
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 de forme d’onde PCM.
Format audio de forme d’onde PCM | Description |
---|---|
Mono 8 bits | Chaque exemple est de 1 octet qui correspond à un seul canal audio. L’exemple 1 est suivi des exemples 2, 3, 4, etc. |
Stéréo 8 bits | Chaque exemple est de 2 octets. L’exemple 1 est suivi des exemples 2, 3, 4, etc. Pour chaque exemple, le premier octet est le canal 0 (canal gauche) et le deuxième octet est le canal 1 (canal droit). |
Mono 16 bits | Chaque exemple est de 2 octets. L’exemple 1 est suivi des exemples 2, 3, 4, etc. Pour chaque exemple, le premier octet est l’octet de bas ordre du canal 0 et le deuxième octet est l’octet d’ordre élevé du canal 0. |
Stéréo 16 bits | Chaque exemple est de 4 octets. L’exemple 1 est suivi des exemples 2, 3, 4, etc. Pour chaque exemple, le premier octet est l’octet de bas ordre du canal 0 (canal gauche) ; le deuxième octet est l’octet d’ordre élevé 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 d’ordre élevé du canal 1. |
Autres | Chaque exemple est contenu dans un bloc qui est un multiple de 4 octets, mais les exemples peuvent être non alignés sur les octets. La disposition des canaux est spécifiée par un masque. Pour plus d’informations, consultez WAVEFORMATEXTENSIBLE. |
Fermeture des appareils de sortie Waveform-Audio
Une fois la lecture audio de forme d’onde terminée, appelez waveOutClose pour fermer le périphérique de sortie. Si waveOutClose est appelé pendant la lecture d’un fichier audio de forme d’onde, 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 fonction waveOutReset avant de fermer. Cela met fin à la lecture et permet de fermer l’appareil. Veillez à utiliser la fonction waveOutUnprepareHeader pour propre la préparation sur tous les blocs de données avant de fermer l’appareil.