Le moteur Java utilise une banque de sons, qui n'est pas normalement fournie avec Java. En l'absence de banque de son, des sons par défaut sont utilisés.
Comme il s'agit de fonctionnement où les temps doivent être définis précisement, un PC suffisamment puissant (= récent) est nécessaire.
Le lancement et le fonctionnement des applets sont soumis à une installation et un paramètrage corrects du navigateur.
Normalement tout est bon par défaut, mais sinon il faut plus particulièrement vérifier les points suivants :
A moins que vous ne vouliez programmer vous même en Java, il est inutile d'installer le JDK (Java Developpement Kit),
le JRE (Java Run time Environnemet) suffit.
Il faut les droits "administrateur" sur votre PC, et installer "pour tous".
Sous Windows 98, Java 6 ne peut pas fonctionner.
La dernière version compatible est la version 1.5 (5.0), qui n'est plus maintenue par Sun,
en phase EOL, End Of Life.
On peut se procurer cette version dans leurs archives : JDK 5
Installer le Java Runtime Environment (JRE) 5.0 Update 17, un peu plus bas dans la liste.
A noter que la mise à jour automatique de Java échoue sous Windows 98,
car elle cherche à mettre à jour avec la version la plus récente,
à savoir la version 6 (1.6).
Si vous êtes encore en Java 1.4 (ou même moins...), il faut donc installer Java 1.5 manuellement.
Ils proposent 3 banques de son :
- mini (≈0.5 MB) (standard), suffisant.
- moyen (≈1 MB) si on veut un son de meilleure qualité
- deluxe (≈5 MB) top qualité, mais nécessite un PC plus puissant.
De toute façon, même le "deluxe" ne rivalise pas avec le son d'un véritable instrument :
il s'agit d'un synthétiseur !
A noter aussi que le synthétiseur est celui du moteur Java,
et non celui complètement pourri fourni avec les PC via Windows Media Player,
ou pire encore QuickTime.
Par défaut, le super top synthétiseur de votre carte son SoundBlaster/Rolland de la mort n'est pas utilisé.
Mais vous verrez tout de même les fichiers Midi sous un tout autre jour !
Surtout si vous avez remplacé le haut parleur de 0.5 cm² de votre PC portable par une vraie enceinte et
que vous utilisez une vraie carte son...
De toute façon cela ne peut rivaliser avec un véritable synthétiseur, ni bien sûr avec un véritable instrument !
L'interface Midi définit donc comment ces instruments dialoguent entre eux,
par des messages en temps réel : note à jouer à cet instant,
changement du volume, etc...
Enfin ces "instruments" peuvent être virtuels (réalisés par du logiciel) ou matériels.
De même les liaisons entre ces différentes parties du système peuvent être matérialisées
par des cables physiques (cables midi) ou par des échanges entre programmes d'un même ordinateur.
Une partie importante en ce qui nous concerne est l'enregistrement des séquences à jouer dans des fichiers :
"fichiers midi", bien sûr.
Un système peut comporter plusieurs claviers, ou pas du tout d'ailleurs, plusieurs synthétiseurs,
et même plusieurs séquenceurs.
Un même séquenceur peut ainsi piloter plusieurs synthétiseurs, chacun pouvant éventuellement générer plusieurs
sons simultanément (polyphonie).
Pour s'y retrouver, chaque dispositif est généralement associé à un ou plusieurs
canaux midi.
Un séquenceur a pour but donc d'émettre au bon moment des messages midi à destination des synthétiseurs du système,
sur les canaux choisis.
L'ensemble de ces messages à envoyer forme une séquence
Enfin l'affectation des divers instruments à des canaux midi se reflète dans une séquence par des
pistes (tracks).
Une séquence à jouer (= un fichier midi par exemple) se compose ainsi de diverses pistes, chacune constituant
une partie logique de la séquence.
Par exemple une piste pour la voix de Soprano, une piste pour Alto I, une piste pour Alto II etc.
Il n'y a aucune norme pour cette affectation des pistes et des canaux, chaque morceau a ses propres règles.
En ce qui nous concerne ici (midi 1) un fichier midi décrit ainsi une séquence, composée de plusieurs pistes
à jouer simultanément.
Généralement tous les messages d'une piste s'adressent au même canal (donc au même [élément de] synthétiseur),
mais ce n'est pas obligatoire.
Chaque canal a des caractéristiques qui lui sont propres, par exemple son volume, l'instrument qui émet les sons,
etc.
et ceci peut changer à tout moment sous le contrôle des messages midi.
Le Windows Media Player de Windows 98 sur un PC muni d'une vraie carte son (SoundBlaster par exemple)
utilise le synthétiseur matériel de la carte son.
Par contre QuickTime effectue ses propres synthèses par logiciel, ignorant le synthétiseur matériel de la carte son !
La table de mixage d'une carte son (Soundblaster) :
Ces tables de mixages sont affichées par "ouvrir les commandes de volume" (click droit) de l'icone son de la barre de tâches.
Un séquenceur Java peut envoyer ses messages au choix vers divers synthétiseurs du sytème :
L'applet suivante teste votre système Midi :
Sur mon PC j'ai ainsi les dispositifs Midi suivants :
MIDI entrée Creative : Entrée Midi de la carte son (cable MIDI IN du PC)
MIDI Mapper : Windows MIDI_MAPPER, traducteur de sons de Windows
Synthétiseur MIDI Creative : Synthétiseur de la carte son
MIDI sortie Creative : sortie MIDI de la carte son (cable MIDI OUT du PC)
Real Time Sequencer : Séquenceur de Java
Java Sound Synthesizer : Synthétiseur de Java
Les dispositifs qui génèrent des sons sont des synthétiseurs ou des ports vus comme MIDI IN par Java
Le port MIDI OUT du PC est bien vu comme un dispositif relié à Java par une entrée :
Les messages midis sortent de Java, entrent dans le port et sortent du PC.
Idem pour le Midi Mapper de Windows par exemple qui est vu par Java comme un port MIDI IN
Sur cette configuration, les sons demandés par le séquenceur Java sortiront, au choix
- Par le MIDI Mapper de Windows
- Par le synthétiseur midi (matériel) de la carte son
- Par le port MIDI OUT du PC, vers un synthétiseur exterieur, qui les reçoit sur son entrée MIDI IN, et génère le son.
- Par le synthétiseur de Java, qui les génère par logiciel à destination de l'entrée "audio" du Mixer de la carte
son
Par défaut le son est généré par le synthétiseur de Java, en utilsant une banque de son s'il y en a une d'installée, sinon des sons par défaut.
Si on a un EMBED de player non défini, la modification dynamique du morceau joué indiquée dans
la doc de JavaScript est fausse.
Le code Javascript document.player1.play(loop, "sound.mid") renvoie l'erreur :
"document.player1.play is not a function" avec Mozilla/Firefox
et "cet objet n'est pas une collection" avec IE.
Il faut donc générer le EMBED de façon dynamique. Voir ci-dessous.
Si c'est une applet Java, le choix est fait dans cette applet.
Il y a toutefois une restriction importante : le fichier midi doit être dans la filiation du répertoire où se
trouve le fichier de l'applet.
On ne peut pas spécifier un fichier comme "../ailleurs/chant.mid"
Le player par classid sur le windows media player est plus souple sur ce point et joue des morceaux situés
n'importe où sur le Web,
et est pilotable directement par JavaScript, en changeant dynamiquement le FileName par obj.FileName="..."
Malheureusement ceci ne fonctionne que sur IE, Firefox ayant une version de Windows Media Player
particulière qui ne marche pas avec FileName et n'est pas pilotable par JavaScript.
Il faut alors générer dynamiquement le EMBED, inclus dans un <DIV> au contenu HTML dynamique. Un peu galère...
C'est cette technique qui est actuellement utilisée... en attendant que je finalise ma propre applet qui aura
tout de même d'énormes avantages en ce qui nous concerne : le véritable pilotage Midi
(affichage des mesures, modification des volumes et des instruments par piste, bouclage sur les
mesures x à y etc...)
Le code utilisé est asez trappu, à cause de la génération dynamique de EMBED pour les non IE :
<script>
<!-- function setfile(s) { if (obj.FileName == undefined) { // dynamiquement avec un FileName variable txt="<object classid='CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95' width='400' height='69' id='player1'>"; txt+="<param name='FileName' value='"+s+"' />"; txt+="<param name='AutoStart' value='true' />"; txt+="<param name='ShowControls' value='true' />"; txt+="<param name='ShowStatusBar' value='true' />"; txt+="<param name='ShowDisplay' value='false' />"; txt+="<param name='ShowTracker' value='true' />"; txt+="<param name='AutoRewind' value='true' />"; txt+="<embed type='application/x-mplayer2'"; txt+="pluginspage='http://www.microsoft.com/Windows/MediaPlayer/download/default.asp' "; txt+="src='"+s+"' Name=Mplayer1 AutoStart=1 ShowControls=1 ShowTracker=1 ShowDisplay=0 ShowStatusBar=1"; txt+="width='400' height='69' /></object>"; document.getElementById("lecteur").innerHTML=txt; } // object dynamique else obj.FileName=s; // s'il est opérationnel, il suffit de changer le FileName (ne marche qu'avec IE) return false; // inhibe l'action du <a href=... } // --> </script>
<div id='lecteur'>
<a href="kyrie.mid" onclick="return setfile('kyrie.mid');">Kyrie</a>
|
Ce sera plus simple avec une applet, grace à l'utilisation interdite de la balise <APPLET> !
<applet code=monplayeramoi.class archive=monplayeramoi.jar width=nnn height=nnn>
<param name="..." value="..." /> <param name="..." value="..." /> </applet> |