Win32::Sound - Une extension pour jouer avec les sons sous Windows


NOM

Win32::Sound - Une extension pour jouer avec les sons sous Windows

Retour en haut de la page


SYNOPSIS

    use Win32::Sound;
    Win32::Sound::Volume('100%');
    Win32::Sound::Play("file.wav");
    Win32::Sound::Stop();
    # ...et lisez la suite pour plus d'amusement ;-)

Retour en haut de la page


FONCTIONS

Win32::Sound::Play(SOUND, [FLAGS])
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 SND_NODEFAULT). 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 :

SND_ASYNC
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é).

SND_LOOP
Le son est joué de manière répétitive jusqu'à ce qu'il soit arrêté. Vous devez spécifier aussi le drapeau SND_ASYNC.

SND_NODEFAULT
Aucun son par défaut n'est utilisé. Si le son spécifié SOUND ne peut être trouvé, la fonction retourne sans rien jouer.

SND_NOSTOP
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.

Win32::Sound::Stop()
Arrête le son qui joue actuellement.

Win32::Sound::Volume()
Retourne le volume sonore du dispositif wave; 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 undef et fixe $!.

Exemples:

    ($L, $R) = Win32::Sound::Volume();
    if( not defined Win32::Sound::Volume() ) {
        die "Imposible d'obtenir le volume: $!";
    }

Win32::Sound::Volume(GAUCHE, [DROITE])
Fixe le volume du dispositif wave; 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 undef 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);

Win32::Sound::Format(nomfichier)
Retourne un tableau d'informations à propos du fichier au format WAV spécifié; Le tableau contient :

Exemple:

    ($hz, $bits, $channels)
        = Win32::Sound::Format("file.wav");
Win32::Sound::Devices()
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, WAVE_MAPPER et MIDI_MAPPER (les dispositifs par défaut pour les sorties wave et les sorties midi).

Exemple:

    @devices = Win32::Sound::Devices();

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 au moins 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";

Retour en haut de la page


LE PAQUETAGE WaveOut

Win32::Sound fournit aussi une approche différente, plus puissante, pour produire des données audio avec son paquetage WaveOut. 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.

FONCTIONS

new Win32::Sound::WaveOut(FILENAME)
new Win32::Sound::WaveOut(SAMPLERATE, BITS, CHANNELS)
new Win32::Sound::WaveOut()
Cette fonction crée un objet WaveOut; la première forme ouvre le fichier wave spécifié (voir aussi Open() ), donc vous pouvez directement le jouer avec Play().

La deuxième (et la troisièmement) forme ouvre le dispositif wave 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 wave avec Open() ou bien charger un fichier de données binaires dans la carte son avec Load() et les sauvegarder avec Write().

Close()
Ferme le fichier wave ouvert courant.

CloseDevice()
Ferme le dispositif wave de sortie; vous pouvez changer de format et le rouvrir avec OpenDevice().

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 wave.

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).

Open(FILE)
Ouvre le fichier wave spécifié.

OpenDevice()
Ouvre le dispositif wave de sortie avec le format son courant. (non nécessaire, à moins que vous n'ayez utilisé CloseDevice()).

Pause()
Fait une pause pour le son en train de jouer; utilisez Restart() pour reprendre.

Play( [FROM, TO] )
Joue le fichier wave 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.

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 Reset() entre deux jeux pour recevoir la position courante dans le jeu courant.

Reset()
Arrête de jouer le son et réinitialise la position du jeu. (voir Position()).

Restart()
Continue de jouer le son interrompu par Pause().

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 wave FILE.

Status()
Retourne 0 si la carte son est en train de jouer, 1 si elle est libre, ou undef en cas d'erreur.

Unload()
Libère la carte son des données chargées.

Volume( [LEFT, RIGHT] )
Donne ou fixe le volume du dispositif wave. Fonctionne de la même manière que Win32::Sound::Volume.

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.

LE FORMAT SON

Le format son est stocké dans trois propriétés de l'objet WaveOut : samplerate, bits et channels. 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é.

EXEMPLE

Ce petit exemple produit un son sinusoïdal à 440Hz de 1 seconde et le sauve dans sinus.wav :

    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

Retour en haut de la page


VERSION

Win32::Sound version 0.46, 25 Sep 1999.

Retour en haut de la page


AUTEUR

Aldo Calpini, <dada@divinf.it>

Des parties de code ont été fournies et/ou ont été suggérées par Dave Roth.

Retour en haut de la page


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/ .

Retour en haut de la page


TRADUCTION EN FRANÇAIS

Jean-Louis Morel <jl_morel@bribes.org>

Retour en haut de la page

 Win32::Sound - Une extension pour jouer avec les sons sous Windows