=head1 NOM Win32::Sound - Une extension pour jouer avec les sons sous Windows =head1 SYNOPSIS use Win32::Sound; Win32::Sound::Volume('100%'); Win32::Sound::Play("file.wav"); Win32::Sound::Stop(); # ...et lisez la suite pour plus d'amusement ;-) =head1 FONCTIONS =over 4 =item B Joue le son spécifié : SOUND peut être le nom d'un fichier WAV ou l'un des noms de sons prédéfinis suivants : SystemDefault SystemAsterisk SystemExclamation SystemExit SystemHand SystemQuestion SystemStart En outre, si le son nommé n'est pas trouvé, la fonction joue le son système par défaut (à moins que ne vous spécifiiez le drapeau C). Si aucun paramètre n'est donné, cette fonction arrête le son qui joue actuellement (voyez aussi Win32::Sound::Stop). FLAGS peut être une combinaison des constantes suivantes : =over 4 =item C Le son est joué de manière asynchrone et la fonction revient immédiatement après avoir commencé à émettre le son (si ce drapeau n'est pas spécifié, le son est joué de façon synchrone et la fonction revient quand le son est terminé). =item C Le son est joué de manière répétitive jusqu'à ce qu'il soit arrêté. Vous devez spécifier aussi le drapeau C. =item C Aucun son par défaut n'est utilisé. Si le son spécifié C ne peut être trouvé, la fonction retourne sans rien jouer. =item C Si un son joue déjà, la fonction échoue. Par défaut, tout nouvel appel à la fonction arrêtera les sons jouant précédemment. =back =item B Arrête le son qui joue actuellement. =item B Retourne le volume sonore du dispositif I; si appelée dans un contexte de liste, retourne les valeurs gauche et droite. Sinon, retourne une seule valeur 32 bits (gauche dans l'octet de poids faible, droite dans celui de poids fort). En cas d'erreur, retourne C et fixe $!. Exemples: ($L, $R) = Win32::Sound::Volume(); if( not defined Win32::Sound::Volume() ) { die "Imposible d'obtenir le volume: $!"; } =item B Fixe le volume du dispositif I; si deux arguments sont donnés, fixe les volumes des canaux de gauche et droite indépendamment, sinon met les deux canaux à la valeur du canal GAUCHE (c-à-d DROITE=GAUCHE). La gamme des valeurs va de 0 à 65535 (0xFFFF), mais elles peuvent aussi être données en pourcentage (utilisez une chaîne contenant un nombre suivi du signe pour cent %). Retourne C et fixe la valeur de $! en cas d'erreur, donne une valeur VRAI en cas de succès. Exemples: Win32::Sound::Volume('50%'); Win32::Sound::Volume(0xFFFF, 0x7FFF); Win32::Sound::Volume('100%', '50%'); Win32::Sound::Volume(0); =item B Retourne un tableau d'informations à propos du fichier au format WAV spécifié; Le tableau contient : =over =item * la fréquence d'échantillonnage (en Hz) =item * le nombre de bits par échantillon (8 ou 16) =item * nombre de canaux (1 pour mono, 2 pour stéréo) =back Exemple: ($hz, $bits, $channels) = Win32::Sound::Format("file.wav"); =item B Retourne tous les dispositifs sonores disponibles; leurs noms sont formés du type du dispositif (WAVEOUT, WAVEIN, MIDIOUT, MIDIIN, AUX ou MIXER) et d'un identificateur numérique (à partir de zéro); des noms valides de dispositifs sont, par exemple : WAVEOUT0 WAVEOUT1 WAVEIN0 MIDIOUT0 MIDIIN0 AUX0 AUX1 AUX2 Il y a aussi deux noms de dispositifs particuliers, C et C (les dispositifs par défaut pour les sorties I et les sorties I). Exemple: @devices = Win32::Sound::Devices(); =item Win32::Sound::DeviceInfo(DEVICE) Retourne un tableau associatif d'informations sur le dispositif son nommé DEVICE (sous le même format que Win32::Sound::Devices). Le contenu du tableau dépend du type de dispositif interrogé. Tout dispositif doit B retourner les informations suivantes : manufacturer_id product_id name driver_version Pour les données supplémentaires, référez-vous à la table suivante: WAVEIN..... formats channels WAVEOUT.... formats channels support MIDIOUT.... technology voices notes channels support AUX........ technology support MIXER...... destinations support Les significations des champs qui ne sont pas évidentes peuvent être trouvées dans la documentation Microsoft du SDK (trop long à rapporter ici, un jour peut-être...:-). Exemple: %info = Win32::Sound::DeviceInfo('WAVE_MAPPER'); print "$info{name} version $info{driver_version}\n"; =back =head1 LE PAQUETAGE WaveOut Win32::Sound fournit aussi une approche différente, plus puissante, pour produire des données audio avec son paquetage C. Il a des méthodes pour charger et pour jouer des fichiers WAV, avec la possibilité additionnelle de spécifier le début et la fin de gamme, donc vous pouvez jouer seulement une portion d'un fichier sonore. En outre, il est possible de charger des données binaires arbitraires dans la carte son pour les faire jouer et pour les sauvegarder dans des fichiers WAV; autrement dit, vous pouvez faire un peu de synthèse sonore. =head2 FONCTIONS =over =item new Win32::Sound::WaveOut(FILENAME) =item new Win32::Sound::WaveOut(SAMPLERATE, BITS, CHANNELS) =item new Win32::Sound::WaveOut() Cette fonction crée un objet C; la première forme ouvre le fichier I spécifié (voir aussi C ), donc vous pouvez directement le jouer avec C. La deuxième (et la troisièmement) forme ouvre le dispositif I de sortie avec le format donné (ou, si aucun n'est donné, avec les valeurs par défaut 44.1kHz, 16 bits, stéréo); pour produire quelque chose d'audible, vous pouvez soit ouvrir un fichier I avec C ou bien charger un fichier de données binaires dans la carte son avec C et les sauvegarder avec C. =item Close() Ferme le fichier I ouvert courant. =item CloseDevice() Ferme le dispositif I de sortie; vous pouvez changer de format et le rouvrir avec C. =item GetErrorText(ERROR) Retourne le texte d'erreur associé au numéro d'erreur spécifié; notez que cette fonction ne marche que pour les erreurs de sortie I. =item Load(DATA) Charges les données DATA dans le tampon de la carte son. Le format des données du tampon dépend du format utilisé; par exemple, avec 8 bits mono chaque échantillon est d'un seul caractère, alors qu'avec 16 bits stéréo chaque échantillon est de quatre caractères (deux valeurs 16 bits pour les canaux gauche et droit). Le taux d'échantillonnage définit combien d'échantillons sont pris en une seconde de son. Par exemple, pour contenir une seconde de son à 44.1kHz 16 bits stéréo, votre tampon doit contenir 176400 octets (44100 * 4). =item Open(FILE) Ouvre le fichier I spécifié. =item OpenDevice() Ouvre le dispositif I de sortie avec le format son courant. (non nécessaire, à moins que vous n'ayez utilisé C). =item Pause() Fait une pause pour le son en train de jouer; utilisez C pour reprendre. =item Play( [FROM, TO] ) Joue le fichier I ouvert. Vous pouvez spécifier facultativement une gamme FROM - TO, où FROM et TO sont exprimés en échantillons (ou utiliser FROM=0 pour le premier échantillon et TO=-1 pour le dernier échantillon). Les playbacks se produisent toujours de manière asynchrone, par exemple en arrière-fond. =item Position() Retourne le numéro de l'échantillon en train de jouer. Notez que la position n'est pas remise à zéro quand le son se termine, donc vous devez appeler la fonction C entre deux jeux pour recevoir la position courante dans le jeu courant. =item Reset() Arrête de jouer le son et réinitialise la position du jeu. (voir C). =item Restart() Continue de jouer le son interrompu par C. =item Save(FILE, [DATA]) Écrit le tampon DATA (s'il n'est pas donné, utilise le tampon courant chargé dans la carte son) dans le fichier I FILE. =item Status() Retourne 0 si la carte son est en train de jouer, 1 si elle est libre, ou C en cas d'erreur. =item Unload() Libère la carte son des données chargées. =item Volume( [LEFT, RIGHT] ) Donne ou fixe le volume du dispositif I. Fonctionne de la même manière que Win32::Sound::Volume. =item Write() Joue les données chargées dans la carte son; Les playbacks se produisent toujours de manière asynchrone, par exemple en arrière-fond. =back =head2 LE FORMAT SON Le format son est stocké dans trois propriétés de l'objet C : C, C et C. Si vous voulez les changer sans créer un nouvel objet, vous devez d'abord fermer le dispositif et le rouvrir après. $WAV->CloseDevice(); $WAV->{samplerate} = 44100; # 44.1kHz $WAV->{bits} = 8; # 8 bit $WAV->{channels} = 1; # mono $WAV->OpenDevice(); Vous pouvez aussi utiliser ces propriétés pour obtenir le format son couramment utilisé. =head2 EXEMPLE Ce petit exemple produit un son sinusoïdal à 440Hz de 1 seconde et le sauve dans F : use Win32::Sound; # Création de l'objet $WAV = new Win32::Sound::WaveOut(44100, 8, 2); $data = ""; $counter = 0; $increment = 440/44100; # Génère 44100 échantillons ( = 1 seconde) for $i (1..44100) { # Calcule le ton # (gamme 0..255 pour 8 bits) $v = sin($counter/2*3.14) * 128 + 128; # "pack" deux fois pour gauche et droit $data .= pack("cc", $v, $v); $counter += $increment; } $WAV->Load($data); # charger $WAV->Write(); # écouter 1 until $WAV->Status(); # attendre la fin $WAV->Save("sinus.wav"); # écrire sur le disque $WAV->Unload(); # laisser tomber =head1 VERSION Win32::Sound version 0.46, 25 Sep 1999. =head1 AUTEUR Aldo Calpini, Des parties de code ont été fournies et/ou ont été suggérées par Dave Roth. =head1 VERSION FRANÇAISE Cette traduction française correspond à la version anglaise distribuée avec perl 5.6.1. Pour en savoir plus concernant ces traductions, consultez http://www.enstimac.fr/Perl/ . =head1 TRADUCTION EN FRANÇAIS Jean-Louis Morel =cut