Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1424 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Mise en mémoire d'évènements midi : HashMap ?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Mise en mémoire d'évènements midi : HashMap ?

n°796989
raytaller
Posté le 16-07-2004 à 00:05:34  profilanswer
 

Bonsoir,
Je traite des évènements midis.
 
Un évènement midi, c'est :
- un état {Début de la note, fin de la note}
- une hauteur de note {0.. 127}
- une vélocité {0.. 127}
 
enfin moi là j'ai besoin que de ça.
 
Donc, comme c'est de la polyphonie, j'ai besoin d'associer une vélocité à chaque note commencée, puis de la virer quand la note se termine, et au début j'avais pensé à une HashMap (avec comme clé la hauteur de note bien sur).
 
Pour enregistrer mes vélocités je fais comme ça :

Code :
  1. switch (s) {
  2. case VSTEvent.VST_EVENT_MIDI_ATTACK:
  3.  voices.put(String.valueOf(note),new MIDINote(note,velo));
  4.  break;
  5. case VSTEvent.VST_EVENT_MIDI_RELEASE:
  6.  voices.remove(String.valueOf(note));
  7. }


Alors, ça marche.
Mais ce qui me dérange, c'est de devoir mettre 2 fois la hauteur de note, en effet, j'ai besoin au moment de la synthèse du son de parcourir tous les éléments de la HashMap. Je récupère donc sa collection, que je transforme en Array :
 

Code :
  1. int nvoi=Math.min(voices.size(),MAX_POLYPHONY);
  2. Object[] notes=voices.values().toArray();
  3. for(int i=0; i<nvoi; ++i){
  4. baseFreqs[i]=FREQ_TABLE[((MIDINote)notes[i]).note]*fScaler;
  5. }


 
Si j'ai besoin de stocker un objet MIDINote (constitué d'une hauteur de note et d'une vélocité) dans ma HashMap avec cette technique, c'est parce qu'au moment de la parcourir, je n'ai pas la clé (la hauteur de note) et j'en ai absolument besoin.
 
Moi au final, je m'en fous de ma MIDINote, j'aimerais pouvoir n'associer qu'une valeur à une autre valeur, tout en étant capable de parcourir de manière itérative tous ces éléments, et en récupérer à la fois la clé et la valeur.
 
Je n'ai pas beaucoup d'expérience en java, et je ne sais pas si c'est une bonne idée de passer les clés en chaînes de caractères, sachant qu'en 1.4, on ne peut pas passer de type primitif.
 
Voilà, j'espère que c'est pas trop embrouillé, et merci d'avance :)

mood
Publicité
Posté le 16-07-2004 à 00:05:34  profilanswer
 

n°797106
the real m​oins moins
Posté le 16-07-2004 à 02:56:47  profilanswer
 
n°797264
raytaller
Posté le 16-07-2004 à 10:07:51  profilanswer
 

Oui, c'est joli...
Nan mais là je récupère les évènements depuis un vst, je reçois pas d'évènements midi en tant qu'objets mais des entiers que je dois mettre en mémoire.
D'où ma volonté de chercher le conteneur le plus adapté.
Je vois pas très bien ce que je peux faire avec cette classe Sequence en plus... c'est du temps réel, j'ai pas de morceau, pas de piste ou quoi, juste des entiers censés représenter des évènements midi.
 

n°797382
senternal
Posté le 16-07-2004 à 10:57:21  profilanswer
 

raytaller a écrit :

Oui, c'est joli...
Nan mais là je récupère les évènements depuis un vst, je reçois pas d'évènements midi en tant qu'objets mais des entiers que je dois mettre en mémoire.
D'où ma volonté de chercher le conteneur le plus adapté.
Je vois pas très bien ce que je peux faire avec cette classe Sequence en plus... c'est du temps réel, j'ai pas de morceau, pas de piste ou quoi, juste des entiers censés représenter des évènements midi.


 
Sauf que la package mentionné te permet à partir de tes 3 parametres de stocker tes event midi dans un "conteneur adapté"... MidiEvent, Sequence et ShortMessage peuvent être tes amis... En plus, Sun fournit en ligne un zip avec source + jar de demo sur le midi... Pas besoin de réinventer la roue avec un hashmap...

n°797552
raytaller
Posté le 16-07-2004 à 12:31:50  profilanswer
 

Ok, ma MIDINote existe déjà en mieux. Donc, je vais effectivement la remplacer par ShortMessage, c'est adapté vous avez raison.
 
Mais je vois toujours pas où les stocker. Je n'ai pas besoin de séquence puisque je n'ai pas besoin de les enregistrer au cours du temps. Ce n'est pas une partition que j'essaye de faire.
 
Je crois que je vais me faire un bête algorithme de recherche dans un tableau, puisque ce que je veux, c'est pouvoir récupérer les touches du clavier qui sont effectivement enfoncées à un instant t c'est tout.
 
Je vais parcourir tout le tableau qui limitera la polyphonie et rechercher à quel indice correspond telle note etc...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Mise en mémoire d'évènements midi : HashMap ?

 

Sujets relatifs
fichiers INCLUDE + Base de Données + dynamique + pb de Mise A Jour[CSS] Probleme de mise en page
mise en forme CSSProblème de mise en page (Access2000)
pile memoire - modification donneesEquivalent d'un HashMap, mais ordonnée
mise à jour d'une webapp sur tomcat[Weblogic] pas assez de mémoire sous l'EDI Workshop
[RESOLU] [php/bdd] mise a jour de bdd a une heure determinéeUrgent pliz. Pb de mise à jour de champ.
Plus de sujets relatifs à : Mise en mémoire d'évènements midi : HashMap ?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR