Bonjour c'est la première fois que je développe vraiment (bien que ce soit encore fort amateur) en JavaFX.
J'ai des soucis déjà j'avais fait un post avec la méthode setOnKeyPress des composants jfx qui me semble ne pas fonctionner comme il se devrait
(c'est-à-dire de la manière qu'en awt). Je passe sur ce bug (si c'en est un?) que j'ai contourné.
Maintenant j'essaie d'écrire le code pour une visualisation de son dans l'interface du synthé ce qui me permettra de faire des progrès dans le développement des nouvelles fonctionnalités.
Le code n'est pas très complexe il s'agit juste d'afficher des échantillons sonores en graphique type "nuage de points reliés"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 public void run() { while (isRunning()) { GraphicsContext context2D = canvas.getGraphicsContext2D(); drawBorder(canvas.getGraphicsContext2D(), Color.RED); // FONCTIONNE Enveloppe enveloppe = new Enveloppe(1); double[] ypoints = new double[enveloppe.points.length]; double[] xpoints = new double[enveloppe.points.length]; double maxHeight = canvas.getHeight() / 2; for (int i = 0; i < enveloppe.points.length; i++) { double y = enveloppe.points[i].getY() * maxHeight; double z = enveloppe.points[i].getZ() * maxHeight; xpoints[i] = z; ypoints[i] = y; } context2D.strokePolyline(xpoints, ypoints, xpoints.length); // FONCTIONNE // A PARTIR D'ICI CA NE FONCTIONNE PLUS. LinkedList<Double> doubles2 = waitForData.getDoubles(); if (doubles2.size() >= channels) { //System.out.println("drawn"); double[] objects1 = new double[(int) (canvas.getWidth() * 2)]; int i = 0; while (doubles2.getFirst() != null && i < objects1.length) { objects1[i++] = doubles2.getFirst(); doubles2.removeFirst(); } double[] xs = new double[objects1.length / 2]; double[] ys1 = new double[objects1.length / 2]; double[] ys2 = new double[objects1.length / 2]; xpoints = new double[objects1.length]; int length = ypoints.length; for (; i < objects1.length; ) { xs[i] = position++; xpoints[i] = xs[i] / max + maxHeight / 2; ys1[i] = objects1[i++] / max + maxHeight / 2; ys2[i] = objects1[i++] / max + maxHeight / 2; if (position >= canvas.getWidth()) { position = 0; } } context2D.setFill(Color.BLACK); context2D.setStroke(Color.BLUE); context2D.setLineWidth(4.0); context2D.strokePolyline(xpoints, ys1, length); context2D.strokePolyline(xpoints, ys2, length); try { Thread.sleep(200); } catch (InterruptedException e) { e.printStackTrace(); } } } }
Le code complet se trouve ici: https://gitlab.com/Graphics3D/MyLittleSynth
Partager