Commit ddcfc8e5 authored by Simon Jeanteur's avatar Simon Jeanteur

yo

parent 4afc1831
package arduinoCaptor;
import java.util.HashSet;
import java.util.Set;
public class Captor {
private final Set<CaptorEventListener> captorEventListenerList = new HashSet<>();
public void addOnCaptorEventListener(CaptorEventListener captorEventListener){
captorEventListenerList.add(captorEventListener);
}
}
package arduinoCaptor;
public class CaptorEvent {
private int octave;
private double shade;
public int getOctave() {
return octave;
}
public double getShade() {
return shade;
}
}
package arduinoCaptor;
public interface CaptorEventListener {
void onCaptorEventStarts(CaptorEvent captorEvent);
void onCaptorEventEnds(CaptorEvent captorEvent);
}
package leapMotion;
public class LeapMotion {
public LeapMotionState getLeapMotionState(){
return new LeapMotionState();//TODO
}
}
package leapMotion;
public class LeapMotionState {
public enum Note {
DO, RE, MI, FA, SOL, LA, SI,
DO_SHARP, RE_SHARP, MI_SHARP, FA_SHARP, SOL_SHARP, LA_SHARP, SI_SHARP,
DO_FLAT, RE_FLAT, MI_FLAT, FA_FLAT, SOL_FLAT, LA_FLAT, SI_FLAT,
}
private Note note;
public Note getNote() {
return note;
}
}
package noteGenerator;
public class NoteEvent {
private double pitch;
private double shade;
}
package noteGenerator;
public interface NoteEventListener {
void onNoteEventStart(NoteEvent noteEvent);
void onNoteEventEnds(NoteEvent noteEvent);
}
package noteGenerator;
import arduinoCaptor.CaptorEvent;
import arduinoCaptor.CaptorEventListener;
import leapMotion.LeapMotion;
import util.Context;
import java.util.HashSet;
import java.util.Set;
public class NoteMaker implements CaptorEventListener {
private final Set<NoteEventListener> noteEventListenerSet = new HashSet<>();
private LeapMotion leapMotion;
private Context context;
@Override
public void onCaptorEventStarts(CaptorEvent captorEvent) {
}
@Override
public void onCaptorEventEnds(CaptorEvent captorEvent) {
}
}
\ No newline at end of file
package syntheseMIDI;
import util.Context;
public class SoundMaker {
private Context context;
}
package util;
public class Context {
public enum Instrument{
PIANO;//...
}
}
Membres :
Membres du groupe
Simon Jeanteur
Agathe Lhopiteau
Thibaud Moustsita-Goulo
Ihebeddine Farhat
Robin Lefevre (pas encore présent car j'arrive pas à push)
Cyril Koenig
Ceci est votre dépôt pour le projet PACT.
**N'hésitez pas à modifier ce fichier pour décrire votre projet et son
organisation**
Vous pouvez modifier ce fichier (`README.md`) et créer tous les
répertoires et fichiers dont vous aurez besoin pour votre projet.
# Important, le rapport d'avancement
Le répertoire `rapport` contient un squelette pour votre rapporte d'avancement.
Ce répertoire **ne doit pas être renommé** ni le fichier `README.adoc` qu'il contient.
Le fichier `README.adoc` est le point d'entrée du rapport.
Il est rédigé en utilisant le langage [**AsciiDoc**](http://asciidoc.org/).
La syntaxe est supportée par GitLab qui le formatera correctement dans l'interface Web.
Le document final sera généré en utilisant l'outil [Asciidoctor](http://asciidoctor.org/) qui supporte les même extensions que GitLab (pour les équations par exemple).
Un résumé de la syntaxe supportée est accessible [ici](http://asciidoctor.org/docs/asciidoc-syntax-quick-reference/).
Vous pouvez éditer les différents fichiers en utilisant *votre éditeur de texte favori*.
Si vous n'en avez pas, vous pouvez, par exemple utiliser:
- [**Atom**](https://atom.io/) avec le paquet *AsciiDoc Assistant* qui vous ajoutera la coloration syntaxique et la pré-visualisation,
- **Sublim Text**, **Vim**, **Emacs**,…
- Une extension pour navigateur Web est aussi disponible pour visualiser le résultat([**ici**](https://asciidoctor.org/docs/editing-asciidoc-with-live-preview/#using-a-web-browser-preview-only)).
Simon
# eBook build output
*.epub
*.mobi
*.pdf
*.log
.*.swp
= Rapport d’avancement du groupe 4.4
PACT groupe xy (Les plus beaux)
ifdef::env-gitlab,env-browser[:outfilesuffix: .adoc]
:doctype: book
:stem: latexmath
:source-highlighter: coderay
:toc-title: Table des matières
:toc: macro
:sectnums:
:imagesdir: images
// Partie non numérotée
:sectnums!:
== ImPACT tout terrain
=== Membres du groupe
* Simon Jeanteur
* Agathe Lhopiteau
* Thibaud Moustsita-Goulo
* Ihebeddine Farhat
* Robin Lefevre
* Cyril Koenig
=== Tuteur
* Christophe Prieur
=== Encadrant génie logiciel
* Aurélien David
== Résumé du sujet choisi en français (PAN1)
//*_Note: 15 lignes max_*
Notre projet consiste à créer un nouvel instument de musique, plus intuitif et offrant plus de possibilités que ses prédécesseurs. Le but est de pouvoir jouer de la musique d’une toute nouvelle manière, sans même toucher l’instrument. Ce dernier offrira également plusieurs sons et tonalités afin de permettre la création d’oeuvres variées.
Pour cela, des capteurs de distance ainsi qu’une leapmotion permettront de reconnaître les mouvements de main du musicien, qui seront alors transcrits en son via un calculateur intégré au système. Un écran à la surface de l’objet permettra de sélectionner les divers modes de jeu (volume, timbre, tonalité…). L’objet sera donc totalement indépendant d’autres systèmes extérieurs, mis à part pour l’alimentation.
== English Summary (PAN1)
//*_Note : 15 lignes max, version anglaise du texte précédent_*
Carrying out this project, we are willing to create a new musical instrument, which people will play more intuitively and with more possibilities than the ones already existing. The very aim of this object is to enable musicians to play in a totally new way, without even touching the instrument. The latter is also going to provide several sounds and keys so as to allow the creation of varied pieces of art.
In order to achieve this goal, some proximity sensors and a leapmotion will be placed so as to recognise the moves of the musician’s hands, which will then be turned into some sounds thanks to a computer integrated in the system. On top of the instrument, a screen will enable the performer to select some parameters such as the volume, the tone or the timbre of his work. Thus, the object is going to be completely free from any other system, except for its power source.
//*Notes concenant le rapport*
//AsciiDoc. Le squelette de rapport contient des exemples avec entre autre:
//
//* des images,
//* des liens,
//* des équations.
//La structure du rapport (parties, sections et la relation avec les
//differents fichiers) se trouve dans le fichier courant.
// en PDF on ne peut pas controler la position de la toc
// Macros non supportées
ifndef::backend-pdf[]
== Table des matières
:toc-title:
toc::[]
endif::[]
// On numérote le reste des sections
:sectnums:
== Étude d’antériorité et justification de la proposition (PAN1)
include::proposition/proposition.adoc[Description de la proposition]
include::proposition/etat-de-l-art.adoc[Description de l’état de l’art]
== Scénarios d’usage (PAN1)
include::scenario/scenario.adoc[Scénarios d’usage]
<<<
== Architecture du projet (PAN1)
include::architecture/schema.adoc[Schéma d’architecture]
include::architecture/interfaces.adoc[Description des interfaces]
include::architecture/sequence.adoc[Diagramme de séquence]
include::architecture/ihm.adoc[Interface utilisateur graphique]
include::architecture/taches.adoc[Tableau détaillé des tâches]
<<<
== Organisation du projet (PAN1)
include::organisation/planification.adoc[Diagramme de planification temporel des tâches]
include::organisation/repartition.adoc[Répartition des élèves par module]
include::organisation/plan-tests.adoc[Plans de test (PAN2+)]
include::organisation/avancement.adoc[Diagramme d’avancement des tâches (PAN2+)]
<<<
[bibliography]
== Bibliographie (PAN1+)
include::References.adoc[Bibliographie]
<<<
== Annexes
include::annexes/modifications.adoc[Modifications (PAN2+)]
include::annexes/reunions.adoc[Comptes Rendus de réunions]
include::annexes/avancement.adoc[Avancement des modules]
include::annexes/moduleX.adoc[Avancement module X]
include::annexes/moduleY.adoc[Avancement module Y]
//
//*_Note : Liste des références exploitées. Une référence complète
//donne titre, auteur(s), date, journal, revue, source de publication,
//titre de conférence, numéro, pages. Une webographie est aussi
//envisageable : titre, auteur, date, page web_*
//* [[RefShannon]]RefShannon : *C. E. SHANNON*, _A Mathematical Theory
//of Communication_, Reprinted with corrections from The Bell System
//Technical Journal, pages 379–423, 623–656, Vol. 27, 1948,
//http://sites.google.com/site/parthochoudhury/aMToC_CShannon.pdf
//* [[VitrinePACT]]VitrinePACT : _Vitrine des projets PACT_,
//https://pact.wp.mines-telecom.fr/vitrine/
//* [[TOTO]]XXX : *M. S. Otor*, _Best paper ever_, Livre de la jungle,
//Volume 2, pages 33-34, 1777
[[1]]Thérémine: https://fr.wikipedia.org/wiki/Th%C3%A9r%C3%A9mine
[[2]]LeapMotion: https://www.commentcamarche.com/faq/37086-le-leap-motion-cote-technique
[[3]]Arduino: : https://eskimon.fr/tuto-arduino-101-pr%C3%A9sentation-darduino
=== Suivis des modules (Après PAN1)
Insérez ici votre biblio et vos avancées techniques par module (réunions
experts, pseudo-code d’algorithmes, description détaillée de vos réalisations, etc.).
#include <stdio.h>
int main()
{
puts("hello world!");
return 0;
}
=== Modifications (PAN2+)
==== Modifications de fond
Tableau des modifications de fond apportées au projet avec validation
des experts et encadrant informatique
[cols=",,",options="header",]
|===============================================
| libellé / date | Description brève | Validé par :
| | |
| | |
|===============================================
==== Modifications du rapport
Vous noterez dans cette section les modifications apportées au rapport
depuis le PAN précédent. Si votre planification temporelle a été
modifiée, vous laisserez l’ancienne planification dans cette annexe.
===== Modifications du rapport au PAN2
Fusce ac nisi. Integer volutpat elementum metus. Vivamus luctus
ultricies diam. Curabitur euismod. Vivamus quam. Nunc ante. Nulla mi
nulla, vehicula nec, ultrices a, tincidunt vel, enim.
Suspendisse potenti. Aenean sed velit. Nunc a urna quis turpis imperdiet
sollicitudin. Mauris aliquam mauris ut tortor. Pellentesque tincidunt
mattis nibh. In id lectus eu.
===== Modifications du rapport au PAN3
Dolor aliquam elit, a commodo nisi felis nec nibh. Nulla facilisi. Etiam
at tortor. Vivamus quis sapien nec magna scelerisque lobortis.
Curabitur tincidunt viverra justo. Cum sociis natoque penatibus et
magnis dis parturient montes, nascetur ridiculus mus. Sed eros ante,
mattis ullamcorper, posuere quis, tempor vel, metus. Maecenas cursus
cursus lacus. Sed.
===== Modifications du rapport au PAN4
Hac habitasse platea dictumst. Cras quis lacus. Vestibulum rhoncus
congue lacus. Vivamus euismod, felis quis commodo viverra, dolor elit
dictum ante, et mollis eros augue at est. Class aptent taciti sociosqu
ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla
lectus sem, tristique sed, semper in, hendrerit non, sem. Vivamus.
=== Module X
==== Descriptions
[source,cpp]
----
#include <iostream>
using namespace std;
class M
{
public:
void hello()
{
cout << "hello" << endl;
}
};
int main()
{
M m;
m.hello();
return 0;
}
----
[source,c]
----
include::code/test.c[]
----
Et l'équation:
[latexmath]
++++
A \in \mathcal{M}_{u,k}(\mathbb{R}) et B \in \mathcal{M}_{k,f}(\mathbb{R})
++++
==== Avancement
==== Bibliographie spécifique
=== Module Y
==== Descriptions
==== Avancement
==== Bibliographie spécifique
=== Comptes Rendus de réunions
Insérez ici vos comptes rendus de réunions : date, durée, participants,
sujets abordés.
==== Réunion du dd/mm/yyyy
* Présents:
** AA
** BB
** CC
* Sujets abordés
** *xxx* : Nec, iaculis vel, mi. Nullam et augue vitae nunc tristique
vehicula. Suspendisse eget elit. Duis adipiscing dui non quam.
* Actions à entreprendre:
** Fusce sollicitudin molestie dui. Sed magna orci, accumsan nec,
viverra non, pharetra id, dui. Lorem ipsum dolor sit amet, consectetuer
adipiscing elit.
** Interdum arcu, at pellentesque diam metus ut nulla. Vestibulum eu
dolor sit amet lacus varius fermentum. Morbi dolor enim, pulvinar eget.
=== Interface utilisateur graphique
Il peut y avoir une ou plusieurs interfaces utilisateur (UI en anglais),
ou interface graphique, ou interface homme machine (IHM) : une interface
sur ordinateur et/ou une interface sur mobile ou tablette (Android),
selon le nombre d’appareils en jeu.
En lien avec un diagramme de séquence, une description simple de chaque
écran/page est nécessaire. Il est recommandé de faire des dessins, même
dessins au crayon photographiés ou scannés, car ce sont les meilleurs
supports de discussion : on appelle souvent ces dessins un
« storyboard ». Une description textuelle fait le lien entre tous les
éléments de l’IHM (ou des IHMs).
=== Description des interfaces
*Provisoire*
//Tout le projet sera réaliser en JAVA lorque le materiel nous le permet.
image::../images/interfaceUMLClassDiagram.png[Diagramme UML provisoire]
==== Leap Motion - Traitement Leap
L'interface sera le branchement matériel et le SDK LeapJava du Leap Motion.
==== Capteurs - Arduino
Connection matérielle.
==== Arduino - Traitment capteurs
Cette interface reste à déterminer en fonction des possibilités de l'Arduino. Cependant
c'est une interface internet à un module.
=== Schéma d’architecture
//Insérer ici un ou plusieurs schémas d’architecture du projet. Voir le
//cours d’introduction au Génie Logiciel. N’hésitez pas à faire des
//schémas hiérarchiques, c’est à dire avec un bloc d’un schéma général
//raffiné dans un second schéma ; ou des schémas en plusieurs parties.
image::../images/architecture.svg[Schéma d’architecture]
==== Légende
===== Composants
image:../images/lgarchitecture/bloc.svg[bloc] Groupe de composants
image:../images/lgarchitecture/physique.svg[physique] Composant physique
image:../images/lgarchitecture/pas_physique.svg[pas physique] Composant logiciel
image:../images/lgarchitecture/interaction.svg[interaction] Interaction
====== Modules
image:../images/lgarchitecture/module_arduino.svg[arduino] Arduino & capteurs
image:../images/lgarchitecture/module_leap.svg[leap] Leap Motion
image:../images/lgarchitecture/module_UI.svg[UI] Interface utilisateur
image:../images/lgarchitecture/module_son.svg[son] Gestion du son
==== Description des blocs
//Il faut ici une description textuelle de chaque bloc, sa fonction
//détaillée. En général, un bloc correspond à un module, sauf exception.
//Il peut être adapté de faire des blocs plus petits qu’un module.
//Il est important ici de distinguer les bibliothèques identifiées et
//disponibles de ce que vous allez produire (coder) vous même. Vous ne
//devez pas réinventer la roue mais vous ne devez pas non plus avoir votre
//projet tout fait en encapsulant un programme déjà existant.
===== PC
Dans la boîte, qui est l'*AirMusic*, nous aimerions installer un mini-pc afin de contrôler
les différentes entrées et sorties qui risquent de demander une puissance de calcul supérieure à ce qu'un
Raspberry-Pi pourrait fournir par exemple.
===== Traitement des notes
Ce groupe de blocs regroupe tout ce qui représente l'entrée _note_ de l'instrument.
====== Leap & Traitement Leap
Ces deux blocs correspondent au module *Leap Motion*. Il s'agit de gérer les entrées Leap Motion
====== Capteurs & Arduino
Il s'agit là d'un Ardunino relié à différents capteurs de distance (laser ou ultra-son
selon les disponibilités et faisabilité). La gestion de l'Arduino et de ces capteurs se fait au bloc *traitement capteurs*.
Ces configurations permettent de protéger l'ordinateur d'éventuelles mauvaises manipulations
et plus généralement des interactions avec le monde physique.
====== Traitement capteurs
Traitement logiciel des entrées capteurs et contrôle de l'Arduino.
====== Génération des notes
Ce bloc à cheval sur plusieurs modules représente l'interfacement de ceux-ci.
Il s'agit de la transcription des informations pré-traitées des capteurs & Leap Motion
en un format de note utilisable pour la *synthèse des notes*.
===== Son
Ici se trouve tout ce qui a un rapport immédiat avec le son.
====== Synthèse des notes
Transcription à proprement parler des notes en son.
====== Traitement du son
Un bloc éventuel pour rajouter des effets au son.
===== Gestion IU
Ce bloc correspond à la gestion des entrées utilisateur autres que les notes
===== Entrées /Sortie
Il s'agit de tout les blocs à droite du schéma
====== USB
Un sortie USB pour permettre à l'utilisateur de l'instrument d'étendre les fonctionnalités de celui-ci
en l'interfaçant avec d'autres objets, notamment grâce au standard MIDI.
====== Jack et Haut parleurs
Les sorties audio classiques
====== Ecran tactile
Pour les entrées utilisateur autres que les notes (ex: paramétrage, choix des instruments, ....)
=== Diagramme de séquence
Insérer ici un ou plusieurs diagrammes de séquence ou d’activité du
projet. Voir le cours d’introduction au Génie Logiciel. A priori, il y a
au moins un diagramme de séquence ou d’activité, en lien avec un
scénario. Il peut y avoir plusieurs diagrammes, un par scénario. S’il y
a dans le projet un dialogue client-serveur, il est utile de faire un
diagramme de séquence spécifique pour ce dialogue. Enfin, s’il y a une
interface graphique, un diagramme de séquence doit lui correspondre.
=== Tableau détaillé des tâches
****Note : 2 pages max - les fiches modules seront placées en annexe,
elles doivent être rédigées avec l’expert.****
Les différents aspects du projet sont découpés en tâches numérotées et
hiérarchisées (Tâches/sous-tâches, etc.). Chaque tâche est décrite
précisément et une équipe (typiquement un binôme) est affecté à sa
réalisation. Un module est typiquement constitué de plusieurs tâches et
sous-tâches. Pour le PAN3, vous aurez à démontrer une version simple,
*intégrée* et fonctionnelle de ce projet, nommée « prototype allégé ».
Dans le Tableau 1, complétez la colonne « Intégrée au PAN3 » comme
suit :
* Intégrée au PAN3 : la sous-tâche est soit finie soit en cours et
intégrée dans le prototype allégé.
* Non-intégrée au PAN3 : la sous-tâche est en cours, mais non intégrée
dans le prototype allégé, l’intégration se fera pour PAN4. L’avancement
de la sous-tâche sera donc démontré au PAN3 indépendamment du prototype
allégé (code MatLab ou autre)
Certaines sous-tâches peuvent ne pas être démontrables dans le prototype
allégé. Mettez-vous d’accord avec vos experts techniques pour savoir ce
qu’il est réaliste de démontrer au PAN3. N’hésitez pas à redécouper en 2
sous-taches, l’une démontrable au PAN3 et l’autre uniquement au PAN4.
[cols=",,^",options="header",]
|=================================================================================
| Tâche | Description | Intégré au PAN3
| T1 | Classificateur d’image |
| T1.1 | Changement espace de couleur pour permettre … | X
| T1.2 | Extraction de l’histogramme à partir de l’espace XYZ… | X
| T1.3 | Extraction des caractéristiques … |
| T1.4 | Comparaison des caractéristiques | X
| T2 | Détection de rythme (Module « Audio/Rythme ») |
| T2.1 | Découpage signal sonore en bande fréquentielle | X
| T2.2 | Détection du tempo |
| T2.3 | Changement de tempo | X
|=================================================================================
This diff is collapsed.
This diff is collapsed.
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="51.858334mm"
height="7.4461312mm"
viewBox="0 0 51.858334 7.4461312"
version="1.1"
id="svg1097"
inkscape:version="0.92.3 (2405546, 2018-03-11)"
sodipodi:docname="physique.svg">
<defs
id="defs1091" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="254.4283"
inkscape:cy="-207.24585"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1013"
inkscape:window-x="-9"
inkscape:window-y="-9"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<metadata
id="metadata1094">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-93.511307,-55.529908)">
<rect
x="93.568253"
y="55.586853"
width="51.744442"
height="7.3322406"
pointer-events="none"
id="rect88"
style="fill:#ffffff;stroke:#000000;stroke-width:0.11389043;stroke-dasharray:0.34167132, 0.34167132" />
<text
x="119.1759"
y="60.556995"
font-size="12px"
id="text114"
style="font-size:3.17499995px;font-family:Helvetica;text-anchor:middle;fill:#000000;stroke-width:0.26458332">Traitement des entrés note</text>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"