| Win32::Sound - Une extension pour jouer avec les sons sous Windows |
Win32::Sound - Une extension pour jouer avec les sons sous Windows
use Win32::Sound;
Win32::Sound::Volume('100%');
Win32::Sound::Play("file.wav");
Win32::Sound::Stop();
# ...et lisez la suite pour plus d'amusement ;-)
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_ASYNCSND_LOOPSND_ASYNC.
SND_NODEFAULTSOUND ne peut
être trouvé, la fonction retourne sans rien jouer.
SND_NOSTOPundef et fixe $!.
Exemples:
($L, $R) = Win32::Sound::Volume();
if( not defined Win32::Sound::Volume() ) {
die "Imposible d'obtenir le volume: $!";
}
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);
Exemple:
($hz, $bits, $channels)
= Win32::Sound::Format("file.wav");
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();
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";
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.
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()CloseDevice()OpenDevice().
GetErrorText(ERROR)Load(DATA)Open(FILE)OpenDevice()CloseDevice()).
Pause()Restart() pour reprendre.
Position()Reset() entre deux jeux pour
recevoir la position courante dans le jeu courant.
Reset()Position()).
Restart()Pause().
Status()undef en cas d'erreur.
Unload()Write()
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é.
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
Win32::Sound version 0.46, 25 Sep 1999.
Aldo Calpini, <dada@divinf.it>
Des parties de code ont été fournies et/ou ont été suggérées par Dave Roth.
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/ .
Jean-Louis Morel <jl_morel@bribes.org>
| Win32::Sound - Une extension pour jouer avec les sons sous Windows |