|
» codelab : http://codelab.fr/accueil » Forum : Processing : http://codelab.fr/processing » proMidi : http://codelab.fr/1499 Ceci est la version imprimable d'un sujet du forum, pour retourner à la version complète : proMidi |
| jerome — 2010-01-30 22:15:13 |
Bonjour, |
| human.koala — 2010-01-30 22:53:33 |
tu utilise quoi comme structure de données pour stocker tes notes ? |
| emoc — 2010-01-31 02:45:17 |
Bonjour, |
| jerome — 2010-01-31 12:15:32 |
Merci pour les réponses. Note currentNote = new Note(channel,pitch,velocity); //channel,pitch,velocity midiOut.sendNoteOn(currentNote ); delay(duree); midiOut.sendNoteOff(currentNote ); De même la méthode openOutput(1) est remplacée par getMidiOut(1,1); import promidi.*;
MidiIO midiIO;
MidiOut midiOut;
void setup(){
midiIO = MidiIO.getInstance(this);
midiOut = midiIO.getMidiOut(1,1);
midiOut.sendNote(new Note(100,120,10)); //pitch,velocity,duree
}
void draw(){}MidiBus : track = new Track("one", midiOut);
track.setQuantization(Q._1_4);
song = new Song("test", 200);
song.addTrack(track);
sequencer = new Sequencer();
sequencer.setSong(song);
sequencer.setLoopStartPoint(0);
sequencer.setLoopEndPoint(SEQ_MAX);
sequencer.setLoopCount(-1);Mon programme pianoroll en cours : http://abel.jerome.free.fr/pianoroll/pi … _test9.zip track.addEvent(tabNotes[i][j],j); mais que je fais tout simplement : track.addEvent(new Note(new Note(36+abs(i-CELL_HEIGHT_NB),120,50),j); La durée de la note devrait être de 50 millisecondes, et bien, ça ne marche pas non plus. |
| jerome — 2010-02-02 10:49:29 |
J'ai écris un message sur le forum de Processing, il semblerait que pour le problème de removeEvent, des personnes soient dans le même cas que moi : |
| emoc — 2010-02-02 11:45:52 |
Bonjour, |
| jerome — 2010-02-02 12:23:32 |
:( La fonction removeEvent() a l'air "buggée", il faudrait rentrer dans le code Java mais je n'ai pas le temps. int step, tmp_step;
(...)
void draw() {
(...)
// calcul du pas : séquenceur de 16 pas, 512 ticks, 4 temps pour 512 ticks
// pas sûr du calcul, en tout cas chez moi ça fonctionne
step = (int)(sequencer.getTickPosition() * 16 / (512/4 * 16));
if (sequencer.isRunning()) {
if (step != tmp_step) {
sendMidi(step); // envoyée une seule fois par pas
tmp_step = step;
}
}
} // fin draw()
void sendMidi(int _step) {
Note n;
for (int i = 0; i < 24; i++) {
if (tab[i][_step] == 1) { // la case sélectionnée
// petit calcul pour la hauteur
// les notes Midi vont de 36 à (36 + 24)
n= new Note(36+abs(i-cell_h_nb),100,20);
midiOut.sendNote(n);
}
}
} // fin sendMidi:mad:
Le noteOff ne semble venir que d'un contrôleur ?!! |
| jerome — 2010-02-03 14:52:18 |
Une version de mon projet de piano roll disponible ici : http://codelab.fr/1508#p7102 |
| emoc — 2010-02-03 15:23:31 |
Merci de partager ton programme! |