branch feature/7063 updated (0cc876b -> 3fc8d00)
This is an automated email from the git hooks/post-receive script. New change to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git omits 0cc876b correction de l'algo de lecture de nombres (refs #7063) omits 0d7dc7f Utilisation d'un vrai objet Java pour jouer les son (SoundEngine) et revue du threading (See #7063) omits 4a74a07 ajout des headers de license manquantes omits bf9dc9a ajout de l'option pour lire ou non les mesures et les bips (fixes #7063) omits 6a347de correction de la lecture des voix (fixes #7063) omits a13a9c5 ajout de la lecture des nombres mais il reste un problème de lecture de certains nombres (2000 cm par exemple, mais je ne sais pas pourquoi) (refs #7063) omits 102b709 ajout de la tonalité nulle dans la conf (refs #7063) omits 5f534b2 joue un bip à la réception d'une donnée de l'ychtiomètre et 3 bips différents en cas d'erreur (refs #7063) omits 89aec2c génération et lecture de bips + ajout d'une option pour configurer la tonalité du bip à jouer (refs #7063) adds 10126e9 Ajout du model de RTP sur SpeciesProtocol (See #6115) adds 9a93ee2 Début de l'éditeur des relations RTP, mais tout ne fonctionne pas encore.. (See #6115) adds f1ea25f ajout du validateur + passage du tablemodel dans le model de l'editor (refs #6115) adds 0f712f8 ajout du validateur + passage du tablemodel dans l'editor (refs #6115) adds 952635a reset le formulaire quand on quitte sans sauvegarder (refs #6115) adds acc92af On sauve seulement (on en ferme pas) quand on clique sur le bouton Enregistrer (refs #6115) adds f71d3c3 nouvelle extension des fichiers css + libellés (refs #6115) adds fe65501 correction renderer (refs #6115) adds 673fd6f ajout des actions pour naviguer dans le tableau (refs #6115) adds 5b9c6e6 conversion entre index de vue et de modele (refs #6115) adds 5e85a68 check des modifs quand on navigue (refs #6115) adds d529bb6 repasser les dialog au dessus de l'editeur (refs #6115) adds 13442b2 ajout des valuers des rtp en tooltip (refs #6115) adds ee34990 modif de l'icone des rtp + mise en forme du tooltip + highlighter (refs #6115) adds 514e59e suppression code commenté adds 5fc1d70 Renommage titre adds c03118d centrer sur la fenetre principale l'éditeur de rtp adds 25d2b53 Bien modifier le modèle du tableau lorsqu'on enregistre un RTP adds 6c08e82 Fixes #6115 Merge branch 'feature/6115_ajout_RTP' into develop new 0bdf1e6 génération et lecture de bips + ajout d'une option pour configurer la tonalité du bip à jouer (refs #7063) new 0ea56dc joue un bip à la réception d'une donnée de l'ychtiomètre et 3 bips différents en cas d'erreur (refs #7063) new c8c6ee9 ajout de la tonalité nulle dans la conf (refs #7063) new 01ef1c5 ajout de la lecture des nombres mais il reste un problème de lecture de certains nombres (2000 cm par exemple, mais je ne sais pas pourquoi) (refs #7063) new 108a2ef correction de la lecture des voix (fixes #7063) new c1520e9 ajout de l'option pour lire ou non les mesures et les bips (fixes #7063) new 024dbe9 ajout des headers de license manquantes new e3a6167 Utilisation d'un vrai objet Java pour jouer les son (SoundEngine) et revue du threading (See #7063) new fe0b300 correction de l'algo de lecture de nombres (refs #7063) new 3fc8d00 Suppression de la notification sonore en mode rafale si cela ne vient pas de l'ichtyomètre This update added new revisions after undoing existing revisions. That is to say, some revisions that were in the old version of the branch are not in the new version. This situation occurs when a user --force pushes a change and generates a repository containing something like this: * -- * -- B -- O -- O -- O (0cc876b) \ N -- N -- N refs/heads/feature/7063 (3fc8d00) You should already have received notification emails for all of the O revisions, and so the following emails describe only the N revisions from the common base, B. Any revisions marked "omits" are not gone; other references still refer to them. Any revisions marked "discards" are gone forever. The 10 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Detailed log of new commits: commit 3fc8d00a5271329f55b640210b1ce43a1ae978e2 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Jan 20 17:47:41 2016 +0100 Suppression de la notification sonore en mode rafale si cela ne vient pas de l'ichtyomètre commit fe0b3008031770263c6f6cd0b4ba96d78d77e1db Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 20 10:36:21 2016 +0100 correction de l'algo de lecture de nombres (refs #7063) commit e3a6167ae93a2450f9612353eaa40e8406908137 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Jan 20 09:51:47 2016 +0100 Utilisation d'un vrai objet Java pour jouer les son (SoundEngine) et revue du threading (See #7063) commit 024dbe95b4d3da92d0440c15c26f287245a167ef Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Jan 19 13:46:21 2016 +0100 ajout des headers de license manquantes commit c1520e919b272fc6160e0dd052bf98c305026653 Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 18 17:35:31 2016 +0100 ajout de l'option pour lire ou non les mesures et les bips (fixes #7063) commit 108a2ef70edd63ff8a82ed30dc5dd7f524e5ffc6 Author: Kevin Morin <morin@codelutin.com> Date: Fri Jan 15 12:26:27 2016 +0100 correction de la lecture des voix (fixes #7063) commit 01ef1c5e92f2a1874c64aafb118d32851eabf3a6 Author: Kevin Morin <morin@codelutin.com> Date: Thu Jan 14 18:45:59 2016 +0100 ajout de la lecture des nombres mais il reste un problème de lecture de certains nombres (2000 cm par exemple, mais je ne sais pas pourquoi) (refs #7063) commit c8c6ee9120d12a528882a57fcbb9bd23376246cf Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 19:58:12 2016 +0100 ajout de la tonalité nulle dans la conf (refs #7063) commit 0ea56dc307593ec4207431b5df9c73b729d3e44f Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 18:51:09 2016 +0100 joue un bip à la réception d'une donnée de l'ychtiomètre et 3 bips différents en cas d'erreur (refs #7063) commit 0bdf1e6a07c0e370852c38e362936a71abf31402 Author: Kevin Morin <morin@codelutin.com> Date: Thu Jan 7 12:32:46 2016 +0100 génération et lecture de bips + ajout d'une option pour configurer la tonalité du bip à jouer (refs #7063) Summary of changes: .../entities/protocol/SpeciesProtocolBean.java | 25 +++ .../src/main/xmi/tutti-persistence.zargo | Bin 58480 -> 59339 bytes .../fr/ifremer/tutti/service/DecoratorService.java | 2 + .../actions/ApplySpeciesFrequencyRafaleAction.java | 4 - .../protocol/EditProtocolSpeciesRowModel.java | 74 ++++++- .../protocol/EditProtocolSpeciesTableModel.java | 5 + .../ui/swing/content/protocol/EditProtocolUI.jaxx | 3 + .../content/protocol/EditProtocolUIHandler.java | 42 ++++ .../ui/swing/content/protocol/rtp/RtpButton.java | 75 ++++++++ .../swing/content/protocol/rtp/RtpCellEditor.java | 73 +++++++ .../content/protocol/rtp/RtpCellRenderer.java | 104 ++++++++++ .../ui/swing/content/protocol/rtp/RtpEditorUI.jaxx | 156 +++++++++++++++ .../ui/swing/content/protocol/rtp/RtpEditorUI.jcss | 131 +++++++++++++ .../content/protocol/rtp/RtpEditorUIHandler.java | 167 ++++++++++++++++ .../content/protocol/rtp/RtpEditorUIModel.java | 212 +++++++++++++++++++++ .../protocol/rtp/actions/CloseRtpAction.java | 24 +++ .../protocol/rtp/actions/EditNextRowAction.java | 24 +++ .../rtp/actions/EditPreviousRowAction.java | 25 +++ .../protocol/rtp/actions/SaveRtpAction.java | 27 +++ .../rtp/RtpEditorUIModel-error-validation.xml | 51 +++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 56 ++++++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 40 ++++ .../src/main/resources/icons/action-edit-rtp.png | Bin 0 -> 543 bytes .../src/main/resources/icons/action-next.png | Bin 0 -> 395 bytes .../src/main/resources/icons/action-previous.png | Bin 0 -> 389 bytes 25 files changed, 1294 insertions(+), 26 deletions(-) create mode 100644 tutti-persistence/src/main/java/fr/ifremer/tutti/persistence/entities/protocol/SpeciesProtocolBean.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpButton.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpCellEditor.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpCellRenderer.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUI.jaxx create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUI.jcss create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIHandler.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/actions/CloseRtpAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/actions/EditNextRowAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/actions/EditPreviousRowAction.java create mode 100644 tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/rtp/actions/SaveRtpAction.java copy tutti-service/src/main/resources/fr/ifremer/tutti/persistence/entities/data/IndividualObservationBatch-edit-error-validation.xml => tutti-ui-swing/src/main/resources/fr/ifremer/tutti/ui/swing/content/protocol/rtp/RtpEditorUIModel-error-validation.xml (56%) create mode 100644 tutti-ui-swing/src/main/resources/icons/action-edit-rtp.png create mode 100644 tutti-ui-swing/src/main/resources/icons/action-next.png create mode 100644 tutti-ui-swing/src/main/resources/icons/action-previous.png -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git commit 0bdf1e6a07c0e370852c38e362936a71abf31402 Author: Kevin Morin <morin@codelutin.com> Date: Thu Jan 7 12:32:46 2016 +0100 génération et lecture de bips + ajout d'une option pour configurer la tonalité du bip à jouer (refs #7063) --- .../java/fr/ifremer/tutti/TuttiConfiguration.java | 5 +++ .../fr/ifremer/tutti/TuttiConfigurationOption.java | 8 +++++ .../java/fr/ifremer/tutti/util/BeepFrequency.java | 33 +++++++++++++++++ .../i18n/tutti-persistence_en_GB.properties | 1 + .../i18n/tutti-persistence_fr_FR.properties | 1 + .../swing/content/config/TuttiConfigUIHandler.java | 2 ++ .../fr/ifremer/tutti/ui/swing/util/SoundUtil.java | 42 ++++++++++++++++++++++ .../resources/i18n/tutti-ui-swing_en_GB.properties | 1 + .../resources/i18n/tutti-ui-swing_fr_FR.properties | 1 + 9 files changed, 94 insertions(+) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java index 0f8f274..7d5a819 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java @@ -28,6 +28,7 @@ import fr.ifremer.adagio.core.config.AdagioConfigurationOption; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.type.CoordinateEditorType; import fr.ifremer.tutti.type.WeightUnit; +import fr.ifremer.tutti.util.BeepFrequency; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.ReflectionToStringBuilder; import org.apache.commons.logging.Log; @@ -727,6 +728,10 @@ public class TuttiConfiguration extends ApplicationConfiguration { return applicationConfig.getOptionAsInt(TuttiConfigurationOption.ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT.getKey()); } + public BeepFrequency getBeepFrequency() { + return (BeepFrequency) applicationConfig.getOptionAsObject(TuttiConfigurationOption.BEEP_FREQUENCY.getKey()); + } + public String getJavaCommandPath() { String path; String commandName = windowsOS ? "java.exe" : "java"; diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java index 03555f2..4301378 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti; import fr.ifremer.tutti.persistence.entities.data.SampleCategoryModel; import fr.ifremer.tutti.type.CoordinateEditorType; import fr.ifremer.tutti.type.WeightUnit; +import fr.ifremer.tutti.util.BeepFrequency; import org.hibernate.dialect.HSQLDialect; import org.hsqldb.jdbcDriver; import org.nuiton.config.ConfigOptionDef; @@ -603,6 +604,13 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { "5", int.class, false + ), + BEEP_FREQUENCY( + "tutti.ichtyometer.beepFrequency", + n("tutti.config.option.beepFrequency.description"), + BeepFrequency.A2.toString(), + BeepFrequency.class, + false ); /** Configuration key. */ diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java new file mode 100644 index 0000000..c298836 --- /dev/null +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java @@ -0,0 +1,33 @@ +package fr.ifremer.tutti.util; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.3 + */ +public enum BeepFrequency { + + A1(880), + B1(987), + C1(1046), + D1(1174), + E1(1318), + F1(1396), + G1(1567), + A2(1760), + B2(1975), + C2(2093), + D2(2349), + E2(2637), + F2(2793), + G2(3135); + + private int frequency; + + BeepFrequency(int frequency) { + this.frequency = frequency; + } + + public int getFrequency() { + return frequency; + } +} diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties index 5a20bce..1709df9 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties @@ -9,6 +9,7 @@ tutti.caracteristicType.lengthStep= tutti.caracteristicType.vesselUseFeature= tutti.config= tutti.config.option.basedir.description= +tutti.config.option.beepFrequency.description= tutti.config.option.cruiseId.description= tutti.config.option.csv.separator.description= tutti.config.option.data.directory.description= diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties index d817e42..36602b8 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties @@ -5,6 +5,7 @@ application.common.unit.short.g=g application.common.unit.short.kg=kg tutti.config=Configuration d'Allegro Campagne tutti.config.option.basedir.description=Répertoire principale +tutti.config.option.beepFrequency.description=Tonalité du bip tutti.config.option.cruiseId.description=Identifiant de la dernière campagne utilisée tutti.config.option.csv.separator.description=Caractère séparateur pour les import / export de fichier au format csv. tutti.config.option.data.directory.description=Répertoire de données de l'application. Vous pouvez utiliser l'expression ${tutti.data.directory} pour le référence dans d'autres propriétés de configuration (ex\: ${tutti.data.directory}/tmp). diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java index 95bae99..fc2820f 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java @@ -140,6 +140,8 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .addOption(TuttiConfigurationOption.ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT) .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerMaximumNumberOfAttemptToConnect.shortLabel")) + .addOption(TuttiConfigurationOption.BEEP_FREQUENCY) + .setOptionShortLabel(t("tutti.config.option.ui.beepFrequency.shortLabel")) .addOption(TuttiConfigurationOption.SHOW_BATCH_LOG) .setOptionShortLabel(t("tutti.config.option.ui.showBatchLog.shortLabel")) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java new file mode 100644 index 0000000..7804f01 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java @@ -0,0 +1,42 @@ +package fr.ifremer.tutti.ui.swing.util; + +import fr.ifremer.tutti.util.BeepFrequency; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.SourceDataLine; + +/** + * @author Kevin Morin (Code Lutin) + * @since 4.3 + */ +public class SoundUtil { + + public static float SAMPLE_RATE = 8000f; + + public static void tone(BeepFrequency beepFrequency, int msecs) throws LineUnavailableException { + tone(beepFrequency.getFrequency(), msecs, 1.0); + } + + public static void tone(int hz, int msecs, double vol) throws LineUnavailableException { + byte[] buf = new byte[1]; + AudioFormat af = new AudioFormat(SAMPLE_RATE, // sampleRate + 8, // sampleSizeInBits + 1, // channels + true, // signed + false); // bigEndian + SourceDataLine sdl = AudioSystem.getSourceDataLine(af); + sdl.open(af); + sdl.start(); + for (int i = 0, end = msecs * 8 ; i < end ; i++) { + double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI; + buf[0] = (byte)(Math.sin(angle) * 127.0 * vol); + sdl.write(buf,0,1); + } + sdl.drain(); + sdl.stop(); + sdl.close(); + } + +} diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 917c711..913d754 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -155,6 +155,7 @@ tutti.config.option.service.report.log.directory.shortLabel= tutti.config.option.site.url.shortLabel= tutti.config.option.tmp.directory.shortLabel= tutti.config.option.tremieCarousselVessel.shortLabel= +tutti.config.option.ui.beepFrequency.shortLabel= tutti.config.option.ui.color.alternateRow.shortLabel= tutti.config.option.ui.color.benthos.shortLabel= tutti.config.option.ui.color.blockingLayer.shortLabel= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 8288461..7778628 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -134,6 +134,7 @@ tutti.config.option.service.report.log.directory.shortLabel=Répertoire des log tutti.config.option.site.url.shortLabel=URL du site technique tutti.config.option.tmp.directory.shortLabel=Répertoire temporaire tutti.config.option.tremieCarousselVessel.shortLabel=Navire ayant un carrousel et une trémie +tutti.config.option.ui.beepFrequency.shortLabel=Tonalité du bip tutti.config.option.ui.color.alternateRow.shortLabel=Couleur alternée tutti.config.option.ui.color.benthos.shortLabel=Couleur des libellés de benthos (Écran Capture > Résumé) tutti.config.option.ui.color.blockingLayer.shortLabel=Couleur d'attente -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git commit 0ea56dc307593ec4207431b5df9c73b729d3e44f Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 18:51:09 2016 +0100 joue un bip à la réception d'une donnée de l'ychtiomètre et 3 bips différents en cas d'erreur (refs #7063) --- .../java/fr/ifremer/tutti/TuttiConfiguration.java | 8 ++++++-- .../fr/ifremer/tutti/TuttiConfigurationOption.java | 13 ++++++++++--- .../i18n/tutti-persistence_en_GB.properties | 2 ++ .../i18n/tutti-persistence_fr_FR.properties | 3 ++- .../swing/content/config/TuttiConfigUIHandler.java | 7 +++++-- .../frequency/SpeciesFrequencyUIHandler.java | 6 ++++++ .../fr/ifremer/tutti/ui/swing/util/SoundUtil.java | 22 ++++++++++++++++++++-- .../resources/i18n/tutti-ui-swing_en_GB.properties | 2 ++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 2 ++ 9 files changed, 55 insertions(+), 10 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java index 7d5a819..550dc95 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java @@ -728,8 +728,12 @@ public class TuttiConfiguration extends ApplicationConfiguration { return applicationConfig.getOptionAsInt(TuttiConfigurationOption.ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT.getKey()); } - public BeepFrequency getBeepFrequency() { - return (BeepFrequency) applicationConfig.getOptionAsObject(TuttiConfigurationOption.BEEP_FREQUENCY.getKey()); + public BeepFrequency getIchtyometerDataReceptionBeepFrequency() { + return BeepFrequency.valueOf(applicationConfig.getOption(TuttiConfigurationOption.ICHTYOMETER_DATA_RECEPTION_BEEP_FREQUENCY.getKey())); + } + + public BeepFrequency getIchtyometerErrorReceptionBeepFrequency() { + return BeepFrequency.valueOf(applicationConfig.getOption(TuttiConfigurationOption.ICHTYOMETER_ERROR_RECEPTION_BEEP_FREQUENCY.getKey())); } public String getJavaCommandPath() { diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java index 4301378..836d2d9 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java @@ -605,12 +605,19 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { int.class, false ), - BEEP_FREQUENCY( - "tutti.ichtyometer.beepFrequency", - n("tutti.config.option.beepFrequency.description"), + ICHTYOMETER_DATA_RECEPTION_BEEP_FREQUENCY( + "tutti.ichtyometer.dataBeepFrequency", + n("tutti.config.option.dataBeepFrequency.description"), BeepFrequency.A2.toString(), BeepFrequency.class, false + ), + ICHTYOMETER_ERROR_RECEPTION_BEEP_FREQUENCY( + "tutti.ichtyometer.errorBeepFrequency", + n("tutti.config.option.errorBeepFrequency.description"), + BeepFrequency.A1.toString(), + BeepFrequency.class, + false ); /** Configuration key. */ diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties index 1709df9..bb634eb 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties @@ -13,7 +13,9 @@ tutti.config.option.beepFrequency.description= tutti.config.option.cruiseId.description= tutti.config.option.csv.separator.description= tutti.config.option.data.directory.description= +tutti.config.option.dataBeepFrequency.description= tutti.config.option.db.import.skipBackup.description= +tutti.config.option.errorBeepFrequency.description= tutti.config.option.export.backup.directory.description= tutti.config.option.export.countryId.description= tutti.config.option.genericFormat.import.maximumRowsInErrorPerFile.description= diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties index 36602b8..3a1fea2 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties @@ -5,11 +5,12 @@ application.common.unit.short.g=g application.common.unit.short.kg=kg tutti.config=Configuration d'Allegro Campagne tutti.config.option.basedir.description=Répertoire principale -tutti.config.option.beepFrequency.description=Tonalité du bip tutti.config.option.cruiseId.description=Identifiant de la dernière campagne utilisée tutti.config.option.csv.separator.description=Caractère séparateur pour les import / export de fichier au format csv. tutti.config.option.data.directory.description=Répertoire de données de l'application. Vous pouvez utiliser l'expression ${tutti.data.directory} pour le référence dans d'autres propriétés de configuration (ex\: ${tutti.data.directory}/tmp). +tutti.config.option.dataBeepFrequency.description=Tonalité du bip lors de la réception de données de l'ichtyomètre tutti.config.option.db.import.skipBackup.description=Pour ne pas effectuer une sauvegarde avant un import de base +tutti.config.option.errorBeepFrequency.description=Tonalité du bip lors de la réception d'une erreur de l'ichtyomètre tutti.config.option.export.backup.directory.description=Répertoire où sont enregistrées les exports génériques tutti.config.option.export.countryId.description=L'id du pays à utiliser pour les exports (il s'agit de la valeur LOCATION.ID). tutti.config.option.genericFormat.import.maximumRowsInErrorPerFile.description=Nombre maximum de lignes en erreur possible par fichier lors de la validation de l'import générique diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java index fc2820f..2af8379 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java @@ -140,8 +140,11 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .addOption(TuttiConfigurationOption.ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT) .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerMaximumNumberOfAttemptToConnect.shortLabel")) - .addOption(TuttiConfigurationOption.BEEP_FREQUENCY) - .setOptionShortLabel(t("tutti.config.option.ui.beepFrequency.shortLabel")) + .addOption(TuttiConfigurationOption.ICHTYOMETER_DATA_RECEPTION_BEEP_FREQUENCY) + .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerDataBeepFrequency.shortLabel")) + + .addOption(TuttiConfigurationOption.ICHTYOMETER_ERROR_RECEPTION_BEEP_FREQUENCY) + .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerErrorBeepFrequency.shortLabel")) .addOption(TuttiConfigurationOption.SHOW_BATCH_LOG) .setOptionShortLabel(t("tutti.config.option.ui.showBatchLog.shortLabel")) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index eb76303..126041a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -40,6 +40,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfiguratio import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyCellComponent.FrequencyCellEditor; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.ApplySpeciesFrequencyRafaleAction; +import fr.ifremer.tutti.ui.swing.util.SoundUtil; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiNumberTickUnitSource; import fr.ifremer.tutti.ui.swing.util.TuttiUI; @@ -650,6 +651,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci protected void consumeFeedRecord(FeedReaderMeasureRecord record) { if (record.isValid()) { + SoundUtil.beep(getConfig().getIchtyometerDataReceptionBeepFrequency()); + String unit = getModel().getLengthStepCaracteristicUnit(); // board measurements are in mm @@ -671,6 +674,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci applySpeciesFrequencyRafaleAction.applyRafaleStep(length, true); } else { + + SoundUtil.beep(getConfig().getIchtyometerErrorReceptionBeepFrequency(), 3); + throw new ApplicationBusinessException( t("tutti.editSpeciesFrequencies.error.itchyometer.bad.record", record.getRecord())); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java index 7804f01..b4ef694 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java @@ -1,6 +1,8 @@ package fr.ifremer.tutti.ui.swing.util; import fr.ifremer.tutti.util.BeepFrequency; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioSystem; @@ -13,10 +15,26 @@ import javax.sound.sampled.SourceDataLine; */ public class SoundUtil { + /** Logger. */ + private static final Log log = LogFactory.getLog(SoundUtil.class); + public static float SAMPLE_RATE = 8000f; - public static void tone(BeepFrequency beepFrequency, int msecs) throws LineUnavailableException { - tone(beepFrequency.getFrequency(), msecs, 1.0); + public static void beep(BeepFrequency beepFrequency) { + beep(beepFrequency, 1); + } + + public static void beep(BeepFrequency beepFrequency, int number) { + try { + for (int i = 0; i < number; i++) { + tone(beepFrequency.getFrequency(), 500, 1.0); + } + + } catch (LineUnavailableException e) { + if (log.isErrorEnabled()) { + log.error("Error while playing a beep", e); + } + } } public static void tone(int hz, int msecs, double vol) throws LineUnavailableException { diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 913d754..92d72f9 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -176,6 +176,8 @@ tutti.config.option.ui.db.import.skipBackup.shortLabel= tutti.config.option.ui.fullBluetoothScan.shortLabel= tutti.config.option.ui.genericFormat.import.maximumRowsInErrorPerFile.shortLabel= tutti.config.option.ui.genericFormat.import.skipBackup.shortLabel= +tutti.config.option.ui.ichtyometerDataBeepFrequency.shortLabel= +tutti.config.option.ui.ichtyometerErrorBeepFrequency.shortLabel= tutti.config.option.ui.ichtyometerMaximumNumberOfAttemptToConnect.shortLabel= tutti.config.option.ui.individualObservationRowsToCreate.shortLabel= tutti.config.option.ui.showBatchLog.shortLabel= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index 7778628..f691250 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -155,6 +155,8 @@ tutti.config.option.ui.db.import.skipBackup.shortLabel=Ne pas faire de sauvegard tutti.config.option.ui.fullBluetoothScan.shortLabel=Recherche complète des périphériques bluetooth tutti.config.option.ui.genericFormat.import.maximumRowsInErrorPerFile.shortLabel=Nombre maximum de lignes en erreur possible par fichier lors de la validation de l'import générique tutti.config.option.ui.genericFormat.import.skipBackup.shortLabel=Ne pas faire de sauvegarde avant un import au format générique +tutti.config.option.ui.ichtyometerDataBeepFrequency.shortLabel=Tonalité de réception de données +tutti.config.option.ui.ichtyometerErrorBeepFrequency.shortLabel=Tonalité de réception d'erreur tutti.config.option.ui.ichtyometerMaximumNumberOfAttemptToConnect.shortLabel=Nombre maximum de tentatives de connection à l'ichtyomètre tutti.config.option.ui.individualObservationRowsToCreate.shortLabel=Nombre max de données individuelles tutti.config.option.ui.showBatchLog.shortLabel=Voir la structure des lots dans les logs -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git commit c8c6ee9120d12a528882a57fcbb9bd23376246cf Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 13 19:58:12 2016 +0100 ajout de la tonalité nulle dans la conf (refs #7063) --- .../fr/ifremer/tutti/TuttiConfigurationOption.java | 4 ++-- .../main/java/fr/ifremer/tutti/util/BeepFrequency.java | 4 ++-- .../ui/swing/content/config/TuttiConfigUIHandler.java | 11 +++++++++-- .../java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java | 18 +++++++++++------- 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java index 836d2d9..5b478f8 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java @@ -608,14 +608,14 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { ICHTYOMETER_DATA_RECEPTION_BEEP_FREQUENCY( "tutti.ichtyometer.dataBeepFrequency", n("tutti.config.option.dataBeepFrequency.description"), - BeepFrequency.A2.toString(), + null, BeepFrequency.class, false ), ICHTYOMETER_ERROR_RECEPTION_BEEP_FREQUENCY( "tutti.ichtyometer.errorBeepFrequency", n("tutti.config.option.errorBeepFrequency.description"), - BeepFrequency.A1.toString(), + null, BeepFrequency.class, false ); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java index c298836..e2b3e68 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java @@ -21,13 +21,13 @@ public enum BeepFrequency { F2(2793), G2(3135); - private int frequency; + private final int frequency; BeepFrequency(int frequency) { this.frequency = frequency; } - public int getFrequency() { + public Integer getFrequency() { return frequency; } } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java index 2af8379..1d6668d 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java @@ -31,6 +31,7 @@ import fr.ifremer.tutti.ui.swing.content.config.actions.ReloadTuttiAction; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.editor.TuttiLocationTableCell; import fr.ifremer.tutti.ui.swing.util.editor.VesselTableCell; +import fr.ifremer.tutti.util.BeepFrequency; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.config.ConfigCategoryUI; import jaxx.runtime.swing.config.ConfigUI; @@ -138,13 +139,19 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .setOptionShortLabel(t("tutti.config.option.ui.fullBluetoothScan.shortLabel")) .addOption(TuttiConfigurationOption.ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT) - .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerMaximumNumberOfAttemptToConnect.shortLabel")) + .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerMaximumNumberOfAttemptToConnect.shortLabel")); - .addOption(TuttiConfigurationOption.ICHTYOMETER_DATA_RECEPTION_BEEP_FREQUENCY) + EnumEditor<BeepFrequency> beepFrequencyEnumEditor = EnumEditor.newEditor(BeepFrequency.class); + beepFrequencyEnumEditor.insertItemAt(null, 0); + DefaultCellEditor beepFrequencyUnitTableCellEditor = new DefaultCellEditor(beepFrequencyEnumEditor); + + helper.addOption(TuttiConfigurationOption.ICHTYOMETER_DATA_RECEPTION_BEEP_FREQUENCY) .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerDataBeepFrequency.shortLabel")) + .setOptionEditor(beepFrequencyUnitTableCellEditor) .addOption(TuttiConfigurationOption.ICHTYOMETER_ERROR_RECEPTION_BEEP_FREQUENCY) .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerErrorBeepFrequency.shortLabel")) + .setOptionEditor(beepFrequencyUnitTableCellEditor) .addOption(TuttiConfigurationOption.SHOW_BATCH_LOG) .setOptionShortLabel(t("tutti.config.option.ui.showBatchLog.shortLabel")) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java index b4ef694..c63bb26 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java @@ -25,14 +25,18 @@ public class SoundUtil { } public static void beep(BeepFrequency beepFrequency, int number) { - try { - for (int i = 0; i < number; i++) { - tone(beepFrequency.getFrequency(), 500, 1.0); - } + + if (beepFrequency != null) { + + try { + for (int i = 0; i < number; i++) { + tone(beepFrequency.getFrequency(), 500, 1.0); + } - } catch (LineUnavailableException e) { - if (log.isErrorEnabled()) { - log.error("Error while playing a beep", e); + } catch (LineUnavailableException e) { + if (log.isErrorEnabled()) { + log.error("Error while playing a beep", e); + } } } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git commit 01ef1c5e92f2a1874c64aafb118d32851eabf3a6 Author: Kevin Morin <morin@codelutin.com> Date: Thu Jan 14 18:45:59 2016 +0100 ajout de la lecture des nombres mais il reste un problème de lecture de certains nombres (2000 cm par exemple, mais je ne sais pas pourquoi) (refs #7063) --- .../src/main/filtered-resources/log4j.properties | 1 + .../frequency/SpeciesFrequencyUIHandler.java | 2 - .../actions/ApplySpeciesFrequencyRafaleAction.java | 8 +- .../fr/ifremer/tutti/ui/swing/util/SoundUtil.java | 100 ++++++++++++++++++++- tutti-ui-swing/src/main/resources/sounds/,.wav | Bin 0 -> 29038 bytes tutti-ui-swing/src/main/resources/sounds/0.wav | Bin 0 -> 21626 bytes tutti-ui-swing/src/main/resources/sounds/1.wav | Bin 0 -> 9636 bytes tutti-ui-swing/src/main/resources/sounds/10.wav | Bin 0 -> 20536 bytes tutti-ui-swing/src/main/resources/sounds/100.wav | Bin 0 -> 14214 bytes tutti-ui-swing/src/main/resources/sounds/1000.wav | Bin 0 -> 17048 bytes tutti-ui-swing/src/main/resources/sounds/11.wav | Bin 0 -> 15086 bytes tutti-ui-swing/src/main/resources/sounds/12.wav | Bin 0 -> 19010 bytes tutti-ui-swing/src/main/resources/sounds/13.wav | Bin 0 -> 22280 bytes tutti-ui-swing/src/main/resources/sounds/14.wav | Bin 0 -> 30564 bytes tutti-ui-swing/src/main/resources/sounds/15.wav | Bin 0 -> 21844 bytes tutti-ui-swing/src/main/resources/sounds/16.wav | Bin 0 -> 20536 bytes tutti-ui-swing/src/main/resources/sounds/17.wav | Bin 0 -> 29910 bytes tutti-ui-swing/src/main/resources/sounds/18.wav | Bin 0 -> 30782 bytes tutti-ui-swing/src/main/resources/sounds/19.wav | Bin 0 -> 31872 bytes tutti-ui-swing/src/main/resources/sounds/2.wav | Bin 0 -> 12252 bytes tutti-ui-swing/src/main/resources/sounds/20.wav | Bin 0 -> 12252 bytes tutti-ui-swing/src/main/resources/sounds/21.wav | Bin 0 -> 25986 bytes tutti-ui-swing/src/main/resources/sounds/22.wav | Bin 0 -> 24242 bytes tutti-ui-swing/src/main/resources/sounds/23.wav | Bin 0 -> 26640 bytes tutti-ui-swing/src/main/resources/sounds/24.wav | Bin 0 -> 31218 bytes tutti-ui-swing/src/main/resources/sounds/25.wav | Bin 0 -> 34270 bytes tutti-ui-swing/src/main/resources/sounds/26.wav | Bin 0 -> 33398 bytes tutti-ui-swing/src/main/resources/sounds/27.wav | Bin 0 -> 32308 bytes tutti-ui-swing/src/main/resources/sounds/28.wav | Bin 0 -> 31654 bytes tutti-ui-swing/src/main/resources/sounds/29.wav | Bin 0 -> 34052 bytes tutti-ui-swing/src/main/resources/sounds/3.wav | Bin 0 -> 17048 bytes tutti-ui-swing/src/main/resources/sounds/30.wav | Bin 0 -> 24896 bytes tutti-ui-swing/src/main/resources/sounds/31.wav | Bin 0 -> 30564 bytes tutti-ui-swing/src/main/resources/sounds/32.wav | Bin 0 -> 26640 bytes tutti-ui-swing/src/main/resources/sounds/33.wav | Bin 0 -> 28384 bytes tutti-ui-swing/src/main/resources/sounds/34.wav | Bin 0 -> 32962 bytes tutti-ui-swing/src/main/resources/sounds/35.wav | Bin 0 -> 36014 bytes tutti-ui-swing/src/main/resources/sounds/36.wav | Bin 0 -> 35142 bytes tutti-ui-swing/src/main/resources/sounds/37.wav | Bin 0 -> 34270 bytes tutti-ui-swing/src/main/resources/sounds/38.wav | Bin 0 -> 33398 bytes tutti-ui-swing/src/main/resources/sounds/39.wav | Bin 0 -> 35796 bytes tutti-ui-swing/src/main/resources/sounds/4.wav | Bin 0 -> 19228 bytes tutti-ui-swing/src/main/resources/sounds/40.wav | Bin 0 -> 27948 bytes tutti-ui-swing/src/main/resources/sounds/41.wav | Bin 0 -> 33616 bytes tutti-ui-swing/src/main/resources/sounds/42.wav | Bin 0 -> 29692 bytes tutti-ui-swing/src/main/resources/sounds/43.wav | Bin 0 -> 31436 bytes tutti-ui-swing/src/main/resources/sounds/44.wav | Bin 0 -> 36014 bytes tutti-ui-swing/src/main/resources/sounds/45.wav | Bin 0 -> 39066 bytes tutti-ui-swing/src/main/resources/sounds/46.wav | Bin 0 -> 38412 bytes tutti-ui-swing/src/main/resources/sounds/47.wav | Bin 0 -> 37322 bytes tutti-ui-swing/src/main/resources/sounds/48.wav | Bin 0 -> 36450 bytes tutti-ui-swing/src/main/resources/sounds/49.wav | Bin 0 -> 38848 bytes tutti-ui-swing/src/main/resources/sounds/5.wav | Bin 0 -> 23588 bytes tutti-ui-swing/src/main/resources/sounds/50.wav | Bin 0 -> 33180 bytes tutti-ui-swing/src/main/resources/sounds/51.wav | Bin 0 -> 36450 bytes tutti-ui-swing/src/main/resources/sounds/52.wav | Bin 0 -> 32526 bytes tutti-ui-swing/src/main/resources/sounds/53.wav | Bin 0 -> 34270 bytes tutti-ui-swing/src/main/resources/sounds/54.wav | Bin 0 -> 38848 bytes tutti-ui-swing/src/main/resources/sounds/55.wav | Bin 0 -> 42118 bytes tutti-ui-swing/src/main/resources/sounds/56.wav | Bin 0 -> 41246 bytes tutti-ui-swing/src/main/resources/sounds/57.wav | Bin 0 -> 40156 bytes tutti-ui-swing/src/main/resources/sounds/58.wav | Bin 0 -> 39284 bytes tutti-ui-swing/src/main/resources/sounds/59.wav | Bin 0 -> 41682 bytes tutti-ui-swing/src/main/resources/sounds/6.wav | Bin 0 -> 22280 bytes tutti-ui-swing/src/main/resources/sounds/60.wav | Bin 0 -> 35578 bytes tutti-ui-swing/src/main/resources/sounds/61.wav | Bin 0 -> 38630 bytes tutti-ui-swing/src/main/resources/sounds/62.wav | Bin 0 -> 34706 bytes tutti-ui-swing/src/main/resources/sounds/63.wav | Bin 0 -> 36232 bytes tutti-ui-swing/src/main/resources/sounds/64.wav | Bin 0 -> 41028 bytes tutti-ui-swing/src/main/resources/sounds/65.wav | Bin 0 -> 44080 bytes tutti-ui-swing/src/main/resources/sounds/66.wav | Bin 0 -> 43208 bytes tutti-ui-swing/src/main/resources/sounds/67.wav | Bin 0 -> 42118 bytes tutti-ui-swing/src/main/resources/sounds/68.wav | Bin 0 -> 41464 bytes tutti-ui-swing/src/main/resources/sounds/69.wav | Bin 0 -> 43644 bytes tutti-ui-swing/src/main/resources/sounds/7.wav | Bin 0 -> 21626 bytes tutti-ui-swing/src/main/resources/sounds/70.wav | Bin 0 -> 41900 bytes tutti-ui-swing/src/main/resources/sounds/71.wav | Bin 0 -> 42772 bytes tutti-ui-swing/src/main/resources/sounds/72.wav | Bin 0 -> 40810 bytes tutti-ui-swing/src/main/resources/sounds/73.wav | Bin 0 -> 41682 bytes tutti-ui-swing/src/main/resources/sounds/74.wav | Bin 0 -> 51710 bytes tutti-ui-swing/src/main/resources/sounds/75.wav | Bin 0 -> 43644 bytes tutti-ui-swing/src/main/resources/sounds/76.wav | Bin 0 -> 41028 bytes tutti-ui-swing/src/main/resources/sounds/77.wav | Bin 0 -> 50402 bytes tutti-ui-swing/src/main/resources/sounds/78.wav | Bin 0 -> 51056 bytes tutti-ui-swing/src/main/resources/sounds/79.wav | Bin 0 -> 52146 bytes tutti-ui-swing/src/main/resources/sounds/8.wav | Bin 0 -> 17484 bytes tutti-ui-swing/src/main/resources/sounds/80.wav | Bin 0 -> 28166 bytes tutti-ui-swing/src/main/resources/sounds/81.wav | Bin 0 -> 35360 bytes tutti-ui-swing/src/main/resources/sounds/82.wav | Bin 0 -> 34270 bytes tutti-ui-swing/src/main/resources/sounds/83.wav | Bin 0 -> 38848 bytes tutti-ui-swing/src/main/resources/sounds/84.wav | Bin 0 -> 43862 bytes tutti-ui-swing/src/main/resources/sounds/85.wav | Bin 0 -> 46696 bytes tutti-ui-swing/src/main/resources/sounds/86.wav | Bin 0 -> 46042 bytes tutti-ui-swing/src/main/resources/sounds/87.wav | Bin 0 -> 44734 bytes tutti-ui-swing/src/main/resources/sounds/88.wav | Bin 0 -> 39938 bytes tutti-ui-swing/src/main/resources/sounds/89.wav | Bin 0 -> 42554 bytes tutti-ui-swing/src/main/resources/sounds/9.wav | Bin 0 -> 20972 bytes tutti-ui-swing/src/main/resources/sounds/90.wav | Bin 0 -> 42118 bytes tutti-ui-swing/src/main/resources/sounds/91.wav | Bin 0 -> 40592 bytes tutti-ui-swing/src/main/resources/sounds/92.wav | Bin 0 -> 40592 bytes tutti-ui-swing/src/main/resources/sounds/93.wav | Bin 0 -> 44080 bytes tutti-ui-swing/src/main/resources/sounds/94.wav | Bin 0 -> 54108 bytes tutti-ui-swing/src/main/resources/sounds/95.wav | Bin 0 -> 45606 bytes tutti-ui-swing/src/main/resources/sounds/96.wav | Bin 0 -> 43644 bytes tutti-ui-swing/src/main/resources/sounds/97.wav | Bin 0 -> 51492 bytes tutti-ui-swing/src/main/resources/sounds/98.wav | Bin 0 -> 52364 bytes tutti-ui-swing/src/main/resources/sounds/99.wav | Bin 0 -> 53454 bytes tutti-ui-swing/src/main/resources/sounds/cm.wav | Bin 0 -> 37322 bytes tutti-ui-swing/src/main/resources/sounds/mm.wav | Bin 0 -> 32090 bytes .../fr/ifremer/tutti/ui/swing/SoundUtilTest.java | 29 ++++++ tutti-ui-swing/src/test/resources/log4j.properties | 2 + 111 files changed, 137 insertions(+), 5 deletions(-) diff --git a/tutti-ui-swing/src/main/filtered-resources/log4j.properties b/tutti-ui-swing/src/main/filtered-resources/log4j.properties index 0549718..a8f69d0 100644 --- a/tutti-ui-swing/src/main/filtered-resources/log4j.properties +++ b/tutti-ui-swing/src/main/filtered-resources/log4j.properties @@ -31,6 +31,7 @@ log4j.appender.stdout.layout.ConversionPattern=[%20t] %d{ISO8601} %5p (%c:%L) - # tutti levels log4j.logger.fr.ifremer=INFO +log4j.logger.fr.ifremer.tutti.ui.swing.util.SoundUtil=DEBUG # Keep this one to Info to show batch tree log4j.logger.fr.ifremer.tutti.persistence.service.util.BatchTreeHelper=INFO log4j.logger.fr.ifremer.tutti.service.toconfirmreport=DEBUG diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index 126041a..ca15e43 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -651,8 +651,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci protected void consumeFeedRecord(FeedReaderMeasureRecord record) { if (record.isValid()) { - SoundUtil.beep(getConfig().getIchtyometerDataReceptionBeepFrequency()); - String unit = getModel().getLengthStepCaracteristicUnit(); // board measurements are in mm diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java index 0e06b90..71d4d12 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java @@ -32,6 +32,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.Spe import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIModel; +import fr.ifremer.tutti.ui.swing.util.SoundUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; @@ -110,10 +111,13 @@ public class ApplySpeciesFrequencyRafaleAction { ui.getTable().scrollRowToVisible(rowIndex); - if (fromIchtyometer) { +// if (fromIchtyometer) { String unit = model.getLengthStepCaracteristicUnit(); handler.showInformationMessage(t("tutti.editSpeciesFrequencies.addMeasure", step, aroundLengthStep, unit)); - } + + SoundUtil.beep(handler.getConfig().getIchtyometerDataReceptionBeepFrequency()); + SoundUtil.readNumber(aroundLengthStep, unit); +// } JXTable logsTable = ui.getLogsTable(); SpeciesFrequencyLogsTableModel logsTableModel = (SpeciesFrequencyLogsTableModel) logsTable.getModel(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java index c63bb26..fd920d7 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java @@ -5,9 +5,18 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.Clip; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.SourceDataLine; +import javax.sound.sampled.UnsupportedAudioFileException; +import java.io.IOException; +import java.io.InputStream; +import java.io.SequenceInputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; /** * @author Kevin Morin (Code Lutin) @@ -18,6 +27,8 @@ public class SoundUtil { /** Logger. */ private static final Log log = LogFactory.getLog(SoundUtil.class); + public static String SOUNDS_DIRECTORY = "/sounds"; + public static float SAMPLE_RATE = 8000f; public static void beep(BeepFrequency beepFrequency) { @@ -25,7 +36,7 @@ public class SoundUtil { } public static void beep(BeepFrequency beepFrequency, int number) { - + if (beepFrequency != null) { try { @@ -61,4 +72,91 @@ public class SoundUtil { sdl.close(); } + public static void readNumber(double number, String unit) { + + try { + + int thousands = (int) (number / 1000); + int hundreds = (int) (number % 1000) / 100; + int tensAndUnits = (int) number % 100; + int decimal = (int) (number * 10) % 10; + + List<AudioInputStream> audioInputStreams = new ArrayList<>(); + long length = 0; + length += addSound(audioInputStreams, thousands, 1000); + length += addSound(audioInputStreams, hundreds, 100); + if (tensAndUnits != 0 || thousands == 0 && hundreds == 0) { + length += addSound(audioInputStreams, tensAndUnits); + } + if (decimal > 0) { + length += addSound(audioInputStreams, ","); + length += addSound(audioInputStreams, decimal); + } + length += addSound(audioInputStreams, unit); + + if (!audioInputStreams.isEmpty()) { + + AudioFormat audioFormat = audioInputStreams.get(0).getFormat(); + + InputStream inputStream = new SequenceInputStream(Collections.enumeration(audioInputStreams)); + + Clip clip = AudioSystem.getClip(); + AudioInputStream appendedFiles = new AudioInputStream(inputStream, audioFormat, length); + clip.open(appendedFiles); + clip.start(); + } + + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Error while reading " + number + " " + unit, e); + } + } + } + + protected static long addSound(List<AudioInputStream> inputStreams, int number) throws IOException, UnsupportedAudioFileException { + return addSound(inputStreams, number, 1); + } + + protected static long addSound(List<AudioInputStream> inputStreams, int number, int suffix) throws IOException, UnsupportedAudioFileException { + long length = 0; + + if (number > 1 || suffix == 1) { + if (log.isDebugEnabled()) { + log.debug("add " + number + ".wav"); + } + AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(SoundUtil.class.getResource(SOUNDS_DIRECTORY + "/" + number + ".wav")); + inputStreams.add(audioInputStream); + if (log.isDebugEnabled()) { + log.debug("--> " + audioInputStream.getFrameLength()); + } + length += audioInputStream.getFrameLength(); + } + + if (number > 1 && suffix > 1) { + if (log.isDebugEnabled()) { + log.debug("add " + suffix + ".wav"); + } + AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(SoundUtil.class.getResource(SOUNDS_DIRECTORY + "/" + suffix + ".wav")); + inputStreams.add(audioInputStream); + if (log.isDebugEnabled()) { + log.debug("--> " + audioInputStream.getFrameLength()); + } + length += audioInputStream.getFrameLength(); + } + + return length; + } + + protected static long addSound(List<AudioInputStream> inputStreams, String name) throws IOException, UnsupportedAudioFileException { + if (log.isDebugEnabled()) { + log.debug("add " + name + ".wav"); + } + AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(SoundUtil.class.getResource(SOUNDS_DIRECTORY + "/" + name + ".wav")); + inputStreams.add(audioInputStream); + if (log.isDebugEnabled()) { + log.debug("--> " + audioInputStream.getFrameLength()); + } + return audioInputStream.getFrameLength(); + } + } diff --git a/tutti-ui-swing/src/main/resources/sounds/,.wav b/tutti-ui-swing/src/main/resources/sounds/,.wav new file mode 100755 index 0000000..e82e912 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/,.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/0.wav b/tutti-ui-swing/src/main/resources/sounds/0.wav new file mode 100755 index 0000000..33b7256 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/0.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/1.wav b/tutti-ui-swing/src/main/resources/sounds/1.wav new file mode 100755 index 0000000..828aa03 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/1.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/10.wav b/tutti-ui-swing/src/main/resources/sounds/10.wav new file mode 100755 index 0000000..896dd3e Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/10.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/100.wav b/tutti-ui-swing/src/main/resources/sounds/100.wav new file mode 100755 index 0000000..73522a7 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/100.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/1000.wav b/tutti-ui-swing/src/main/resources/sounds/1000.wav new file mode 100755 index 0000000..96f3a72 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/1000.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/11.wav b/tutti-ui-swing/src/main/resources/sounds/11.wav new file mode 100755 index 0000000..cabd3b5 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/11.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/12.wav b/tutti-ui-swing/src/main/resources/sounds/12.wav new file mode 100755 index 0000000..6f7239b Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/12.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/13.wav b/tutti-ui-swing/src/main/resources/sounds/13.wav new file mode 100755 index 0000000..7a2bcf8 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/13.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/14.wav b/tutti-ui-swing/src/main/resources/sounds/14.wav new file mode 100755 index 0000000..2c61235 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/14.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/15.wav b/tutti-ui-swing/src/main/resources/sounds/15.wav new file mode 100755 index 0000000..1526b19 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/15.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/16.wav b/tutti-ui-swing/src/main/resources/sounds/16.wav new file mode 100755 index 0000000..65dc652 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/16.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/17.wav b/tutti-ui-swing/src/main/resources/sounds/17.wav new file mode 100755 index 0000000..491f828 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/17.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/18.wav b/tutti-ui-swing/src/main/resources/sounds/18.wav new file mode 100755 index 0000000..00f2719 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/18.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/19.wav b/tutti-ui-swing/src/main/resources/sounds/19.wav new file mode 100755 index 0000000..086a9ad Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/19.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/2.wav b/tutti-ui-swing/src/main/resources/sounds/2.wav new file mode 100755 index 0000000..ab3b827 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/2.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/20.wav b/tutti-ui-swing/src/main/resources/sounds/20.wav new file mode 100755 index 0000000..5e11645 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/20.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/21.wav b/tutti-ui-swing/src/main/resources/sounds/21.wav new file mode 100755 index 0000000..650829c Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/21.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/22.wav b/tutti-ui-swing/src/main/resources/sounds/22.wav new file mode 100755 index 0000000..272aa65 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/22.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/23.wav b/tutti-ui-swing/src/main/resources/sounds/23.wav new file mode 100755 index 0000000..41cdc1f Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/23.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/24.wav b/tutti-ui-swing/src/main/resources/sounds/24.wav new file mode 100755 index 0000000..1c986dc Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/24.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/25.wav b/tutti-ui-swing/src/main/resources/sounds/25.wav new file mode 100755 index 0000000..5214789 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/25.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/26.wav b/tutti-ui-swing/src/main/resources/sounds/26.wav new file mode 100755 index 0000000..dec60ab Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/26.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/27.wav b/tutti-ui-swing/src/main/resources/sounds/27.wav new file mode 100755 index 0000000..1068ef5 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/27.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/28.wav b/tutti-ui-swing/src/main/resources/sounds/28.wav new file mode 100755 index 0000000..20c86c3 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/28.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/29.wav b/tutti-ui-swing/src/main/resources/sounds/29.wav new file mode 100755 index 0000000..0147e86 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/29.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/3.wav b/tutti-ui-swing/src/main/resources/sounds/3.wav new file mode 100755 index 0000000..a5fe16f Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/3.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/30.wav b/tutti-ui-swing/src/main/resources/sounds/30.wav new file mode 100755 index 0000000..199352a Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/30.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/31.wav b/tutti-ui-swing/src/main/resources/sounds/31.wav new file mode 100755 index 0000000..2b91532 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/31.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/32.wav b/tutti-ui-swing/src/main/resources/sounds/32.wav new file mode 100755 index 0000000..fbdbcee Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/32.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/33.wav b/tutti-ui-swing/src/main/resources/sounds/33.wav new file mode 100755 index 0000000..d06f200 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/33.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/34.wav b/tutti-ui-swing/src/main/resources/sounds/34.wav new file mode 100755 index 0000000..37e5529 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/34.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/35.wav b/tutti-ui-swing/src/main/resources/sounds/35.wav new file mode 100755 index 0000000..173ad3f Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/35.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/36.wav b/tutti-ui-swing/src/main/resources/sounds/36.wav new file mode 100755 index 0000000..6b74c97 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/36.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/37.wav b/tutti-ui-swing/src/main/resources/sounds/37.wav new file mode 100755 index 0000000..65dedc4 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/37.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/38.wav b/tutti-ui-swing/src/main/resources/sounds/38.wav new file mode 100755 index 0000000..ceb077e Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/38.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/39.wav b/tutti-ui-swing/src/main/resources/sounds/39.wav new file mode 100755 index 0000000..bfdf7eb Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/39.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/4.wav b/tutti-ui-swing/src/main/resources/sounds/4.wav new file mode 100755 index 0000000..985eca8 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/4.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/40.wav b/tutti-ui-swing/src/main/resources/sounds/40.wav new file mode 100755 index 0000000..c112b0d Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/40.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/41.wav b/tutti-ui-swing/src/main/resources/sounds/41.wav new file mode 100755 index 0000000..29b150a Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/41.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/42.wav b/tutti-ui-swing/src/main/resources/sounds/42.wav new file mode 100755 index 0000000..10d2379 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/42.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/43.wav b/tutti-ui-swing/src/main/resources/sounds/43.wav new file mode 100755 index 0000000..ff1dcc3 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/43.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/44.wav b/tutti-ui-swing/src/main/resources/sounds/44.wav new file mode 100755 index 0000000..743277b Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/44.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/45.wav b/tutti-ui-swing/src/main/resources/sounds/45.wav new file mode 100755 index 0000000..46adc3a Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/45.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/46.wav b/tutti-ui-swing/src/main/resources/sounds/46.wav new file mode 100755 index 0000000..17bf1f8 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/46.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/47.wav b/tutti-ui-swing/src/main/resources/sounds/47.wav new file mode 100755 index 0000000..6b46478 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/47.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/48.wav b/tutti-ui-swing/src/main/resources/sounds/48.wav new file mode 100755 index 0000000..deac085 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/48.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/49.wav b/tutti-ui-swing/src/main/resources/sounds/49.wav new file mode 100755 index 0000000..b144694 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/49.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/5.wav b/tutti-ui-swing/src/main/resources/sounds/5.wav new file mode 100755 index 0000000..e432e32 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/5.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/50.wav b/tutti-ui-swing/src/main/resources/sounds/50.wav new file mode 100755 index 0000000..58be65d Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/50.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/51.wav b/tutti-ui-swing/src/main/resources/sounds/51.wav new file mode 100755 index 0000000..3124b46 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/51.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/52.wav b/tutti-ui-swing/src/main/resources/sounds/52.wav new file mode 100755 index 0000000..b9cd186 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/52.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/53.wav b/tutti-ui-swing/src/main/resources/sounds/53.wav new file mode 100755 index 0000000..3024d7b Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/53.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/54.wav b/tutti-ui-swing/src/main/resources/sounds/54.wav new file mode 100755 index 0000000..fad1eb7 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/54.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/55.wav b/tutti-ui-swing/src/main/resources/sounds/55.wav new file mode 100755 index 0000000..4ec36c9 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/55.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/56.wav b/tutti-ui-swing/src/main/resources/sounds/56.wav new file mode 100755 index 0000000..ee196aa Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/56.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/57.wav b/tutti-ui-swing/src/main/resources/sounds/57.wav new file mode 100755 index 0000000..730f210 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/57.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/58.wav b/tutti-ui-swing/src/main/resources/sounds/58.wav new file mode 100755 index 0000000..66f1c65 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/58.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/59.wav b/tutti-ui-swing/src/main/resources/sounds/59.wav new file mode 100755 index 0000000..6cbd44d Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/59.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/6.wav b/tutti-ui-swing/src/main/resources/sounds/6.wav new file mode 100755 index 0000000..fb48bda Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/6.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/60.wav b/tutti-ui-swing/src/main/resources/sounds/60.wav new file mode 100755 index 0000000..afc0202 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/60.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/61.wav b/tutti-ui-swing/src/main/resources/sounds/61.wav new file mode 100755 index 0000000..6c194ef Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/61.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/62.wav b/tutti-ui-swing/src/main/resources/sounds/62.wav new file mode 100755 index 0000000..4d0f43c Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/62.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/63.wav b/tutti-ui-swing/src/main/resources/sounds/63.wav new file mode 100755 index 0000000..76fcc19 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/63.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/64.wav b/tutti-ui-swing/src/main/resources/sounds/64.wav new file mode 100755 index 0000000..fd3d869 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/64.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/65.wav b/tutti-ui-swing/src/main/resources/sounds/65.wav new file mode 100755 index 0000000..96d4e4d Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/65.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/66.wav b/tutti-ui-swing/src/main/resources/sounds/66.wav new file mode 100755 index 0000000..f9c1a4f Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/66.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/67.wav b/tutti-ui-swing/src/main/resources/sounds/67.wav new file mode 100755 index 0000000..2252446 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/67.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/68.wav b/tutti-ui-swing/src/main/resources/sounds/68.wav new file mode 100755 index 0000000..9abf613 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/68.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/69.wav b/tutti-ui-swing/src/main/resources/sounds/69.wav new file mode 100755 index 0000000..cec146a Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/69.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/7.wav b/tutti-ui-swing/src/main/resources/sounds/7.wav new file mode 100755 index 0000000..c7552ee Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/7.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/70.wav b/tutti-ui-swing/src/main/resources/sounds/70.wav new file mode 100755 index 0000000..bd6ae0b Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/70.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/71.wav b/tutti-ui-swing/src/main/resources/sounds/71.wav new file mode 100755 index 0000000..65add52 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/71.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/72.wav b/tutti-ui-swing/src/main/resources/sounds/72.wav new file mode 100755 index 0000000..41afbfb Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/72.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/73.wav b/tutti-ui-swing/src/main/resources/sounds/73.wav new file mode 100755 index 0000000..07ccca1 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/73.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/74.wav b/tutti-ui-swing/src/main/resources/sounds/74.wav new file mode 100755 index 0000000..f8c7bf3 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/74.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/75.wav b/tutti-ui-swing/src/main/resources/sounds/75.wav new file mode 100755 index 0000000..ffea393 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/75.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/76.wav b/tutti-ui-swing/src/main/resources/sounds/76.wav new file mode 100755 index 0000000..6df85a3 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/76.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/77.wav b/tutti-ui-swing/src/main/resources/sounds/77.wav new file mode 100755 index 0000000..5791596 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/77.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/78.wav b/tutti-ui-swing/src/main/resources/sounds/78.wav new file mode 100755 index 0000000..1ca349b Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/78.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/79.wav b/tutti-ui-swing/src/main/resources/sounds/79.wav new file mode 100755 index 0000000..1f292be Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/79.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/8.wav b/tutti-ui-swing/src/main/resources/sounds/8.wav new file mode 100755 index 0000000..5aece0c Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/8.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/80.wav b/tutti-ui-swing/src/main/resources/sounds/80.wav new file mode 100755 index 0000000..794318f Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/80.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/81.wav b/tutti-ui-swing/src/main/resources/sounds/81.wav new file mode 100755 index 0000000..00b3582 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/81.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/82.wav b/tutti-ui-swing/src/main/resources/sounds/82.wav new file mode 100755 index 0000000..1b69690 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/82.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/83.wav b/tutti-ui-swing/src/main/resources/sounds/83.wav new file mode 100755 index 0000000..955e335 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/83.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/84.wav b/tutti-ui-swing/src/main/resources/sounds/84.wav new file mode 100755 index 0000000..2efb67b Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/84.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/85.wav b/tutti-ui-swing/src/main/resources/sounds/85.wav new file mode 100755 index 0000000..e1d2f7a Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/85.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/86.wav b/tutti-ui-swing/src/main/resources/sounds/86.wav new file mode 100755 index 0000000..95019cf Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/86.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/87.wav b/tutti-ui-swing/src/main/resources/sounds/87.wav new file mode 100755 index 0000000..7bb8c59 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/87.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/88.wav b/tutti-ui-swing/src/main/resources/sounds/88.wav new file mode 100755 index 0000000..3ce4d16 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/88.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/89.wav b/tutti-ui-swing/src/main/resources/sounds/89.wav new file mode 100755 index 0000000..d091f45 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/89.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/9.wav b/tutti-ui-swing/src/main/resources/sounds/9.wav new file mode 100755 index 0000000..7b667c5 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/9.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/90.wav b/tutti-ui-swing/src/main/resources/sounds/90.wav new file mode 100755 index 0000000..c74319b Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/90.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/91.wav b/tutti-ui-swing/src/main/resources/sounds/91.wav new file mode 100755 index 0000000..945e94c Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/91.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/92.wav b/tutti-ui-swing/src/main/resources/sounds/92.wav new file mode 100755 index 0000000..ef0fbd7 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/92.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/93.wav b/tutti-ui-swing/src/main/resources/sounds/93.wav new file mode 100755 index 0000000..9763364 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/93.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/94.wav b/tutti-ui-swing/src/main/resources/sounds/94.wav new file mode 100755 index 0000000..ba38c0f Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/94.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/95.wav b/tutti-ui-swing/src/main/resources/sounds/95.wav new file mode 100755 index 0000000..1f70e5b Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/95.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/96.wav b/tutti-ui-swing/src/main/resources/sounds/96.wav new file mode 100755 index 0000000..60135fd Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/96.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/97.wav b/tutti-ui-swing/src/main/resources/sounds/97.wav new file mode 100755 index 0000000..b77029a Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/97.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/98.wav b/tutti-ui-swing/src/main/resources/sounds/98.wav new file mode 100755 index 0000000..ca997e3 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/98.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/99.wav b/tutti-ui-swing/src/main/resources/sounds/99.wav new file mode 100755 index 0000000..d2eda5d Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/99.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/cm.wav b/tutti-ui-swing/src/main/resources/sounds/cm.wav new file mode 100755 index 0000000..a8e0378 Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/cm.wav differ diff --git a/tutti-ui-swing/src/main/resources/sounds/mm.wav b/tutti-ui-swing/src/main/resources/sounds/mm.wav new file mode 100755 index 0000000..72748ba Binary files /dev/null and b/tutti-ui-swing/src/main/resources/sounds/mm.wav differ diff --git a/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java b/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java new file mode 100644 index 0000000..c299fca --- /dev/null +++ b/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java @@ -0,0 +1,29 @@ +package fr.ifremer.tutti.ui.swing; + +import fr.ifremer.tutti.ui.swing.util.SoundUtil; +import org.junit.Test; + +/** + * @author Kevin Morin (Code Lutin) + * @since x.x + */ +public class SoundUtilTest { + + @Test + public void testSound() throws InterruptedException { + SoundUtil.readNumber(1, "cm"); + Thread.sleep(3000); + SoundUtil.readNumber(2001, "cm"); + Thread.sleep(3000); + SoundUtil.readNumber(2300, "cm"); + Thread.sleep(3000); + SoundUtil.readNumber(2000.5, "cm"); + Thread.sleep(3000); + SoundUtil.readNumber(2000, "cm"); + Thread.sleep(3000); + SoundUtil.readNumber(200, "cm"); + Thread.sleep(3000); + SoundUtil.readNumber(201, "cm"); + Thread.sleep(3000); + } +} diff --git a/tutti-ui-swing/src/test/resources/log4j.properties b/tutti-ui-swing/src/test/resources/log4j.properties index 9cb12ce..8818d0d 100644 --- a/tutti-ui-swing/src/test/resources/log4j.properties +++ b/tutti-ui-swing/src/test/resources/log4j.properties @@ -31,3 +31,5 @@ log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c - %m%n # tutti levels log4j.logger.fr.ifremer=INFO + +log4j.logger.fr.ifremer.tutti.ui.swing.util.SoundUtil=DEBUG \ No newline at end of file -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git commit 108a2ef70edd63ff8a82ed30dc5dd7f524e5ffc6 Author: Kevin Morin <morin@codelutin.com> Date: Fri Jan 15 12:26:27 2016 +0100 correction de la lecture des voix (fixes #7063) --- .../actions/ApplySpeciesFrequencyRafaleAction.java | 4 +- .../fr/ifremer/tutti/ui/swing/util/SoundUtil.java | 93 ++++++++++++---------- .../fr/ifremer/tutti/ui/swing/SoundUtilTest.java | 2 + 3 files changed, 54 insertions(+), 45 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java index 71d4d12..4bf7da3 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java @@ -111,13 +111,13 @@ public class ApplySpeciesFrequencyRafaleAction { ui.getTable().scrollRowToVisible(rowIndex); -// if (fromIchtyometer) { + if (fromIchtyometer) { String unit = model.getLengthStepCaracteristicUnit(); handler.showInformationMessage(t("tutti.editSpeciesFrequencies.addMeasure", step, aroundLengthStep, unit)); SoundUtil.beep(handler.getConfig().getIchtyometerDataReceptionBeepFrequency()); SoundUtil.readNumber(aroundLengthStep, unit); -// } + } JXTable logsTable = ui.getLogsTable(); SpeciesFrequencyLogsTableModel logsTableModel = (SpeciesFrequencyLogsTableModel) logsTable.getModel(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java index fd920d7..dc5a3f8 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java @@ -7,15 +7,12 @@ import org.apache.commons.logging.LogFactory; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; -import javax.sound.sampled.Clip; +import javax.sound.sampled.DataLine; import javax.sound.sampled.LineUnavailableException; import javax.sound.sampled.SourceDataLine; import javax.sound.sampled.UnsupportedAudioFileException; import java.io.IOException; -import java.io.InputStream; -import java.io.SequenceInputStream; import java.util.ArrayList; -import java.util.Collections; import java.util.List; /** @@ -72,45 +69,64 @@ public class SoundUtil { sdl.close(); } - public static void readNumber(double number, String unit) { + public static synchronized void readNumber(final double number, final String unit) { - try { + new Thread(new Runnable() { - int thousands = (int) (number / 1000); - int hundreds = (int) (number % 1000) / 100; - int tensAndUnits = (int) number % 100; - int decimal = (int) (number * 10) % 10; + @Override + public void run() { - List<AudioInputStream> audioInputStreams = new ArrayList<>(); - long length = 0; - length += addSound(audioInputStreams, thousands, 1000); - length += addSound(audioInputStreams, hundreds, 100); - if (tensAndUnits != 0 || thousands == 0 && hundreds == 0) { - length += addSound(audioInputStreams, tensAndUnits); - } - if (decimal > 0) { - length += addSound(audioInputStreams, ","); - length += addSound(audioInputStreams, decimal); - } - length += addSound(audioInputStreams, unit); + try { - if (!audioInputStreams.isEmpty()) { + int thousands = (int) (number / 1000); + int hundreds = (int) (number % 1000) / 100; + int tensAndUnits = (int) number % 100; + int decimal = (int) (number * 10) % 10; - AudioFormat audioFormat = audioInputStreams.get(0).getFormat(); + List<AudioInputStream> audioInputStreams = new ArrayList<>(); - InputStream inputStream = new SequenceInputStream(Collections.enumeration(audioInputStreams)); + addSound(audioInputStreams, thousands, 1000); + addSound(audioInputStreams, hundreds, 100); + if (tensAndUnits != 0 || thousands == 0 && hundreds == 0) { + addSound(audioInputStreams, tensAndUnits); + } + if (decimal > 0) { + addSound(audioInputStreams, ","); + addSound(audioInputStreams, decimal); + } + addSound(audioInputStreams, unit); - Clip clip = AudioSystem.getClip(); - AudioInputStream appendedFiles = new AudioInputStream(inputStream, audioFormat, length); - clip.open(appendedFiles); - clip.start(); - } + if (!audioInputStreams.isEmpty()) { + + AudioFormat format = audioInputStreams.get(0).getFormat(); + DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); + SourceDataLine audioLine = (SourceDataLine) AudioSystem.getLine(info); + audioLine.open(format); + audioLine.start(); - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("Error while reading " + number + " " + unit, e); + byte[] bytesBuffer = new byte[4096]; + int bytesRead; + + while (!audioInputStreams.isEmpty()) { + AudioInputStream audioInputStream = audioInputStreams.remove(0); + while ((bytesRead = audioInputStream.read(bytesBuffer)) != -1) { + audioLine.write(bytesBuffer, 0, bytesRead); + } + audioInputStream.close(); + } + + audioLine.drain(); + audioLine.close(); + } + + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Error while reading " + number + " " + unit, e); + } + } } - } + + }).start(); } protected static long addSound(List<AudioInputStream> inputStreams, int number) throws IOException, UnsupportedAudioFileException { @@ -126,9 +142,6 @@ public class SoundUtil { } AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(SoundUtil.class.getResource(SOUNDS_DIRECTORY + "/" + number + ".wav")); inputStreams.add(audioInputStream); - if (log.isDebugEnabled()) { - log.debug("--> " + audioInputStream.getFrameLength()); - } length += audioInputStream.getFrameLength(); } @@ -138,9 +151,6 @@ public class SoundUtil { } AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(SoundUtil.class.getResource(SOUNDS_DIRECTORY + "/" + suffix + ".wav")); inputStreams.add(audioInputStream); - if (log.isDebugEnabled()) { - log.debug("--> " + audioInputStream.getFrameLength()); - } length += audioInputStream.getFrameLength(); } @@ -153,9 +163,6 @@ public class SoundUtil { } AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(SoundUtil.class.getResource(SOUNDS_DIRECTORY + "/" + name + ".wav")); inputStreams.add(audioInputStream); - if (log.isDebugEnabled()) { - log.debug("--> " + audioInputStream.getFrameLength()); - } return audioInputStream.getFrameLength(); } diff --git a/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java b/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java index c299fca..f8da83a 100644 --- a/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java +++ b/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java @@ -13,6 +13,8 @@ public class SoundUtilTest { public void testSound() throws InterruptedException { SoundUtil.readNumber(1, "cm"); Thread.sleep(3000); + SoundUtil.readNumber(35, "mm"); + Thread.sleep(3000); SoundUtil.readNumber(2001, "cm"); Thread.sleep(3000); SoundUtil.readNumber(2300, "cm"); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git commit c1520e919b272fc6160e0dd052bf98c305026653 Author: Kevin Morin <morin@codelutin.com> Date: Mon Jan 18 17:35:31 2016 +0100 ajout de l'option pour lire ou non les mesures et les bips (fixes #7063) --- .../java/fr/ifremer/tutti/TuttiConfiguration.java | 12 ++++++ .../fr/ifremer/tutti/TuttiConfigurationOption.java | 33 +++++++++++--- .../java/fr/ifremer/tutti/util/BeepFrequency.java | 2 +- .../i18n/tutti-persistence_en_GB.properties | 5 +++ .../i18n/tutti-persistence_fr_FR.properties | 7 ++- .../swing/content/config/TuttiConfigUIHandler.java | 50 ++++++++++++---------- .../frequency/SpeciesFrequencyUIHandler.java | 4 +- .../actions/ApplySpeciesFrequencyRafaleAction.java | 10 ++++- .../fr/ifremer/tutti/ui/swing/util/SoundUtil.java | 17 +++----- .../resources/i18n/tutti-ui-swing_en_GB.properties | 5 +++ .../resources/i18n/tutti-ui-swing_fr_FR.properties | 5 +++ 11 files changed, 106 insertions(+), 44 deletions(-) diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java index 550dc95..bed638f 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfiguration.java @@ -728,10 +728,22 @@ public class TuttiConfiguration extends ApplicationConfiguration { return applicationConfig.getOptionAsInt(TuttiConfigurationOption.ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT.getKey()); } + public Boolean isIchtyometerVoiceEnabled() { + return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.ICHTYOMETER_VOICE_ENABLED.getKey()); + } + + public Boolean isIchtyometerDataReceptionBeepEnabled() { + return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.ICHTYOMETER_DATA_RECEPTION_BEEP_ENABLED.getKey()); + } + public BeepFrequency getIchtyometerDataReceptionBeepFrequency() { return BeepFrequency.valueOf(applicationConfig.getOption(TuttiConfigurationOption.ICHTYOMETER_DATA_RECEPTION_BEEP_FREQUENCY.getKey())); } + public Boolean isIchtyometerErrorReceptionBeepEnabled() { + return applicationConfig.getOptionAsBoolean(TuttiConfigurationOption.ICHTYOMETER_ERROR_RECEPTION_BEEP_ENABLED.getKey()); + } + public BeepFrequency getIchtyometerErrorReceptionBeepFrequency() { return BeepFrequency.valueOf(applicationConfig.getOption(TuttiConfigurationOption.ICHTYOMETER_ERROR_RECEPTION_BEEP_FREQUENCY.getKey())); } diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java index 5b478f8..a126d5c 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/TuttiConfigurationOption.java @@ -605,17 +605,38 @@ public enum TuttiConfigurationOption implements ConfigOptionDef { int.class, false ), + ICHTYOMETER_VOICE_ENABLED( + "tutti.ichtyometer.voice.enabled", + n("tutti.config.option.ichtyometer.voice.enabled.description"), + "true", + Boolean.class, + false + ), + ICHTYOMETER_DATA_RECEPTION_BEEP_ENABLED( + "tutti.ichtyometer.beep.data.enabled", + n("tutti.config.option.ichtyometer.beep.data.enabled.description"), + "true", + Boolean.class, + false + ), ICHTYOMETER_DATA_RECEPTION_BEEP_FREQUENCY( - "tutti.ichtyometer.dataBeepFrequency", - n("tutti.config.option.dataBeepFrequency.description"), - null, + "tutti.ichtyometer.beep.data.frequency", + n("tutti.config.option.ichtyometer.beep.data.frequency.description"), + "A2", BeepFrequency.class, false ), + ICHTYOMETER_ERROR_RECEPTION_BEEP_ENABLED( + "tutti.ichtyometer.beep.error.enabled", + n("tutti.config.option.ichtyometer.beep.error.enabled.description"), + "true", + Boolean.class, + false + ), ICHTYOMETER_ERROR_RECEPTION_BEEP_FREQUENCY( - "tutti.ichtyometer.errorBeepFrequency", - n("tutti.config.option.errorBeepFrequency.description"), - null, + "tutti.ichtyometer.beep.error.frequency", + n("tutti.config.option.ichtyometer.beep.error.frequency.description"), + "A1", BeepFrequency.class, false ); diff --git a/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java b/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java index e2b3e68..1495b24 100644 --- a/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java +++ b/tutti-persistence/src/main/java/fr/ifremer/tutti/util/BeepFrequency.java @@ -27,7 +27,7 @@ public enum BeepFrequency { this.frequency = frequency; } - public Integer getFrequency() { + public int getFrequency() { return frequency; } } diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties index bb634eb..8d99326 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_en_GB.properties @@ -24,8 +24,13 @@ tutti.config.option.genericFormat.report.backup.directory.description= tutti.config.option.help.directory.description= tutti.config.option.i18n.directory.description= tutti.config.option.i18n.locale.description= +tutti.config.option.ichtyometer.beep.data.enabled.description= +tutti.config.option.ichtyometer.beep.data.frequency.description= +tutti.config.option.ichtyometer.beep.error.enabled.description= +tutti.config.option.ichtyometer.beep.error.frequency.description= tutti.config.option.ichtyometer.fullBluetoothScan.description= tutti.config.option.ichtyometer.maximumNumberOfAttemptToConnect.description= +tutti.config.option.ichtyometer.voice.enabled.description= tutti.config.option.inceptionYear.description= tutti.config.option.launch.mode.description= tutti.config.option.organizationName.description= diff --git a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties index 3a1fea2..62d30b6 100644 --- a/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties +++ b/tutti-persistence/src/main/resources/i18n/tutti-persistence_fr_FR.properties @@ -8,9 +8,7 @@ tutti.config.option.basedir.description=Répertoire principale tutti.config.option.cruiseId.description=Identifiant de la dernière campagne utilisée tutti.config.option.csv.separator.description=Caractère séparateur pour les import / export de fichier au format csv. tutti.config.option.data.directory.description=Répertoire de données de l'application. Vous pouvez utiliser l'expression ${tutti.data.directory} pour le référence dans d'autres propriétés de configuration (ex\: ${tutti.data.directory}/tmp). -tutti.config.option.dataBeepFrequency.description=Tonalité du bip lors de la réception de données de l'ichtyomètre tutti.config.option.db.import.skipBackup.description=Pour ne pas effectuer une sauvegarde avant un import de base -tutti.config.option.errorBeepFrequency.description=Tonalité du bip lors de la réception d'une erreur de l'ichtyomètre tutti.config.option.export.backup.directory.description=Répertoire où sont enregistrées les exports génériques tutti.config.option.export.countryId.description=L'id du pays à utiliser pour les exports (il s'agit de la valeur LOCATION.ID). tutti.config.option.genericFormat.import.maximumRowsInErrorPerFile.description=Nombre maximum de lignes en erreur possible par fichier lors de la validation de l'import générique @@ -19,8 +17,13 @@ tutti.config.option.genericFormat.report.backup.directory.description=Répertoir tutti.config.option.help.directory.description=Répertoire des fichiers d'aide tutti.config.option.i18n.directory.description=Répertoire des fichiers de traductions tutti.config.option.i18n.locale.description=Langue utilisée dans l'application +tutti.config.option.ichtyometer.beep.data.enabled.description=Pour activer ou non le bip à la réception de mesures +tutti.config.option.ichtyometer.beep.data.frequency.description=Tonalité du bip lors de la réception de données de l'ichtyomètre +tutti.config.option.ichtyometer.beep.error.enabled.description=Pour activer ou non le bip à la réception d'erreurs +tutti.config.option.ichtyometer.beep.error.frequency.description=Tonalité du bip lors de la réception d'une erreur de l'ichtyomètre tutti.config.option.ichtyometer.fullBluetoothScan.description=Pour toujours effectuer une recherche complète des périphériques bluetooth lors de la recherche d'un ichtyomètre tutti.config.option.ichtyometer.maximumNumberOfAttemptToConnect.description=Nombre maximum de de tentatives de connection à l'ichtyomètre +tutti.config.option.ichtyometer.voice.enabled.description=Pour activer ou non la lecture vocale des mesures reçues tutti.config.option.inceptionYear.description=Année de démarrage du projet tutti.config.option.launch.mode.description=Mode de démarrage de l'application tutti.config.option.organizationName.description=Nom de l'organisation dans la licence diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java index 1d6668d..48418f5 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java @@ -31,7 +31,6 @@ import fr.ifremer.tutti.ui.swing.content.config.actions.ReloadTuttiAction; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; import fr.ifremer.tutti.ui.swing.util.editor.TuttiLocationTableCell; import fr.ifremer.tutti.ui.swing.util.editor.VesselTableCell; -import fr.ifremer.tutti.util.BeepFrequency; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.config.ConfigCategoryUI; import jaxx.runtime.swing.config.ConfigUI; @@ -135,24 +134,6 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .addOption(TuttiConfigurationOption.MAX_INDIVIDUAL_OBSERVATION_ROW_TO_CREATE) .setOptionShortLabel(t("tutti.config.option.ui.individualObservationRowsToCreate.shortLabel")) - .addOption(TuttiConfigurationOption.FULL_BLUETOOTH_SCAN) - .setOptionShortLabel(t("tutti.config.option.ui.fullBluetoothScan.shortLabel")) - - .addOption(TuttiConfigurationOption.ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT) - .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerMaximumNumberOfAttemptToConnect.shortLabel")); - - EnumEditor<BeepFrequency> beepFrequencyEnumEditor = EnumEditor.newEditor(BeepFrequency.class); - beepFrequencyEnumEditor.insertItemAt(null, 0); - DefaultCellEditor beepFrequencyUnitTableCellEditor = new DefaultCellEditor(beepFrequencyEnumEditor); - - helper.addOption(TuttiConfigurationOption.ICHTYOMETER_DATA_RECEPTION_BEEP_FREQUENCY) - .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerDataBeepFrequency.shortLabel")) - .setOptionEditor(beepFrequencyUnitTableCellEditor) - - .addOption(TuttiConfigurationOption.ICHTYOMETER_ERROR_RECEPTION_BEEP_FREQUENCY) - .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerErrorBeepFrequency.shortLabel")) - .setOptionEditor(beepFrequencyUnitTableCellEditor) - .addOption(TuttiConfigurationOption.SHOW_BATCH_LOG) .setOptionShortLabel(t("tutti.config.option.ui.showBatchLog.shortLabel")) @@ -170,11 +151,9 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .setOptionShortLabel(t("tutti.config.option.ui.db.import.skipBackup.shortLabel")) .addOption(TuttiConfigurationOption.PUPITRI_IMPORT_MISSING_BATCHES) - .setOptionShortLabel(t("tutti.config.option.pupitriImportMissingBatches.shortLabel")) + .setOptionShortLabel(t("tutti.config.option.pupitriImportMissingBatches.shortLabel")); - ; - TuttiUIContext context = getContext(); if (context.isDbLoaded()) { @@ -277,6 +256,33 @@ public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, .setOptionRenderer(weightUnitTableCellRenderer) .setOptionEditor(weightUnitTableCellEditor); + + // ichtyometer category + + helper.addCategory(n("tutti.config.category.ichtyometer"), + n("tutti.config.category.ichtyometer.description")) + + .addOption(TuttiConfigurationOption.FULL_BLUETOOTH_SCAN) + .setOptionShortLabel(t("tutti.config.option.ui.fullBluetoothScan.shortLabel")) + + .addOption(TuttiConfigurationOption.ICHTYOMETER_MAXIMUM_NUMBER_OF_ATTEMPT_TO_CONNECT) + .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerMaximumNumberOfAttemptToConnect.shortLabel")) + + .addOption(TuttiConfigurationOption.ICHTYOMETER_VOICE_ENABLED) + .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerVoiceEnabled.shortLabel")) + + .addOption(TuttiConfigurationOption.ICHTYOMETER_DATA_RECEPTION_BEEP_ENABLED) + .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerDataBeepEnabled.shortLabel")) + + .addOption(TuttiConfigurationOption.ICHTYOMETER_DATA_RECEPTION_BEEP_FREQUENCY) + .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerDataBeepFrequency.shortLabel")) + + .addOption(TuttiConfigurationOption.ICHTYOMETER_ERROR_RECEPTION_BEEP_ENABLED) + .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerErrorBeepEnabled.shortLabel")) + + .addOption(TuttiConfigurationOption.ICHTYOMETER_ERROR_RECEPTION_BEEP_FREQUENCY) + .setOptionShortLabel(t("tutti.config.option.ui.ichtyometerErrorBeepFrequency.shortLabel")); + // Technical category helper.addCategory(n("tutti.config.category.technical"), diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index ca15e43..8d2a5ab 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -673,7 +673,9 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } else { - SoundUtil.beep(getConfig().getIchtyometerErrorReceptionBeepFrequency(), 3); + if (getConfig().isIchtyometerErrorReceptionBeepEnabled()) { + SoundUtil.beep(getConfig().getIchtyometerErrorReceptionBeepFrequency(), 3); + } throw new ApplicationBusinessException( t("tutti.editSpeciesFrequencies.error.itchyometer.bad.record", record.getRecord())); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java index 4bf7da3..2c880ec 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java @@ -25,6 +25,7 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.ac */ import com.google.common.collect.Lists; +import fr.ifremer.tutti.TuttiConfiguration; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyLogRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyLogsTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; @@ -115,8 +116,13 @@ public class ApplySpeciesFrequencyRafaleAction { String unit = model.getLengthStepCaracteristicUnit(); handler.showInformationMessage(t("tutti.editSpeciesFrequencies.addMeasure", step, aroundLengthStep, unit)); - SoundUtil.beep(handler.getConfig().getIchtyometerDataReceptionBeepFrequency()); - SoundUtil.readNumber(aroundLengthStep, unit); + TuttiConfiguration config = handler.getConfig(); + if (config.isIchtyometerDataReceptionBeepEnabled()) { + SoundUtil.beep(config.getIchtyometerDataReceptionBeepFrequency()); + } + if (config.isIchtyometerVoiceEnabled()) { + SoundUtil.readNumber(aroundLengthStep, unit); + } } JXTable logsTable = ui.getLogsTable(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java index dc5a3f8..c30ba3b 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java @@ -34,17 +34,14 @@ public class SoundUtil { public static void beep(BeepFrequency beepFrequency, int number) { - if (beepFrequency != null) { - - try { - for (int i = 0; i < number; i++) { - tone(beepFrequency.getFrequency(), 500, 1.0); - } + try { + for (int i = 0; i < number; i++) { + tone(beepFrequency.getFrequency(), 500, 1.0); + } - } catch (LineUnavailableException e) { - if (log.isErrorEnabled()) { - log.error("Error while playing a beep", e); - } + } catch (LineUnavailableException e) { + if (log.isErrorEnabled()) { + log.error("Error while playing a beep", e); } } } diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties index 92d72f9..18a4750 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties @@ -126,6 +126,8 @@ tutti.config.action.reload.application= tutti.config.action.reload.ui= tutti.config.category.applications= tutti.config.category.applications.description= +tutti.config.category.ichtyometer= +tutti.config.category.ichtyometer.description= tutti.config.category.technical= tutti.config.category.technical.description= tutti.config.category.ui= @@ -176,9 +178,12 @@ tutti.config.option.ui.db.import.skipBackup.shortLabel= tutti.config.option.ui.fullBluetoothScan.shortLabel= tutti.config.option.ui.genericFormat.import.maximumRowsInErrorPerFile.shortLabel= tutti.config.option.ui.genericFormat.import.skipBackup.shortLabel= +tutti.config.option.ui.ichtyometerDataBeepEnabled.shortLabel= tutti.config.option.ui.ichtyometerDataBeepFrequency.shortLabel= +tutti.config.option.ui.ichtyometerErrorBeepEnabled.shortLabel= tutti.config.option.ui.ichtyometerErrorBeepFrequency.shortLabel= tutti.config.option.ui.ichtyometerMaximumNumberOfAttemptToConnect.shortLabel= +tutti.config.option.ui.ichtyometerVoiceEnabled.shortLabel= tutti.config.option.ui.individualObservationRowsToCreate.shortLabel= tutti.config.option.ui.showBatchLog.shortLabel= tutti.config.option.ui.showMemoryUsage.shortLabel= diff --git a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties index f691250..178e1da 100644 --- a/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties +++ b/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties @@ -105,6 +105,8 @@ tutti.config.action.reload.application=Recharger l'application tutti.config.action.reload.ui=Recharger l'interface graphique tutti.config.category.applications=Application tutti.config.category.applications.description=Application +tutti.config.category.ichtyometer=Ichtyomètre +tutti.config.category.ichtyometer.description=Ichtyomètre tutti.config.category.technical=Technique tutti.config.category.technical.description=Informations techniques tutti.config.category.ui=Interface utilisateur @@ -155,9 +157,12 @@ tutti.config.option.ui.db.import.skipBackup.shortLabel=Ne pas faire de sauvegard tutti.config.option.ui.fullBluetoothScan.shortLabel=Recherche complète des périphériques bluetooth tutti.config.option.ui.genericFormat.import.maximumRowsInErrorPerFile.shortLabel=Nombre maximum de lignes en erreur possible par fichier lors de la validation de l'import générique tutti.config.option.ui.genericFormat.import.skipBackup.shortLabel=Ne pas faire de sauvegarde avant un import au format générique +tutti.config.option.ui.ichtyometerDataBeepEnabled.shortLabel=Bip à la réception de mesures tutti.config.option.ui.ichtyometerDataBeepFrequency.shortLabel=Tonalité de réception de données +tutti.config.option.ui.ichtyometerErrorBeepEnabled.shortLabel=Bip à la réception d'erreur tutti.config.option.ui.ichtyometerErrorBeepFrequency.shortLabel=Tonalité de réception d'erreur tutti.config.option.ui.ichtyometerMaximumNumberOfAttemptToConnect.shortLabel=Nombre maximum de tentatives de connection à l'ichtyomètre +tutti.config.option.ui.ichtyometerVoiceEnabled.shortLabel=Lecture vocale des mesures reçues tutti.config.option.ui.individualObservationRowsToCreate.shortLabel=Nombre max de données individuelles tutti.config.option.ui.showBatchLog.shortLabel=Voir la structure des lots dans les logs tutti.config.option.ui.showMemoryUsage.shortLabel=Voir l'utilisation de la mémoire -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git commit 024dbe95b4d3da92d0440c15c26f287245a167ef Author: Tony CHEMIT <chemit@codelutin.com> Date: Tue Jan 19 13:46:21 2016 +0100 ajout des headers de license manquantes --- .../fr/ifremer/tutti/ui/swing/util/SoundUtil.java | 24 ++++++++++++++++++++++ .../fr/ifremer/tutti/ui/swing/SoundUtilTest.java | 24 ++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java index c30ba3b..f69c4c2 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java @@ -1,5 +1,29 @@ package fr.ifremer.tutti.ui.swing.util; +/* + * #%L + * Tutti :: UI + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2012 - 2016 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + import fr.ifremer.tutti.util.BeepFrequency; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java b/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java index f8da83a..de2daa0 100644 --- a/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java +++ b/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java @@ -1,5 +1,29 @@ package fr.ifremer.tutti.ui.swing; +/* + * #%L + * Tutti :: UI + * $Id:$ + * $HeadURL:$ + * %% + * Copyright (C) 2012 - 2016 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + import fr.ifremer.tutti.ui.swing.util.SoundUtil; import org.junit.Test; -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git commit e3a6167ae93a2450f9612353eaa40e8406908137 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Jan 20 09:51:47 2016 +0100 Utilisation d'un vrai objet Java pour jouer les son (SoundEngine) et revue du threading (See #7063) --- .../fr/ifremer/tutti/ui/swing/TuttiUIContext.java | 9 ++ .../frequency/SpeciesFrequencyUIHandler.java | 11 +- .../actions/ApplySpeciesFrequencyRafaleAction.java | 21 +-- .../ifremer/tutti/ui/swing/util/SoundEngine.java | 126 ++++++++++++++++ .../fr/ifremer/tutti/ui/swing/util/SoundUtil.java | 159 ++++++++++++++------- .../fr/ifremer/tutti/ui/swing/SoundUtilTest.java | 33 ++--- 6 files changed, 272 insertions(+), 87 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java index 4d84c0c..70b7f3c 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java @@ -57,6 +57,7 @@ import fr.ifremer.tutti.service.referential.TuttiReferentialSynchronizeService; import fr.ifremer.tutti.service.report.ReportGenerationService; import fr.ifremer.tutti.ui.swing.content.MainUI; import fr.ifremer.tutti.ui.swing.updater.DeleteHelper; +import fr.ifremer.tutti.ui.swing.util.SoundEngine; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.UIMessageNotifier; import fr.ifremer.tutti.ui.swing.util.auth.AuthenticationInfo; @@ -300,6 +301,8 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage */ private boolean closed; + private final SoundEngine soundEngine; + public static TuttiUIContext newContext(TuttiConfiguration config) { Preconditions.checkNotNull(config); Preconditions.checkState(applicationContext == null, @@ -386,6 +389,7 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage tuttiActionFactory = new TuttiActionFactory(); tuttiActionEngine = new ApplicationActionEngine(tuttiActionFactory); this.updateAuthenticationStore = Maps.newTreeMap(); + this.soundEngine = new SoundEngine(config); } @Override @@ -612,6 +616,7 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage IOUtils.closeQuietly(serviceContext); IOUtils.closeQuietly(ichtyometerReader); + IOUtils.closeQuietly(soundEngine); // remove listeners PropertyChangeListener[] listeners = getPropertyChangeListeners(); @@ -760,6 +765,10 @@ public class TuttiUIContext extends AbstractBean implements Closeable, UIMessage return serviceContext.getService(ReportGenerationService.class); } + public SoundEngine getSoundEngine() { + return soundEngine; + } + public boolean useRealPersistenceService() { return isDbExist() && isDbLoaded(); } diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java index 8d2a5ab..b4643fc 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/SpeciesFrequencyUIHandler.java @@ -40,7 +40,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.FrequencyConfiguratio import fr.ifremer.tutti.ui.swing.content.operation.catches.species.SpeciesBatchRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyCellComponent.FrequencyCellEditor; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.actions.ApplySpeciesFrequencyRafaleAction; -import fr.ifremer.tutti.ui.swing.util.SoundUtil; +import fr.ifremer.tutti.ui.swing.util.SoundEngine; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiNumberTickUnitSource; import fr.ifremer.tutti.ui.swing.util.TuttiUI; @@ -218,8 +218,6 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci @Override public void beforeInit(SpeciesFrequencyUI ui) { - this.applySpeciesFrequencyRafaleAction = new ApplySpeciesFrequencyRafaleAction(ui); - super.beforeInit(ui); this.weightUnit = getConfig().getSpeciesWeightUnit(); @@ -254,6 +252,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci @Override public void afterInit(SpeciesFrequencyUI ui) { + applySpeciesFrequencyRafaleAction = new ApplySpeciesFrequencyRafaleAction(ui); + initUI(this.ui); List<Caracteristic> lengthStepCaracterics = @@ -673,9 +673,8 @@ public class SpeciesFrequencyUIHandler extends AbstractTuttiTableUIHandler<Speci } else { - if (getConfig().isIchtyometerErrorReceptionBeepEnabled()) { - SoundUtil.beep(getConfig().getIchtyometerErrorReceptionBeepFrequency(), 3); - } + SoundEngine soundEngine = getContext().getSoundEngine(); + soundEngine.beepOnIchtyometerErrorReception(); throw new ApplicationBusinessException( t("tutti.editSpeciesFrequencies.error.itchyometer.bad.record", record.getRecord())); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java index 2c880ec..d026a23 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java @@ -25,7 +25,6 @@ package fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.ac */ import com.google.common.collect.Lists; -import fr.ifremer.tutti.TuttiConfiguration; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyLogRowModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyLogsTableModel; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyRowModel; @@ -33,7 +32,7 @@ import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.Spe import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUI; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIHandler; import fr.ifremer.tutti.ui.swing.content.operation.catches.species.frequency.SpeciesFrequencyUIModel; -import fr.ifremer.tutti.ui.swing.util.SoundUtil; +import fr.ifremer.tutti.ui.swing.util.SoundEngine; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; @@ -56,10 +55,12 @@ public class ApplySpeciesFrequencyRafaleAction { /** Logger. */ private static final Log log = LogFactory.getLog(ApplySpeciesFrequencyRafaleAction.class); - private final SpeciesFrequencyUI ui; + protected final SpeciesFrequencyUI ui; + protected final SoundEngine soundEngine; public ApplySpeciesFrequencyRafaleAction(SpeciesFrequencyUI ui) { this.ui = ui; + this.soundEngine = ui.getHandler().getContext().getSoundEngine(); } public void applyRafaleStep(Float step, boolean fromIchtyometer) { @@ -113,18 +114,18 @@ public class ApplySpeciesFrequencyRafaleAction { ui.getTable().scrollRowToVisible(rowIndex); if (fromIchtyometer) { + String unit = model.getLengthStepCaracteristicUnit(); handler.showInformationMessage(t("tutti.editSpeciesFrequencies.addMeasure", step, aroundLengthStep, unit)); - TuttiConfiguration config = handler.getConfig(); - if (config.isIchtyometerDataReceptionBeepEnabled()) { - SoundUtil.beep(config.getIchtyometerDataReceptionBeepFrequency()); - } - if (config.isIchtyometerVoiceEnabled()) { - SoundUtil.readNumber(aroundLengthStep, unit); - } + soundEngine.beepOnIchtyometerDataReception(unit, aroundLengthStep); + } + //FIXME Remove this after tests + String unit = model.getLengthStepCaracteristicUnit(); + soundEngine.beepOnIchtyometerDataReception(unit, aroundLengthStep); + JXTable logsTable = ui.getLogsTable(); SpeciesFrequencyLogsTableModel logsTableModel = (SpeciesFrequencyLogsTableModel) logsTable.getModel(); SpeciesFrequencyLogRowModel newRow = logsTableModel.createNewRow(); diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundEngine.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundEngine.java new file mode 100644 index 0000000..1d1a756 --- /dev/null +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundEngine.java @@ -0,0 +1,126 @@ +package fr.ifremer.tutti.ui.swing.util; + +import com.google.common.base.MoreObjects; +import fr.ifremer.tutti.TuttiConfiguration; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.nuiton.jaxx.application.ApplicationTechnicalException; + +import java.io.Closeable; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; + +/** + * Created on 20/01/16. + * + * @author Tony Chemit - chemit@codelutin.com + * @since 4.4 + */ +public class SoundEngine implements Closeable { + + /** Logger. */ + private static final Log log = LogFactory.getLog(SoundEngine.class); + + protected final TuttiConfiguration configuration; + protected final Thread thread; + protected final LinkedBlockingQueue<Measure> measuresToSay; + protected boolean stop; + + public SoundEngine(TuttiConfiguration configuration) { + this.configuration = configuration; + this.thread = new Thread(new SoundEngineRunnable(), toString()); + this.measuresToSay = new LinkedBlockingQueue<>(); + this.thread.start(); + if (log.isInfoEnabled()) { + log.info("Starting sound engine thread: " + thread); + } + } + + public synchronized void beepOnIchtyometerDataReception(String unit, float aroundLengthStep) { + + if (configuration.isIchtyometerDataReceptionBeepEnabled()) { + SoundUtil.beep(configuration.getIchtyometerDataReceptionBeepFrequency()); + } + + if (configuration.isIchtyometerVoiceEnabled()) { + measuresToSay.add(new Measure(unit, aroundLengthStep)); + } + + } + + public synchronized void beepOnIchtyometerErrorReception() { + + if (configuration.isIchtyometerErrorReceptionBeepEnabled()) { + SoundUtil.beep(configuration.getIchtyometerErrorReceptionBeepFrequency(), 3); + } + + } + + @Override + public synchronized void close() { + + if (log.isInfoEnabled()) { + log.info("Stopping sound engine thread: " + thread); + } + stop = true; + thread.interrupt(); + } + + protected class Measure { + + protected final String unit; + protected final float aroundLengthStep; + + protected Measure(String unit, float aroundLengthStep) { + this.unit = unit; + this.aroundLengthStep = aroundLengthStep; + } + + @Override + public String toString() { + return MoreObjects.toStringHelper(this) + .add("unit", unit) + .add("aroundLengthStep", aroundLengthStep) + .toString(); + } + } + + protected class SoundEngineRunnable implements Runnable { + + @Override + public void run() { + + while (true) { + + try { + Measure measure = measuresToSay.poll(1, TimeUnit.SECONDS); + + if (measure != null) { + + if (log.isInfoEnabled()) { + log.info("New Measure to say: " + measure); + } + + SoundUtil.readNumber(measure.aroundLengthStep, measure.unit); + + } + + if (stop) { + break; + } + + } catch (InterruptedException e) { + + if (!stop) { + throw new ApplicationTechnicalException("Could not get measure to say", e); + } + + } + + + } + + } + } + +} diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java index f69c4c2..e9d1bff 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java @@ -3,8 +3,6 @@ package fr.ifremer.tutti.ui.swing.util; /* * #%L * Tutti :: UI - * $Id:$ - * $HeadURL:$ * %% * Copyright (C) 2012 - 2016 Ifremer * %% @@ -77,79 +75,134 @@ public class SoundUtil { 1, // channels true, // signed false); // bigEndian - SourceDataLine sdl = AudioSystem.getSourceDataLine(af); - sdl.open(af); - sdl.start(); - for (int i = 0, end = msecs * 8 ; i < end ; i++) { - double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI; - buf[0] = (byte)(Math.sin(angle) * 127.0 * vol); - sdl.write(buf,0,1); + try (SourceDataLine sdl = AudioSystem.getSourceDataLine(af)) { + sdl.open(af); + sdl.start(); + for (int i = 0, end = msecs * 8; i < end; i++) { + double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI; + buf[0] = (byte) (Math.sin(angle) * 127.0 * vol); + sdl.write(buf, 0, 1); + } + sdl.drain(); + sdl.stop(); } - sdl.drain(); - sdl.stop(); - sdl.close(); } - public static synchronized void readNumber(final double number, final String unit) { - - new Thread(new Runnable() { + public static void readNumber(double number, String unit) { - @Override - public void run() { - - try { + try { - int thousands = (int) (number / 1000); - int hundreds = (int) (number % 1000) / 100; - int tensAndUnits = (int) number % 100; - int decimal = (int) (number * 10) % 10; + int thousands = (int) (number / 1000); + int hundreds = (int) (number % 1000) / 100; + int tensAndUnits = (int) number % 100; + int decimal = (int) (number * 10) % 10; - List<AudioInputStream> audioInputStreams = new ArrayList<>(); + List<AudioInputStream> audioInputStreams = new ArrayList<>(); - addSound(audioInputStreams, thousands, 1000); - addSound(audioInputStreams, hundreds, 100); - if (tensAndUnits != 0 || thousands == 0 && hundreds == 0) { - addSound(audioInputStreams, tensAndUnits); - } - if (decimal > 0) { - addSound(audioInputStreams, ","); - addSound(audioInputStreams, decimal); - } - addSound(audioInputStreams, unit); + addSound(audioInputStreams, thousands, 1000); + addSound(audioInputStreams, hundreds, 100); + if (tensAndUnits != 0 || thousands == 0 && hundreds == 0) { + addSound(audioInputStreams, tensAndUnits); + } + if (decimal > 0) { + addSound(audioInputStreams, ","); + addSound(audioInputStreams, decimal); + } + addSound(audioInputStreams, unit); - if (!audioInputStreams.isEmpty()) { + if (!audioInputStreams.isEmpty()) { - AudioFormat format = audioInputStreams.get(0).getFormat(); - DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); - SourceDataLine audioLine = (SourceDataLine) AudioSystem.getLine(info); - audioLine.open(format); - audioLine.start(); + AudioFormat format = audioInputStreams.get(0).getFormat(); + DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); + try (SourceDataLine audioLine = (SourceDataLine) AudioSystem.getLine(info)) { + audioLine.open(format); + audioLine.start(); - byte[] bytesBuffer = new byte[4096]; - int bytesRead; + byte[] bytesBuffer = new byte[4096]; - while (!audioInputStreams.isEmpty()) { - AudioInputStream audioInputStream = audioInputStreams.remove(0); + while (!audioInputStreams.isEmpty()) { + try (AudioInputStream audioInputStream = audioInputStreams.remove(0)) { + int bytesRead; while ((bytesRead = audioInputStream.read(bytesBuffer)) != -1) { audioLine.write(bytesBuffer, 0, bytesRead); } - audioInputStream.close(); } - - audioLine.drain(); - audioLine.close(); } - } catch (Exception e) { - if (log.isErrorEnabled()) { - log.error("Error while reading " + number + " " + unit, e); - } + audioLine.drain(); + } } - }).start(); + } catch (Exception e) { + if (log.isErrorEnabled()) { + log.error("Error while reading " + number + " " + unit, e); + } + } + } +// public static synchronized void readNumber(final double number, final String unit) { +// +// new Thread(new Runnable() { +// +// @Override +// public void run() { +// +// try { +// +// int thousands = (int) (number / 1000); +// int hundreds = (int) (number % 1000) / 100; +// int tensAndUnits = (int) number % 100; +// int decimal = (int) (number * 10) % 10; +// +// List<AudioInputStream> audioInputStreams = new ArrayList<>(); +// +// addSound(audioInputStreams, thousands, 1000); +// addSound(audioInputStreams, hundreds, 100); +// if (tensAndUnits != 0 || thousands == 0 && hundreds == 0) { +// addSound(audioInputStreams, tensAndUnits); +// } +// if (decimal > 0) { +// addSound(audioInputStreams, ","); +// addSound(audioInputStreams, decimal); +// } +// addSound(audioInputStreams, unit); +// +// if (!audioInputStreams.isEmpty()) { +// +// AudioFormat format = audioInputStreams.get(0).getFormat(); +// DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); +// try (SourceDataLine audioLine = (SourceDataLine) AudioSystem.getLine(info)) { +// audioLine.open(format); +// audioLine.start(); +// +// byte[] bytesBuffer = new byte[4096]; +// +// while (!audioInputStreams.isEmpty()) { +// try (AudioInputStream audioInputStream = audioInputStreams.remove(0)) { +// int bytesRead; +// while ((bytesRead = audioInputStream.read(bytesBuffer)) != -1) { +// audioLine.write(bytesBuffer, 0, bytesRead); +// } +// } +// } +// +// audioLine.drain(); +// +// } +// } +// +// } catch (Exception e) { +// if (log.isErrorEnabled()) { +// log.error("Error while reading " + number + " " + unit, e); +// } +// } +// } +// +// }).start(); +// } + protected static long addSound(List<AudioInputStream> inputStreams, int number) throws IOException, UnsupportedAudioFileException { return addSound(inputStreams, number, 1); } diff --git a/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java b/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java index de2daa0..1054ae3 100644 --- a/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java +++ b/tutti-ui-swing/src/test/java/fr/ifremer/tutti/ui/swing/SoundUtilTest.java @@ -3,8 +3,6 @@ package fr.ifremer.tutti.ui.swing; /* * #%L * Tutti :: UI - * $Id:$ - * $HeadURL:$ * %% * Copyright (C) 2012 - 2016 Ifremer * %% @@ -29,27 +27,26 @@ import org.junit.Test; /** * @author Kevin Morin (Code Lutin) - * @since x.x + * @since 4.4 */ public class SoundUtilTest { @Test public void testSound() throws InterruptedException { - SoundUtil.readNumber(1, "cm"); - Thread.sleep(3000); - SoundUtil.readNumber(35, "mm"); - Thread.sleep(3000); - SoundUtil.readNumber(2001, "cm"); - Thread.sleep(3000); - SoundUtil.readNumber(2300, "cm"); - Thread.sleep(3000); - SoundUtil.readNumber(2000.5, "cm"); - Thread.sleep(3000); - SoundUtil.readNumber(2000, "cm"); - Thread.sleep(3000); - SoundUtil.readNumber(200, "cm"); - Thread.sleep(3000); - SoundUtil.readNumber(201, "cm"); + testReadNumber(101.5f, "cm"); + testReadNumber(1, "cm"); + testReadNumber(35, "mm"); + testReadNumber(2001, "cm"); + testReadNumber(2300, "cm"); + testReadNumber(2000.5f, "cm"); + testReadNumber(2000, "cm"); + testReadNumber(200, "cm"); + testReadNumber(201, "cm"); + } + + protected void testReadNumber(float measure, String unit) throws InterruptedException { + + SoundUtil.readNumber(measure, unit); Thread.sleep(3000); } } -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git commit fe0b3008031770263c6f6cd0b4ba96d78d77e1db Author: Kevin Morin <morin@codelutin.com> Date: Wed Jan 20 10:36:21 2016 +0100 correction de l'algo de lecture de nombres (refs #7063) --- .../fr/ifremer/tutti/ui/swing/util/SoundUtil.java | 71 +++------------------- 1 file changed, 7 insertions(+), 64 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java index e9d1bff..7148b4a 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/SoundUtil.java @@ -97,6 +97,10 @@ public class SoundUtil { int tensAndUnits = (int) number % 100; int decimal = (int) (number * 10) % 10; + if (log.isDebugEnabled()) { + log.debug(thousands + " " + hundreds + " " + tensAndUnits + " " + decimal); + } + List<AudioInputStream> audioInputStreams = new ArrayList<>(); addSound(audioInputStreams, thousands, 1000); @@ -142,67 +146,6 @@ public class SoundUtil { } -// public static synchronized void readNumber(final double number, final String unit) { -// -// new Thread(new Runnable() { -// -// @Override -// public void run() { -// -// try { -// -// int thousands = (int) (number / 1000); -// int hundreds = (int) (number % 1000) / 100; -// int tensAndUnits = (int) number % 100; -// int decimal = (int) (number * 10) % 10; -// -// List<AudioInputStream> audioInputStreams = new ArrayList<>(); -// -// addSound(audioInputStreams, thousands, 1000); -// addSound(audioInputStreams, hundreds, 100); -// if (tensAndUnits != 0 || thousands == 0 && hundreds == 0) { -// addSound(audioInputStreams, tensAndUnits); -// } -// if (decimal > 0) { -// addSound(audioInputStreams, ","); -// addSound(audioInputStreams, decimal); -// } -// addSound(audioInputStreams, unit); -// -// if (!audioInputStreams.isEmpty()) { -// -// AudioFormat format = audioInputStreams.get(0).getFormat(); -// DataLine.Info info = new DataLine.Info(SourceDataLine.class, format); -// try (SourceDataLine audioLine = (SourceDataLine) AudioSystem.getLine(info)) { -// audioLine.open(format); -// audioLine.start(); -// -// byte[] bytesBuffer = new byte[4096]; -// -// while (!audioInputStreams.isEmpty()) { -// try (AudioInputStream audioInputStream = audioInputStreams.remove(0)) { -// int bytesRead; -// while ((bytesRead = audioInputStream.read(bytesBuffer)) != -1) { -// audioLine.write(bytesBuffer, 0, bytesRead); -// } -// } -// } -// -// audioLine.drain(); -// -// } -// } -// -// } catch (Exception e) { -// if (log.isErrorEnabled()) { -// log.error("Error while reading " + number + " " + unit, e); -// } -// } -// } -// -// }).start(); -// } - protected static long addSound(List<AudioInputStream> inputStreams, int number) throws IOException, UnsupportedAudioFileException { return addSound(inputStreams, number, 1); } @@ -212,16 +155,16 @@ public class SoundUtil { if (number > 1 || suffix == 1) { if (log.isDebugEnabled()) { - log.debug("add " + number + ".wav"); + log.debug("-> add " + number + ".wav"); } AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(SoundUtil.class.getResource(SOUNDS_DIRECTORY + "/" + number + ".wav")); inputStreams.add(audioInputStream); length += audioInputStream.getFrameLength(); } - if (number > 1 && suffix > 1) { + if (number >= 1 && suffix > 1) { if (log.isDebugEnabled()) { - log.debug("add " + suffix + ".wav"); + log.debug("-> add " + suffix + ".wav"); } AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(SoundUtil.class.getResource(SOUNDS_DIRECTORY + "/" + suffix + ".wav")); inputStreams.add(audioInputStream); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
This is an automated email from the git hooks/post-receive script. New commit to branch feature/7063 in repository tutti. See http://git.codelutin.com/tutti.git commit 3fc8d00a5271329f55b640210b1ce43a1ae978e2 Author: Tony CHEMIT <chemit@codelutin.com> Date: Wed Jan 20 17:47:41 2016 +0100 Suppression de la notification sonore en mode rafale si cela ne vient pas de l'ichtyomètre --- .../species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java index d026a23..48855b0 100644 --- a/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java +++ b/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/frequency/actions/ApplySpeciesFrequencyRafaleAction.java @@ -122,10 +122,6 @@ public class ApplySpeciesFrequencyRafaleAction { } - //FIXME Remove this after tests - String unit = model.getLengthStepCaracteristicUnit(); - soundEngine.beepOnIchtyometerDataReception(unit, aroundLengthStep); - JXTable logsTable = ui.getLogsTable(); SpeciesFrequencyLogsTableModel logsTableModel = (SpeciesFrequencyLogsTableModel) logsTable.getModel(); SpeciesFrequencyLogRowModel newRow = logsTableModel.createNewRow(); -- To stop receiving notification emails like this one, please contact codelutin.com SCM administrator <admin+scm@codelutin.com>.
participants (1)
-
codelutin.com scm