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 63fdb96253b8c314dfe87dd3bbf6c5686c5f2438 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 4d95ce7..0907dc8 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 9cdb4f7..54ffb96 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 9914e08..79b732d 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 a4669b9..f89c2dc 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 @@ -151,6 +151,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 61efbe2..6b93620 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 @@ -133,6 +133,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>.