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_ASYNC
SND_LOOP
SND_ASYNC
.
SND_NODEFAULT
SOUND
ne peut
être trouvé, la fonction retourne sans rien jouer.
SND_NOSTOP
undef
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 |