From 67e45981efb24e7dda4f41e82b2bb67f6648145e Mon Sep 17 00:00:00 2001 From: Juan Ottonello Date: Sun, 5 Oct 2025 17:15:39 +1300 Subject: [PATCH 1/7] Replace playback with display transposition for #534 - Main changes are for the transposition dialog and property - The property is used to transpose in ChordInspector (still reversed for now...) - Other places changed as needed - More cleaning necessary, added "TODO #534" to track a few suspects --- .../cl_editor/api/CL_SelectionUtilities.java | 1 - app/ChordInspector/pom.xml | 189 +++++++++--------- .../chordinspector/ChordInspectorPanel.java | 10 +- .../jjazz/chordinspector/ChordListener.java | 57 ++++-- ...PlaybackKey.java => TransposeDisplay.java} | 35 ++-- ...ialog.form => TransposeDisplayDialog.form} | 19 +- ...ialog.java => TransposeDisplayDialog.java} | 96 +++++---- .../musiccontrolactions/Bundle.properties | 14 +- .../Bundle_de_DE.properties | 42 ++-- .../Bundle_es_ES.properties | 76 +++---- .../Bundle_fr_FR.properties | 70 +++---- .../Bundle_id_ID.properties | 8 +- .../Bundle_it_IT.properties | 24 +-- .../Bundle_ja_JP.properties | 26 +-- .../Bundle_ko_KR.properties | 12 +- .../Bundle_no_NO.properties | 8 +- .../Bundle_pt_BR.properties | 78 ++++---- .../Bundle_ru_RU.properties | 12 +- .../Bundle_uk_UA.properties | 108 +++++----- .../Bundle_zh_CN.properties | 110 +++++----- .../test/TesAllRhythmsGenerateSequence.java | 3 +- .../chordleadsheet/api/ClsUtilities.java | 3 + .../jjazz/midi/api/InstrumentSettings.java | 10 +- .../api/MusicGenerationQueue.java | 57 ++---- .../musiccontrol/api/PlaybackListener.java | 3 +- .../musiccontrol/api/PlaybackSettings.java | 33 ++- .../musiccontrol/api/SongMidiExporter.java | 2 +- .../api/playbacksession/BaseSongSession.java | 27 +-- .../UpdateProviderSongSession.java | 14 +- .../api/SongSequenceBuilder.java | 3 + 30 files changed, 573 insertions(+), 577 deletions(-) rename app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/{TransposePlaybackKey.java => TransposeDisplay.java} (81%) rename app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/{TransposePlaybackKeyDialog.form => TransposeDisplayDialog.form} (88%) rename app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/{TransposePlaybackKeyDialog.java => TransposeDisplayDialog.java} (72%) diff --git a/app/CL_Editor/src/main/java/org/jjazz/cl_editor/api/CL_SelectionUtilities.java b/app/CL_Editor/src/main/java/org/jjazz/cl_editor/api/CL_SelectionUtilities.java index aca51dabd2..25acb9b32d 100644 --- a/app/CL_Editor/src/main/java/org/jjazz/cl_editor/api/CL_SelectionUtilities.java +++ b/app/CL_Editor/src/main/java/org/jjazz/cl_editor/api/CL_SelectionUtilities.java @@ -79,7 +79,6 @@ public CL_SelectionUtilities(Lookup lookup) Collections.sort(items); Collections.sort(selectedBars); - } /** diff --git a/app/ChordInspector/pom.xml b/app/ChordInspector/pom.xml index 829ffc67fe..6134fa3689 100644 --- a/app/ChordInspector/pom.xml +++ b/app/ChordInspector/pom.xml @@ -1,4 +1,3 @@ - 4.0.0 @@ -18,7 +17,7 @@ org.apache.netbeans.utilities nbm-maven-plugin - + org.jjazz.chordinspector.spi @@ -26,96 +25,101 @@ - - - org.jjazzlab.app - analytics - ${project.version} - - - org.jjazzlab.app - cl_editor - ${project.version} - - - org.jjazzlab.core - flatcomponents - ${project.version} - - - org.jjazzlab.core - harmony - ${project.version} - - - org.jjazzlab.app - instrumentcomponents - ${project.version} - - - org.jjazzlab.core - chordleadsheet - ${project.version} - - - org.jjazzlab.core - phrase - ${project.version} - - - org.jjazzlab.core - midimix - ${project.version} - - - org.jjazzlab.core - rhythm - ${project.version} - - - org.jjazzlab.app - score - ${project.version} - - - org.jjazzlab.core - song - ${project.version} - - - org.jjazzlab.app - uisettings - ${project.version} - - - org.jjazzlab.core - utilities - ${project.version} - - - org.netbeans.api - org-openide-awt - ${netbeans.version} - - - org.netbeans.api - org-openide-util - ${netbeans.version} - - - org.netbeans.api - org-openide-util-lookup - ${netbeans.version} - - - org.netbeans.api - org-openide-util-ui - ${netbeans.version} - - - org.netbeans.api - org-openide-windows - ${netbeans.version} + + + org.jjazzlab.app + analytics + ${project.version} + + + org.jjazzlab.app + cl_editor + ${project.version} + + + org.jjazzlab.core + flatcomponents + ${project.version} + + + org.jjazzlab.core + harmony + ${project.version} + + + org.jjazzlab.app + instrumentcomponents + ${project.version} + + + org.jjazzlab.core + chordleadsheet + ${project.version} + + + org.jjazzlab.core + phrase + ${project.version} + + + org.jjazzlab.core + midimix + ${project.version} + + + org.jjazzlab.core + musiccontrol + ${project.version} + + + org.jjazzlab.core + rhythm + ${project.version} + + + org.jjazzlab.app + score + ${project.version} + + + org.jjazzlab.core + song + ${project.version} + + + org.jjazzlab.app + uisettings + ${project.version} + + + org.jjazzlab.core + utilities + ${project.version} + + + org.netbeans.api + org-openide-awt + ${netbeans.version} + + + org.netbeans.api + org-openide-util + ${netbeans.version} + + + org.netbeans.api + org-openide-util-lookup + ${netbeans.version} + + + org.netbeans.api + org-openide-util-ui + ${netbeans.version} + + + org.netbeans.api + org-openide-windows + ${netbeans.version} org.jjazzlab.core @@ -132,4 +136,3 @@ UTF-8 - diff --git a/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordInspectorPanel.java b/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordInspectorPanel.java index 631bb22e1a..5038f9eddd 100644 --- a/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordInspectorPanel.java +++ b/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordInspectorPanel.java @@ -68,14 +68,8 @@ public void cleanup() public final void setModel(ExtChordSymbol model) { - // TODO #534 - Apply transposition here, pass to chordViewer and to updateChordsSymbol - // This is where the model gets to the UI - var transposedModel = model == null - ? null - : model.getTransposedChordSymbol(0, null); - - chordViewer.setModel(transposedModel); - updateChordSymbolUI(transposedModel); + chordViewer.setModel(model); + updateChordSymbolUI(model); } public ExtChordSymbol getModel() diff --git a/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordListener.java b/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordListener.java index 87e36aa20d..d503c6e2de 100644 --- a/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordListener.java +++ b/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordListener.java @@ -27,10 +27,12 @@ import java.beans.PropertyChangeListener; import org.jjazz.chordleadsheet.api.item.CLI_ChordSymbol; import org.jjazz.chordleadsheet.api.item.ChordLeadSheetItem; +import org.jjazz.chordleadsheet.api.item.ExtChordSymbol; import org.jjazz.harmony.api.Position; import org.jjazz.cl_editor.api.CL_ContextActionListener; import org.jjazz.cl_editor.api.CL_ContextActionSupport; import org.jjazz.cl_editor.api.CL_SelectionUtilities; +import org.jjazz.musiccontrol.api.PlaybackSettings; import org.openide.util.Utilities; /** @@ -40,7 +42,9 @@ public class ChordListener implements CL_ContextActionListener, PropertyChangeLi { private final CL_ContextActionSupport cap; private CLI_ChordSymbol chordSymbol; + private int transposition; private final ChordInspectorPanel editor; + private final PlaybackSettings playbackSettings; public ChordListener(ChordInspectorPanel editor) { @@ -51,20 +55,43 @@ public ChordListener(ChordInspectorPanel editor) cap = CL_ContextActionSupport.getInstance(Utilities.actionsGlobalContext()); cap.addWeakSelectionListener(this); selectionChange(cap.getSelection()); + + // Listen to transposition option changes + playbackSettings = PlaybackSettings.getInstance(); + playbackSettings.addPropertyChangeListener(PlaybackSettings.PROP_DISPLAY_TRANSPOSITION, this); + setTransposition(playbackSettings.getDisplayTransposition()); } public void cleanup() { cap.removeWeakSelectionListener(this); + + playbackSettings.removePropertyChangeListener(PlaybackSettings.PROP_DISPLAY_TRANSPOSITION, this); if (chordSymbol != null) { chordSymbol.removePropertyChangeListener(this); } } - // ----------------------------------------------------------------------------- - // CL_ContextActionListener interface - // ----------------------------------------------------------------------------- + private void setTransposition(int newTransposition) + { + transposition = newTransposition; + if (chordSymbol != null) + { + useTransposedChord(chordSymbol.getData(), transposition); + } + } + + private void useTransposedChord(ExtChordSymbol currentChord, int currentTransposition) + { + editor.setModel(currentChord.getTransposedChordSymbol(currentTransposition, null)); + } + + /** + * Call from {@link CL_ContextActionSupport} to their {@link CL_ContextActionListener}, as this class implements. + * + * @param selection gives access to current selection + */ @Override public final void selectionChange(CL_SelectionUtilities selection) { @@ -88,8 +115,7 @@ public final void selectionChange(CL_SelectionUtilities selection) } } else { - // Not a valid selection - // Do nothing + // Not a valid selection, do nothing // Note: an empty selection is received when switching from a CL_Editor TopComponent to a different TopComponent return; } @@ -100,21 +126,21 @@ public final void selectionChange(CL_SelectionUtilities selection) chordSymbol.removePropertyChangeListener(this); } chordSymbol = newSelectedChordSymbol; - if (chordSymbol != null) - { - chordSymbol.addPropertyChangeListener(this); - } if (chordSymbol != null) { - editor.setModel(chordSymbol.getData()); + chordSymbol.addPropertyChangeListener(this); + useTransposedChord(chordSymbol.getData(), transposition); } } - - // ================================================================================= - // PropertyChangeListener implementation - // ================================================================================= + /** + * Call from either {@link CLI_ChordSymbol} or the {@link PlaybackSettings}. Objects of this class add themselves + * as listeners to be notified of changes that require the chord displayed in the inspector to change. At the moment + * that is the selection in the lead sheet and the transposition option. + * + * @param evt + */ @Override public void propertyChange(PropertyChangeEvent evt) { @@ -124,6 +150,9 @@ public void propertyChange(PropertyChangeEvent evt) { editor.setModel(chordSymbol.getData()); } + } else if (PlaybackSettings.PROP_DISPLAY_TRANSPOSITION.equals(evt.getPropertyName())) + { + setTransposition((int) evt.getNewValue()); } } } diff --git a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposePlaybackKey.java b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplay.java similarity index 81% rename from app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposePlaybackKey.java rename to app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplay.java index 8084fe03de..bb4dcbd9f8 100644 --- a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposePlaybackKey.java +++ b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplay.java @@ -40,24 +40,23 @@ import org.openide.windows.WindowManager; /** - * Transpose the leadsheet for playback. + * Transpose the leadsheet and all other music shown in the UI. */ @ActionID(category = "MusicControls", id = "org.jjazz.musiccontrolactions.transposeplaybackkey") -@ActionRegistration(displayName = "#CTL_TransposePlaybackKey", lazy = false) +@ActionRegistration(displayName = "#CTL_TransposeDisplay", lazy = false) @ActionReferences( { @ActionReference(path = "Actions/ExtendedToolbar", position = 10) }) -public class TransposePlaybackKey extends AbstractAction implements PropertyChangeListener +public class TransposeDisplay extends AbstractAction implements PropertyChangeListener { - @StaticResource(relative = true) private static final String OFF_ICON = "resources/Sax-OFF-24x24.png"; @StaticResource(relative = true) private static final String ON_ICON = "resources/Sax-ON-24x24.png"; - private static final Logger LOGGER = Logger.getLogger(TransposePlaybackKey.class.getSimpleName()); + private static final Logger LOGGER = Logger.getLogger(TransposeDisplay.class.getSimpleName()); - public TransposePlaybackKey() + public TransposeDisplay() { putValue("hideActionText", true); updateButtonUI(); @@ -69,22 +68,18 @@ public TransposePlaybackKey() public void actionPerformed(ActionEvent e) { var ps = PlaybackSettings.getInstance(); - var dlg = TransposePlaybackKeyDialog.getInstance(); - + var dlg = TransposeDisplayDialog.getInstance(); - dlg.preset(ps.getPlaybackKeyTransposition()); + dlg.preset(ps.getDisplayTransposition()); dlg.setLocationRelativeTo(WindowManager.getDefault().getMainWindow()); dlg.setVisible(true); - if (dlg.isExitOk()) { - int old = ps.getPlaybackKeyTransposition(); - ps.setPlaybackKeyTransposition(dlg.getPlaybackKeyTransposition()); - - - Analytics.setProperties(Analytics.buildMap("Playback Key Transpose", dlg.getPlaybackKeyTransposition())); + int old = ps.getDisplayTransposition(); + ps.setDisplayTransposition(dlg.getDisplayTransposition()); + Analytics.setProperties(Analytics.buildMap("Playback Key Transpose", dlg.getDisplayTransposition())); } } @@ -97,7 +92,7 @@ public void propertyChange(PropertyChangeEvent evt) var mc = PlaybackSettings.getInstance(); if (evt.getSource() == mc) { - if (evt.getPropertyName().equals(PlaybackSettings.PROP_PLAYBACK_KEY_TRANSPOSITION)) + if (evt.getPropertyName().equals(PlaybackSettings.PROP_DISPLAY_TRANSPOSITION)) { updateButtonUI(); } @@ -109,16 +104,12 @@ public void propertyChange(PropertyChangeEvent evt) // ====================================================================== private void updateButtonUI() { - int t = PlaybackSettings.getInstance().getPlaybackKeyTransposition(); - + int t = PlaybackSettings.getInstance().getDisplayTransposition(); String iconPath = t == 0 ? OFF_ICON : ON_ICON; putValue(Action.SMALL_ICON, new ImageIcon(getClass().getResource(iconPath))); - - String s = ResUtil.getString(getClass(), "CTL_CurrentPlaybackTransposition", t); + String s = ResUtil.getString(getClass(), "CTL_CurrentDisplayTransposition", t); putValue(Action.SHORT_DESCRIPTION, s); - } - } diff --git a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposePlaybackKeyDialog.form b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.form similarity index 88% rename from app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposePlaybackKeyDialog.form rename to app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.form index d14bd529b5..28f1f9be0b 100644 --- a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposePlaybackKeyDialog.form +++ b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.form @@ -27,7 +27,7 @@ - + @@ -52,7 +52,7 @@ - + @@ -71,7 +71,7 @@ - + @@ -81,7 +81,7 @@ - + @@ -131,20 +131,23 @@ - + + + + - + - + - + diff --git a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposePlaybackKeyDialog.java b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java similarity index 72% rename from app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposePlaybackKeyDialog.java rename to app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java index c9c7103c0a..446c51146d 100644 --- a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposePlaybackKeyDialog.java +++ b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java @@ -1,3 +1,25 @@ +/* + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + * + * Copyright @2025 Jerome Lelasseux. All rights reserved. + * + * This file is part of the JJazzLab software. + * + * JJazzLab is free software: you can redistribute it and/or modify + * it under the terms of the Lesser GNU General Public License (LGPLv3) + * as published by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * JJazzLab 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 Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with JJazzLab. If not, see + * + * Contributor(s): + */ package org.jjazz.musiccontrolactions; import java.awt.event.ActionEvent; @@ -9,56 +31,58 @@ import org.openide.windows.WindowManager; /** - * Dialog to select playback transposition. + * Dialog to select transposition. */ -public class TransposePlaybackKeyDialog extends javax.swing.JDialog +public class TransposeDisplayDialog extends javax.swing.JDialog { - - static private TransposePlaybackKeyDialog INSTANCE; + static private TransposeDisplayDialog INSTANCE; private boolean exitOk; - public static TransposePlaybackKeyDialog getInstance() + public static TransposeDisplayDialog getInstance() { - synchronized (TransposePlaybackKeyDialog.class) + synchronized (TransposeDisplayDialog.class) { if (INSTANCE == null) { - INSTANCE = new TransposePlaybackKeyDialog(WindowManager.getDefault().getMainWindow(), true); + INSTANCE = new TransposeDisplayDialog(WindowManager.getDefault().getMainWindow(), true); } } return INSTANCE; } - private TransposePlaybackKeyDialog(java.awt.Frame parent, boolean modal) + /** + * Private constructor for Singleton pattern. + * @param parent + * @param modal + */ + private TransposeDisplayDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); } /** - * - * @param keyTransposition [-11;0] + * @param transposeBy [-11;0] */ - public void preset(int keyTransposition) + public void preset(int transposeBy) { - if (keyTransposition < -11 || keyTransposition > 0) + if (transposeBy < -11 || transposeBy > 0) { - throw new IllegalArgumentException("transposition=" + keyTransposition); + throw new IllegalArgumentException("transposition=" + transposeBy); } - cb_enableKeyTransposition.setSelected(keyTransposition != 0); - cmb_transposition.setEnabled(keyTransposition != 0); - if (keyTransposition != 0) + cb_enableTransposition.setSelected(transposeBy != 0); + cmb_transposition.setEnabled(transposeBy != 0); + if (transposeBy != 0) { - cmb_transposition.setSelectedIndex(-keyTransposition - 1); + cmb_transposition.setSelectedIndex(-transposeBy - 1); } pack(); - cb_enableKeyTransposition.requestFocusInWindow(); // After pack + cb_enableTransposition.requestFocusInWindow(); // After pack } public boolean isExitOk() { return exitOk; - } /** @@ -68,9 +92,9 @@ public boolean isExitOk() * * @return */ - public int getPlaybackKeyTransposition() + public int getDisplayTransposition() { - return !cb_enableKeyTransposition.isSelected() ? 0 : -cmb_transposition.getSelectedIndex() - 1; + return !cb_enableTransposition.isSelected() ? 0 : -cmb_transposition.getSelectedIndex() - 1; } // ==================================================================================================== @@ -88,7 +112,6 @@ protected JRootPane createRootPane() contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("ENTER"), "actionOk"); contentPane.getActionMap().put("actionOk", new AbstractAction("OK") { - @Override public void actionPerformed(ActionEvent e) { @@ -99,7 +122,6 @@ public void actionPerformed(ActionEvent e) contentPane.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke("ESCAPE"), "actionCancel"); contentPane.getActionMap().put("actionCancel", new AbstractAction("Cancel") { - @Override public void actionPerformed(ActionEvent e) { @@ -135,9 +157,9 @@ private void initComponents() cmb_transposition = new javax.swing.JComboBox<>(); jScrollPane1 = new javax.swing.JScrollPane(); helpTextArea1 = new org.jjazz.flatcomponents.api.HelpTextArea(); - cb_enableKeyTransposition = new javax.swing.JCheckBox(); + cb_enableTransposition = new javax.swing.JCheckBox(); - org.openide.awt.Mnemonics.setLocalizedText(btn_Ok, org.openide.util.NbBundle.getMessage(TransposePlaybackKeyDialog.class, "TransposePlaybackKeyDialog.btn_Ok.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(btn_Ok, org.openide.util.NbBundle.getMessage(TransposeDisplayDialog.class, "TransposeDisplayDialog.btn_Ok.text")); // NOI18N btn_Ok.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) @@ -146,7 +168,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) } }); - org.openide.awt.Mnemonics.setLocalizedText(btn_Cancel, org.openide.util.NbBundle.getMessage(TransposePlaybackKeyDialog.class, "TransposePlaybackKeyDialog.btn_Cancel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(btn_Cancel, org.openide.util.NbBundle.getMessage(TransposeDisplayDialog.class, "TransposeDisplayDialog.btn_Cancel.text")); // NOI18N btn_Cancel.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) @@ -169,15 +191,15 @@ public void keyPressed(java.awt.event.KeyEvent evt) helpTextArea1.setColumns(20); helpTextArea1.setRows(2); - helpTextArea1.setText(org.openide.util.NbBundle.getMessage(TransposePlaybackKeyDialog.class, "TransposePlaybackKeyDialog.helpTextArea1.text")); // NOI18N + helpTextArea1.setText(org.openide.util.NbBundle.getMessage(TransposeDisplayDialog.class, "TransposeDisplayDialog.helpTextArea1.text")); // NOI18N jScrollPane1.setViewportView(helpTextArea1); - org.openide.awt.Mnemonics.setLocalizedText(cb_enableKeyTransposition, org.openide.util.NbBundle.getMessage(TransposePlaybackKeyDialog.class, "TransposePlaybackKeyDialog.cb_enableKeyTransposition.text")); // NOI18N - cb_enableKeyTransposition.addChangeListener(new javax.swing.event.ChangeListener() + org.openide.awt.Mnemonics.setLocalizedText(cb_enableTransposition, org.openide.util.NbBundle.getMessage(TransposeDisplayDialog.class, "TransposeDisplayDialog.cb_enableTransposition.text")); // NOI18N + cb_enableTransposition.addChangeListener(new javax.swing.event.ChangeListener() { public void stateChanged(javax.swing.event.ChangeEvent evt) { - cb_enableKeyTranspositionStateChanged(evt); + cb_enableTranspositionStateChanged(evt); } }); @@ -192,7 +214,7 @@ public void stateChanged(javax.swing.event.ChangeEvent evt) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(cb_enableKeyTransposition) + .addComponent(cb_enableTransposition) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE) @@ -212,7 +234,7 @@ public void stateChanged(javax.swing.event.ChangeEvent evt) layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addGroup(layout.createSequentialGroup() .addGap(18, 18, 18) - .addComponent(cb_enableKeyTransposition) + .addComponent(cb_enableTransposition) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) @@ -245,16 +267,16 @@ private void btn_CancelActionPerformed(java.awt.event.ActionEvent evt)//GEN-FIRS actionCancel(); }//GEN-LAST:event_btn_CancelActionPerformed - private void cb_enableKeyTranspositionStateChanged(javax.swing.event.ChangeEvent evt)//GEN-FIRST:event_cb_enableKeyTranspositionStateChanged - {//GEN-HEADEREND:event_cb_enableKeyTranspositionStateChanged - cmb_transposition.setEnabled(cb_enableKeyTransposition.isSelected()); - }//GEN-LAST:event_cb_enableKeyTranspositionStateChanged + private void cb_enableTranspositionStateChanged(javax.swing.event.ChangeEvent evt)//GEN-FIRST:event_cb_enableTranspositionStateChanged + {//GEN-HEADEREND:event_cb_enableTranspositionStateChanged + cmb_transposition.setEnabled(cb_enableTransposition.isSelected()); + }//GEN-LAST:event_cb_enableTranspositionStateChanged // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btn_Cancel; private javax.swing.JButton btn_Ok; - private javax.swing.JCheckBox cb_enableKeyTransposition; + private javax.swing.JCheckBox cb_enableTransposition; private javax.swing.JComboBox cmb_transposition; private org.jjazz.flatcomponents.api.HelpTextArea helpTextArea1; private javax.swing.JScrollPane jScrollPane1; diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties index 725a5dbd76..8f92c229f9 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties @@ -1,9 +1,9 @@ -AutoUpdateOFFtooltip=Auto update is OFF: a song structural change occured, playing music is no more updated in real time. Stop music playback to reactivate auto-update mode. +AutoUpdateOFFtooltip=Auto update is OFF: a song structural change occurred, playing music is no more updated in real time. Stop music playback to reactivate auto-update mode. AutoUpdateONtooltip=Auto update is ON: playing music is updated in real time with song changes (except for structural changes) CTL_Click=Click CTL_ClickTooltip=Click during playback CTL_ControlToolbarAction=Music Control Toolbar -CTL_CurrentPlaybackTransposition=Current playback key transposition: {0} +CTL_CurrentDisplayTransposition=Current display transposition: {0} CTL_DecreaseTempo=Decrease Tempo CTL_IncreaseTempo=Increase Tempo CTL_Loop=Loop @@ -30,7 +30,7 @@ CTL_ShowPlaybackPoint=Show playback point CTL_ShowPlaybackTooltip=Highlight the bar being played CTL_Stop=Stop CTL_StopTooltip=Stop playback (shift space) -CTL_TransposePlaybackKey=Transpose playback key +CTL_TransposeDisplay=Transpose display ControlToolbarPanel.fbtn_Active.toolTipText=If ON, song is active and Midi messages are enabled. Only one song can be active at a time. ControlToolbarPanel.fbtn_Click.toolTipText=Click ControlToolbarPanel.fbtn_Pause.toolTipText=Pause the playback @@ -50,11 +50,11 @@ FixMidiMixDialog.lbl_firstLine.text=Potential Midi configuration problems detect FixMidiMixDialog.lbl_fixInstrumentTitle.text=The following instruments should be replaced to fit the current output synth configuration: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=The following drums channels should be rerouted to channel 10: MIDI_CONFIGURATION_PROBLEMS=Midi Configuration Problems -TransposePlaybackKeyDialog.btn_Cancel.text=Cancel -TransposePlaybackKeyDialog.btn_Ok.text=OK -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Enable key transposition during playback -TransposePlaybackKeyDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. CheckLowQualitySynthDialog.btn_ok.text=OK CheckLowQualitySynthDialog.cb_doNotShowAgain.text=Do not show this notification again CheckLowQualitySynthDialog.title=Warning CheckLowQualitySynthDialog.LowQualitySynthText=Low quality synth detected: {0}\n\nJJazzLab will not sound good.\n\nIf you can, use the embedded FluidSynth (see Midi panel from Options/Preferences menu). +TransposeDisplayDialog.btn_Cancel.text=Cancel +TransposeDisplayDialog.btn_Ok.text=OK +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) that are displayed. +TransposeDisplayDialog.cb_enableTransposition.text=Enable display transposition diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_de_DE.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_de_DE.properties index d1756c80fd..820f169a4c 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_de_DE.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_de_DE.properties @@ -1,9 +1,9 @@ -AutoUpdateOFFtooltip=Auto Update ist OFF\: Die Song-Struktur wurde geändert. Die abgespielte Musik wird nicht mehr in Echtzeit aktualisiert. Musikwiedergabe stoppen, um den Auto-Update-Modus wieder zu aktivieren. -AutoUpdateONtooltip=Auto-Update ist eingeschaltet\: Abgespielte Musik wird bei Änderungen in Echtzeit aktualisiert (außer bei strukturellen Änderungen) +AutoUpdateOFFtooltip=Auto Update ist OFF\: Die Song-Struktur wurde ge\u00c3\u00a4ndert. Die abgespielte Musik wird nicht mehr in Echtzeit aktualisiert. Musikwiedergabe stoppen, um den Auto-Update-Modus wieder zu aktivieren. +AutoUpdateONtooltip=Auto-Update ist eingeschaltet\: Abgespielte Musik wird bei \u00c3\u0084nderungen in Echtzeit aktualisiert (au\u00c3\u009fer bei strukturellen \u00c3\u0084nderungen) CTL_Click=Klicken -CTL_ClickTooltip=Während der Wiedergabe klicken +CTL_ClickTooltip=W\u00c3\u00a4hrend der Wiedergabe klicken CTL_ControlToolbarAction=Musiksteuerungs Symbolleiste -CTL_CurrentPlaybackTransposition=Aktuelle Wiedergabeschlüssel-Transmposition\: {0} +CTL_CurrentPlaybackTransposition=Aktuelle Wiedergabeschl\u00c3\u00bcssel-Transmposition\: {0} CTL_DecreaseTempo=Tempo reduzieren CTL_IncreaseTempo=Tempo beschleunigen CTL_Loop=Loop @@ -14,43 +14,43 @@ CTL_Play=Abspielen CTL_PlayFromHere=Ab hier abspielen CTL_PlaySelection=Auswahl abspielen CTL_PlayToolTip=Wiedergabe /anhalten (Leertaste) -CTL_PlaybackToNextSongPart=Nächster Songteil -CTL_PlaybackToNextSongPartTooltip=Nächsten Songteil abspielen (F2) +CTL_PlaybackToNextSongPart=N\u00c3\u00a4chster Songteil +CTL_PlaybackToNextSongPartTooltip=N\u00c3\u00a4chsten Songteil abspielen (F2) CTL_PlaybackToPreviousSongPart=Vorheriger Songteil CTL_PlaybackToPreviousSongPartTooltip=Vorherigen Teil abspielen (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=Vorauszähler -CTL_Precount1Bar=1 Takt einzählen - Mit Shift-Click kann der Einzählmodus geändert werden -CTL_Precount2Bar=2 Takte einzählen - mit Shift-Click kann der Einzählmodus geändert werden -CTL_PrecountBarAuto=Automatischer Einzähler - mit Shift-Click kann der Einzählmodus geändert werden +CTL_Precount=Vorausz\u00c3\u00a4hler +CTL_Precount1Bar=1 Takt einz\u00c3\u00a4hlen - Mit Shift-Click kann der Einz\u00c3\u00a4hlmodus ge\u00c3\u00a4ndert werden +CTL_Precount2Bar=2 Takte einz\u00c3\u00a4hlen - mit Shift-Click kann der Einz\u00c3\u00a4hlmodus ge\u00c3\u00a4ndert werden +CTL_PrecountBarAuto=Automatischer Einz\u00c3\u00a4hler - mit Shift-Click kann der Einz\u00c3\u00a4hlmodus ge\u00c3\u00a4ndert werden CTL_SetActive=Aktiv umschalten (ON/OFF) CTL_SetActivePopupAction=Aktiv umschalten (ON/OFF) -CTL_SetActiveToolTip=Legen Sie den einzigen aktiven Song fest, für den Midi Nachrichten aktiviert sind [O] +CTL_SetActiveToolTip=Legen Sie den einzigen aktiven Song fest, f\u00c3\u00bcr den Midi Nachrichten aktiviert sind [O] CTL_ShowPlaybackPoint=Wiedergabepunkt anzeigen CTL_ShowPlaybackTooltip=Den abgespielten Takt hervorheben CTL_Stop=Beenden CTL_StopTooltip=Wiedergabe anhalten -CTL_TransposePlaybackKey=Wiedergabeschlüssel transponieren +CTL_TransposePlaybackKey=Wiedergabeschl\u00c3\u00bcssel transponieren ControlToolbarPanel.fbtn_Active.toolTipText=Wenn ON ist Lied aktiv und Midi-Nachrichten sind aktiviert. Nur ein Lied kann gleichzeitig aktiv sein. ControlToolbarPanel.fbtn_Click.toolTipText=Klicken ControlToolbarPanel.fbtn_Pause.toolTipText=Abspielen anhalten ControlToolbarPanel.fbtn_Precount.toolTipText=precount vor Wiedergabe ControlToolbarPanel.posViewer.toolTipText=Aktuelle Position (bar\:beat) ControlToolbarPanel.spn_Tempo.toolTipText=Wiedergabetempo. Verwenden Sie J oder - um das Tempo zu, reduzieren K oder + um es zu beschleunigen. -ERR_BadSelection=Erste und zuletzt ausgewählte Takte stimmen nicht korrekt mit Songparts überein. -ERR_CantPlayFromHere=Kann von hier nicht abspielen. Wählen Sie zuerst einen gültigen Takt im Akkordblatt oder einen Songpart im Songstruktur Editor. +ERR_BadSelection=Erste und zuletzt ausgew\u00c3\u00a4hlte Takte stimmen nicht korrekt mit Songparts \u00c3\u00bcberein. +ERR_CantPlayFromHere=Kann von hier nicht abspielen. W\u00c3\u00a4hlen Sie zuerst einen g\u00c3\u00bcltigen Takt im Akkordblatt oder einen Songpart im Songstruktur Editor. ERR_InvalidPlayableSelection=Kann diese Auswahl nicht abspielen\: {0} -ERR_NeedContiguousSelection=Ausgewählte Takte/Songteile müssen nacheinander liegen. +ERR_NeedContiguousSelection=Ausgew\u00c3\u00a4hlte Takte/Songteile m\u00c3\u00bcssen nacheinander liegen. ERR_NotActive=Kann von hier nicht abspielen\: Song ist nicht aktiv FixMidiMixDialog.btn_Cancel.text=Abbrechen FixMidiMixDialog.btn_fix.text=Beheben FixMidiMixDialog.btn_skip.text=Ignorieren -FixMidiMixDialog.cb_rememberMyChoice.text=Meine Wahl während dieser Session merken +FixMidiMixDialog.cb_rememberMyChoice.text=Meine Wahl w\u00c3\u00a4hrend dieser Session merken FixMidiMixDialog.lbl_firstLine.text=Potenzielle Midi Konfigurationsprobleme erkannt. OK um diese zu beheben? FixMidiMixDialog.lbl_fixInstrumentTitle.text=Folgenden Instrumente sollten ersetzt werden, um der aktuellen Ausgabesynth-Konfiguration zu entsprechen\: -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Folgende Drum-kanäle sollten auf Kanal 10 umgeleitet werden\: +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Folgende Drum-kan\u00c3\u00a4le sollten auf Kanal 10 umgeleitet werden\: MIDI_CONFIGURATION_PROBLEMS=Midi Konfigurationsprobleme -TransposePlaybackKeyDialog.btn_Cancel.text=Abbrechen -TransposePlaybackKeyDialog.btn_Ok.text=OK -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Tonart-Trasposition während der Wiedergabe erlauben -TransposePlaybackKeyDialog.helpTextArea1.text=Ändern Sie die die Tonleiter (Akkordsymbole transponieren), wenn Sie einen Song abspielen. +TransposeDisplayDialog.btn_Cancel.text=Abbrechen +TransposeDisplayDialog.btn_Ok.text=OK +TransposeDisplayDialog.helpTextArea1.text=\u00c3\u0084ndern Sie die die Tonleiter (Akkordsymbole transponieren), wenn Sie einen Song abspielen. +TransposeDisplayDialog.cb_enableTransposition.text=Tonart-Trasposition w\u00c3\u00a4hrend der Wiedergabe erlauben diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_es_ES.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_es_ES.properties index fb96cde79f..9d824e6476 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_es_ES.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_es_ES.properties @@ -1,56 +1,56 @@ -AutoUpdateOFFtooltip=Actualización automática está APAGADA\: ha ocurrido un cambio estructural de canción, reproducir música no se actualiza más en tiempo real. Detener la reproducción de música para reactivar el modo de actualización automática. -AutoUpdateONtooltip=Actualización automática activada\: la reproducción de música se actualiza en tiempo real con cambios de canción (excepto los cambios estructurales) +AutoUpdateOFFtooltip=Actualizaci\u00c3\u00b3n autom\u00c3\u00a1tica est\u00c3\u00a1 APAGADA\: ha ocurrido un cambio estructural de canci\u00c3\u00b3n, reproducir m\u00c3\u00basica no se actualiza m\u00c3\u00a1s en tiempo real. Detener la reproducci\u00c3\u00b3n de m\u00c3\u00basica para reactivar el modo de actualizaci\u00c3\u00b3n autom\u00c3\u00a1tica. +AutoUpdateONtooltip=Actualizaci\u00c3\u00b3n autom\u00c3\u00a1tica activada\: la reproducci\u00c3\u00b3n de m\u00c3\u00basica se actualiza en tiempo real con cambios de canci\u00c3\u00b3n (excepto los cambios estructurales) CTL_Click=Click -CTL_ClickTooltip=Click del metrónomo durante la reproducción -CTL_ControlToolbarAction=Barra de herramientas para controlar música -CTL_CurrentPlaybackTransposition=Tonalidad de la reproducción actual\: {0} +CTL_ClickTooltip=Click del metr\u00c3\u00b3nomo durante la reproducci\u00c3\u00b3n +CTL_ControlToolbarAction=Barra de herramientas para controlar m\u00c3\u00basica +CTL_CurrentPlaybackTransposition=Tonalidad de la reproducci\u00c3\u00b3n actual\: {0} CTL_DecreaseTempo=Disminuir Tempo CTL_IncreaseTempo=Aumentar tempo CTL_Loop=En bucle -CTL_LoopTooltip=Reproducción en bucle (L) +CTL_LoopTooltip=Reproducci\u00c3\u00b3n en bucle (L) CTL_Pause=Pausa CTL_PauseTooltip=Pause playback CTL_Play=Reproducir -CTL_PlayFromHere=Reproducir a partir de aquí -CTL_PlaySelection=Reproducir selección +CTL_PlayFromHere=Reproducir a partir de aqu\u00c3\u00ad +CTL_PlaySelection=Reproducir selecci\u00c3\u00b3n CTL_PlayToolTip=Start/Pause playback (space key) -CTL_PlaybackToNextSongPart=Próxima parte de la canción -CTL_PlaybackToNextSongPartTooltip=Reproducir la siguiente parte de la canción (F2) -CTL_PlaybackToPreviousSongPart=Parte anterior de la canción -CTL_PlaybackToPreviousSongPartTooltip=Reproducir la parte precedente de la canción (F2) +CTL_PlaybackToNextSongPart=Pr\u00c3\u00b3xima parte de la canci\u00c3\u00b3n +CTL_PlaybackToNextSongPartTooltip=Reproducir la siguiente parte de la canci\u00c3\u00b3n (F2) +CTL_PlaybackToPreviousSongPart=Parte anterior de la canci\u00c3\u00b3n +CTL_PlaybackToPreviousSongPartTooltip=Reproducir la parte precedente de la canci\u00c3\u00b3n (F2) CTL_RestartPlayback=Restart playback (F3) CTL_Precount=Preconteo -CTL_Precount1Bar=Preconteo de 1 compás - Use Mayúscula-clic para cambiar el modo de preconteo -CTL_Precount2Bar=Preconteo de 2 compases - Use Mayúscula-clic para cambiar el modo de preconteo -CTL_PrecountBarAuto=Preconteo Automático - Usa Mayúsculas-clic para cambiar el modo de preconteo +CTL_Precount1Bar=Preconteo de 1 comp\u00c3\u00a1s - Use May\u00c3\u00bascula-clic para cambiar el modo de preconteo +CTL_Precount2Bar=Preconteo de 2 compases - Use May\u00c3\u00bascula-clic para cambiar el modo de preconteo +CTL_PrecountBarAuto=Preconteo Autom\u00c3\u00a1tico - Usa May\u00c3\u00basculas-clic para cambiar el modo de preconteo CTL_SetActive=Activar (ON/OFF) CTL_SetActivePopupAction=Activar (ON/OFF) -CTL_SetActiveToolTip=Establecer la única canción activa para la cual los mensajes Midi estarán habilitados [O] -CTL_ShowPlaybackPoint=Mostrar punto de reproducción -CTL_ShowPlaybackTooltip=Resaltar el compás en reproducción +CTL_SetActiveToolTip=Establecer la \u00c3\u00banica canci\u00c3\u00b3n activa para la cual los mensajes Midi estar\u00c3\u00a1n habilitados [O] +CTL_ShowPlaybackPoint=Mostrar punto de reproducci\u00c3\u00b3n +CTL_ShowPlaybackTooltip=Resaltar el comp\u00c3\u00a1s en reproducci\u00c3\u00b3n CTL_Stop=Parar CTL_StopTooltip=Stop playback -CTL_TransposePlaybackKey=Transponer tono de reproducción -ControlToolbarPanel.fbtn_Active.toolTipText=Si está activado, la canción estará activa y los mensajes Midi estarán habilitados. Solo una canción puede estar activa a la vez. +CTL_TransposePlaybackKey=Transponer tono de reproducci\u00c3\u00b3n +ControlToolbarPanel.fbtn_Active.toolTipText=Si est\u00c3\u00a1 activado, la canci\u00c3\u00b3n estar\u00c3\u00a1 activa y los mensajes Midi estar\u00c3\u00a1n habilitados. Solo una canci\u00c3\u00b3n puede estar activa a la vez. ControlToolbarPanel.fbtn_Click.toolTipText=Click -ControlToolbarPanel.fbtn_Pause.toolTipText=Pausa la reproducción -ControlToolbarPanel.fbtn_Precount.toolTipText=preconteo antes de iniciar la reproducción -ControlToolbarPanel.posViewer.toolTipText=Posición actual (compás\:tempo) -ControlToolbarPanel.spn_Tempo.toolTipText=Tempo de reproducción. Use "J" o "-" para disminuirlo, "K" o "+" para aumentarlo. -ERR_BadSelection=Los primeros y últimos compases seleccionados no coinciden correctamente con las partes de las canciones. -ERR_CantPlayFromHere=No se puede reproducir desde aquí. Seleccione primero en compás válido en la hoja de acordes o una parte de la canción en el editor de estructuras. -ERR_InvalidPlayableSelection=No se puede reproducir esta selección\: {0} -ERR_NeedContiguousSelection=Los compases o partes de canción seleccionados deben ser contiguos. -ERR_NotActive=No se puede reproducir desde aquí\: la canción no está activa +ControlToolbarPanel.fbtn_Pause.toolTipText=Pausa la reproducci\u00c3\u00b3n +ControlToolbarPanel.fbtn_Precount.toolTipText=preconteo antes de iniciar la reproducci\u00c3\u00b3n +ControlToolbarPanel.posViewer.toolTipText=Posici\u00c3\u00b3n actual (comp\u00c3\u00a1s\:tempo) +ControlToolbarPanel.spn_Tempo.toolTipText=Tempo de reproducci\u00c3\u00b3n. Use "J" o "-" para disminuirlo, "K" o "+" para aumentarlo. +ERR_BadSelection=Los primeros y \u00c3\u00baltimos compases seleccionados no coinciden correctamente con las partes de las canciones. +ERR_CantPlayFromHere=No se puede reproducir desde aqu\u00c3\u00ad. Seleccione primero en comp\u00c3\u00a1s v\u00c3\u00a1lido en la hoja de acordes o una parte de la canci\u00c3\u00b3n en el editor de estructuras. +ERR_InvalidPlayableSelection=No se puede reproducir esta selecci\u00c3\u00b3n\: {0} +ERR_NeedContiguousSelection=Los compases o partes de canci\u00c3\u00b3n seleccionados deben ser contiguos. +ERR_NotActive=No se puede reproducir desde aqu\u00c3\u00ad\: la canci\u00c3\u00b3n no est\u00c3\u00a1 activa FixMidiMixDialog.btn_Cancel.text=Cancelar FixMidiMixDialog.btn_fix.text=Corregir FixMidiMixDialog.btn_skip.text=Ignorar -FixMidiMixDialog.cb_rememberMyChoice.text=Recordar mi elección durante esta sesión -FixMidiMixDialog.lbl_firstLine.text=Se han detectado posibles problemas de configuración Midi. ¿Desea corregirlos automáticamente? -FixMidiMixDialog.lbl_fixInstrumentTitle.text=Los siguientes instrumentos deben ser reemplazados para ajustarse a la configuración actual del sintetizador de salida\: -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Los siguientes canales de percusión deben ser redireccionados al canal 10\: -MIDI_CONFIGURATION_PROBLEMS=Hay problemas en la configuración Midi -TransposePlaybackKeyDialog.btn_Cancel.text=Cancelar -TransposePlaybackKeyDialog.btn_Ok.text=OK -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Activar transposición de tonos durante la reproducción -TransposePlaybackKeyDialog.helpTextArea1.text=Cambia el tono (transponer acordes) al reproducir una canción. +FixMidiMixDialog.cb_rememberMyChoice.text=Recordar mi elecci\u00c3\u00b3n durante esta sesi\u00c3\u00b3n +FixMidiMixDialog.lbl_firstLine.text=Se han detectado posibles problemas de configuraci\u00c3\u00b3n Midi. \u00c2\u00bfDesea corregirlos autom\u00c3\u00a1ticamente? +FixMidiMixDialog.lbl_fixInstrumentTitle.text=Los siguientes instrumentos deben ser reemplazados para ajustarse a la configuraci\u00c3\u00b3n actual del sintetizador de salida\: +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Los siguientes canales de percusi\u00c3\u00b3n deben ser redireccionados al canal 10\: +MIDI_CONFIGURATION_PROBLEMS=Hay problemas en la configuraci\u00c3\u00b3n Midi +TransposeDisplayDialog.btn_Cancel.text=Cancelar +TransposeDisplayDialog.btn_Ok.text=OK +TransposeDisplayDialog.helpTextArea1.text=Cambia el tono (transponer acordes) al reproducir una canci\u00c3\u00b3n. +TransposeDisplayDialog.cb_enableTransposition.text=Activar transposici\u00c3\u00b3n de tonos durante la reproducci\u00c3\u00b3n diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_fr_FR.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_fr_FR.properties index f75225f8d3..32dc8abf45 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_fr_FR.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_fr_FR.properties @@ -1,9 +1,9 @@ -AutoUpdateOFFtooltip=La mise à jour automatique est désactivée \: une modification de la structure du morceau est survenue, la lecture de la musique n'est plus mise à jour en temps réel. Arrêtez la lecture de la musique pour réactiver le mode de mise à jour automatique. -AutoUpdateONtooltip=La mise à jour automatique est activée \: la lecture de la musique est mise à jour en temps réel avec les modifications du morceau (sauf pour les modifications structurelles) +AutoUpdateOFFtooltip=La mise \u00c3\u00a0 jour automatique est d\u00c3\u00a9sactiv\u00c3\u00a9e \: une modification de la structure du morceau est survenue, la lecture de la musique n'est plus mise \u00c3\u00a0 jour en temps r\u00c3\u00a9el. Arr\u00c3\u00aatez la lecture de la musique pour r\u00c3\u00a9activer le mode de mise \u00c3\u00a0 jour automatique. +AutoUpdateONtooltip=La mise \u00c3\u00a0 jour automatique est activ\u00c3\u00a9e \: la lecture de la musique est mise \u00c3\u00a0 jour en temps r\u00c3\u00a9el avec les modifications du morceau (sauf pour les modifications structurelles) CTL_Click=Click CTL_ClickTooltip=Click pendant la lecture -CTL_ControlToolbarAction=Barre d'outils contrôle de lecture -CTL_CurrentPlaybackTransposition=Tonalité de lecture actuelle\: {0} +CTL_ControlToolbarAction=Barre d'outils contr\u00c3\u00b4le de lecture +CTL_CurrentPlaybackTransposition=Tonalit\u00c3\u00a9 de lecture actuelle\: {0} CTL_DecreaseTempo=Diminuer le tempo CTL_IncreaseTempo=Augmenter le tempo CTL_Loop=Lire en boucle @@ -12,45 +12,45 @@ CTL_Pause=Pause CTL_PauseTooltip=Suspendre la lecture (touche espace) CTL_Play=Lecture CTL_PlayFromHere=Lecture depuis ici -CTL_PlaySelection=Lecture de la sélection -CTL_PlayToolTip=Démarrer/Suspendre la lecture (touche espace) -CTL_PlaybackToNextSongPart=Élément de structure suivant -CTL_PlaybackToNextSongPartTooltip=Jouer l'élément de structure suivant (F2) -CTL_PlaybackToPreviousSongPart=Élément de structure précédent -CTL_PlaybackToPreviousSongPartTooltip=Jouer l'élément de structure précédent (F1) -CTL_RestartPlayback=Redémarrer depuis le début (F3) -CTL_Precount=Décompte -CTL_Precount1Bar=Décompte 1 mesure - Utiliser shift-click pour change le mode de décompte -CTL_Precount2Bar=Décompte 2 mesures - Utiliser shift-click pour change le mode de décompte -CTL_PrecountBarAuto=Décompte auto - Utiliser shift-click pour change le mode de décompte -CTL_SetActive=Activer/Désactiver (ON/OFF) -CTL_SetActivePopupAction=Activer/Désactiver (ON/OFF) -CTL_SetActiveToolTip=Définir le projet actif pour lequel les messages Midi sont envoyés [O] +CTL_PlaySelection=Lecture de la s\u00c3\u00a9lection +CTL_PlayToolTip=D\u00c3\u00a9marrer/Suspendre la lecture (touche espace) +CTL_PlaybackToNextSongPart=\u00c3\u0089l\u00c3\u00a9ment de structure suivant +CTL_PlaybackToNextSongPartTooltip=Jouer l'\u00c3\u00a9l\u00c3\u00a9ment de structure suivant (F2) +CTL_PlaybackToPreviousSongPart=\u00c3\u0089l\u00c3\u00a9ment de structure pr\u00c3\u00a9c\u00c3\u00a9dent +CTL_PlaybackToPreviousSongPartTooltip=Jouer l'\u00c3\u00a9l\u00c3\u00a9ment de structure pr\u00c3\u00a9c\u00c3\u00a9dent (F1) +CTL_RestartPlayback=Red\u00c3\u00a9marrer depuis le d\u00c3\u00a9but (F3) +CTL_Precount=D\u00c3\u00a9compte +CTL_Precount1Bar=D\u00c3\u00a9compte 1 mesure - Utiliser shift-click pour change le mode de d\u00c3\u00a9compte +CTL_Precount2Bar=D\u00c3\u00a9compte 2 mesures - Utiliser shift-click pour change le mode de d\u00c3\u00a9compte +CTL_PrecountBarAuto=D\u00c3\u00a9compte auto - Utiliser shift-click pour change le mode de d\u00c3\u00a9compte +CTL_SetActive=Activer/D\u00c3\u00a9sactiver (ON/OFF) +CTL_SetActivePopupAction=Activer/D\u00c3\u00a9sactiver (ON/OFF) +CTL_SetActiveToolTip=D\u00c3\u00a9finir le projet actif pour lequel les messages Midi sont envoy\u00c3\u00a9s [O] CTL_ShowPlaybackPoint=Afficher la mesure en cours de lecture CTL_ShowPlaybackTooltip=Rendre visible la mesure en cours de lecture CTL_Stop=Stop -CTL_StopTooltip=Arrêter la lecture (touche shift-espace) -CTL_TransposePlaybackKey=Changer la tonalité de lecture -ControlToolbarPanel.fbtn_Active.toolTipText=Si "ON", le projet est actif et les messages Midi sont activés. Un seul projet peut être actif à la fois. +CTL_StopTooltip=Arr\u00c3\u00aater la lecture (touche shift-espace) +CTL_TransposePlaybackKey=Changer la tonalit\u00c3\u00a9 de lecture +ControlToolbarPanel.fbtn_Active.toolTipText=Si "ON", le projet est actif et les messages Midi sont activ\u00c3\u00a9s. Un seul projet peut \u00c3\u00aatre actif \u00c3\u00a0 la fois. ControlToolbarPanel.fbtn_Click.toolTipText=Click ControlToolbarPanel.fbtn_Pause.toolTipText=Suspendre la lecture -ControlToolbarPanel.fbtn_Precount.toolTipText=décompte avant la lecture +ControlToolbarPanel.fbtn_Precount.toolTipText=d\u00c3\u00a9compte avant la lecture ControlToolbarPanel.posViewer.toolTipText=Position actuelle (mesure\:temps) ControlToolbarPanel.spn_Tempo.toolTipText=Tempo de lecture. Utilisez J ou - pour diminuer le tempo, K ou + pour l'augmenter. -ERR_BadSelection=Les première et dernière mesure sélectionnées ne sont pas compatibles avec les éléments de structure. -ERR_CantPlayFromHere=Impossible de démarrer la lecture à partir d'ici. Sélectionnez d'abord une mesure valide dans l'éditeur de grille, ou un élément de structure dans l'éditeur de grille. -ERR_InvalidPlayableSelection=Impossible de démarrer la lecture de cette sélection \: {0} -ERR_NeedContiguousSelection=Les mesures sélectionnées doivent être contiguës. -ERR_NotActive=Impossible de démarrer la lecture à partir d'ici\: le projet n'est pas actif +ERR_BadSelection=Les premi\u00c3\u00a8re et derni\u00c3\u00a8re mesure s\u00c3\u00a9lectionn\u00c3\u00a9es ne sont pas compatibles avec les \u00c3\u00a9l\u00c3\u00a9ments de structure. +ERR_CantPlayFromHere=Impossible de d\u00c3\u00a9marrer la lecture \u00c3\u00a0 partir d'ici. S\u00c3\u00a9lectionnez d'abord une mesure valide dans l'\u00c3\u00a9diteur de grille, ou un \u00c3\u00a9l\u00c3\u00a9ment de structure dans l'\u00c3\u00a9diteur de grille. +ERR_InvalidPlayableSelection=Impossible de d\u00c3\u00a9marrer la lecture de cette s\u00c3\u00a9lection \: {0} +ERR_NeedContiguousSelection=Les mesures s\u00c3\u00a9lectionn\u00c3\u00a9es doivent \u00c3\u00aatre contigu\u00c3\u00abs. +ERR_NotActive=Impossible de d\u00c3\u00a9marrer la lecture \u00c3\u00a0 partir d'ici\: le projet n'est pas actif FixMidiMixDialog.btn_Cancel.text=Annuler FixMidiMixDialog.btn_fix.text=Corriger FixMidiMixDialog.btn_skip.text=Ignorer FixMidiMixDialog.cb_rememberMyChoice.text=Se souvenir de mon choix pendant cette session -FixMidiMixDialog.lbl_firstLine.text=Des problèmes potentiels de configuration Midi ont été détectés. OK pour les corriger ? -FixMidiMixDialog.lbl_fixInstrumentTitle.text=Les instruments suivants doivent être remplacés pour s'adapter à la configuration du synthé de sortie\: -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Les canaux batterie/percussion suivants doivent être redirigés vers le canal 10 \: -MIDI_CONFIGURATION_PROBLEMS=Problèmes de configuration Midi -TransposePlaybackKeyDialog.btn_Cancel.text=Annuler -TransposePlaybackKeyDialog.btn_Ok.text=OK -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Activer la transposition pendant la lecture -TransposePlaybackKeyDialog.helpTextArea1.text=Change la tonalité (transposition des accords de la grille) lors du playback. +FixMidiMixDialog.lbl_firstLine.text=Des probl\u00c3\u00a8mes potentiels de configuration Midi ont \u00c3\u00a9t\u00c3\u00a9 d\u00c3\u00a9tect\u00c3\u00a9s. OK pour les corriger ? +FixMidiMixDialog.lbl_fixInstrumentTitle.text=Les instruments suivants doivent \u00c3\u00aatre remplac\u00c3\u00a9s pour s'adapter \u00c3\u00a0 la configuration du synth\u00c3\u00a9 de sortie\: +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Les canaux batterie/percussion suivants doivent \u00c3\u00aatre redirig\u00c3\u00a9s vers le canal 10 \: +MIDI_CONFIGURATION_PROBLEMS=Probl\u00c3\u00a8mes de configuration Midi +TransposeDisplayDialog.btn_Cancel.text=Annuler +TransposeDisplayDialog.btn_Ok.text=OK +TransposeDisplayDialog.helpTextArea1.text=Change la tonalit\u00c3\u00a9 (transposition des accords de la grille) lors du playback. +TransposeDisplayDialog.cb_enableTransposition.text=Activer la transposition pendant la lecture diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_id_ID.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_id_ID.properties index e05b75b583..63b943e226 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_id_ID.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_id_ID.properties @@ -50,7 +50,7 @@ FixMidiMixDialog.lbl_firstLine.text=Potential Midi configuration problems detect FixMidiMixDialog.lbl_fixInstrumentTitle.text=The following instruments should be replaced to fit the current output synth configuration\: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=The following drums channels should be rerouted to channel 10\: MIDI_CONFIGURATION_PROBLEMS=Midi Configuration Problems -TransposePlaybackKeyDialog.btn_Cancel.text=Batalkan -TransposePlaybackKeyDialog.btn_Ok.text=OK -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Enable key transposition during playback -TransposePlaybackKeyDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +TransposeDisplayDialog.btn_Cancel.text=Batalkan +TransposeDisplayDialog.btn_Ok.text=OK +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +TransposeDisplayDialog.cb_enableTransposition.text=Enable key transposition during playback diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_it_IT.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_it_IT.properties index fe045baf70..37474f0ffa 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_it_IT.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_it_IT.properties @@ -1,5 +1,5 @@ -AutoUpdateOFFtooltip=L'aggiornamento automatico è disattivato\: si è verificato un cambiamento strutturale del brano, la riproduzione della musica non è più aggiornata in tempo reale. Ferma la riproduzione della musica per riattivare la modalità di aggiornamento automatico. -AutoUpdateONtooltip=L'aggiornamento automatico è attivo\: la riproduzione della musica viene aggiornata in tempo reale con i cambiamenti dei brani (tranne i cambiamenti strutturali) +AutoUpdateOFFtooltip=L'aggiornamento automatico \u00c3\u00a8 disattivato\: si \u00c3\u00a8 verificato un cambiamento strutturale del brano, la riproduzione della musica non \u00c3\u00a8 pi\u00c3\u00b9 aggiornata in tempo reale. Ferma la riproduzione della musica per riattivare la modalit\u00c3\u00a0 di aggiornamento automatico. +AutoUpdateONtooltip=L'aggiornamento automatico \u00c3\u00a8 attivo\: la riproduzione della musica viene aggiornata in tempo reale con i cambiamenti dei brani (tranne i cambiamenti strutturali) CTL_Click=Metronomo CTL_ClickTooltip=Metronomo CTL_ControlToolbarAction=Toolbar controllo musica @@ -20,9 +20,9 @@ CTL_PlaybackToPreviousSongPart=Parte del brano precedente CTL_PlaybackToPreviousSongPartTooltip=Riproduce la parte precedente del brano (F1) CTL_RestartPlayback=Restart playback (F3) CTL_Precount=Preconteggio -CTL_Precount1Bar=Precount 1 battuta - Usa maiuscolo-click per cambiare la modalità di precount -CTL_Precount2Bar=Precount 2 battuta - Usa maiuscolo-click per cambiare la modalità di precount -CTL_PrecountBarAuto=Precount automatico - Usa maiuscolo-click per cambiare la modalità di precount +CTL_Precount1Bar=Precount 1 battuta - Usa maiuscolo-click per cambiare la modalit\u00c3\u00a0 di precount +CTL_Precount2Bar=Precount 2 battuta - Usa maiuscolo-click per cambiare la modalit\u00c3\u00a0 di precount +CTL_PrecountBarAuto=Precount automatico - Usa maiuscolo-click per cambiare la modalit\u00c3\u00a0 di precount CTL_SetActive=Attiva/Disattiva (ON/OFF) CTL_SetActivePopupAction=Attiva/Disattiva (ON/OFF) CTL_SetActiveToolTip=Imposta il brano per il quale i messaggi Midi sono abilitati [O] @@ -31,17 +31,17 @@ CTL_ShowPlaybackTooltip=Evidenzia la battuta in riproduzione CTL_Stop=Stop CTL_StopTooltip=Stop playback CTL_TransposePlaybackKey=Trasposizione -ControlToolbarPanel.fbtn_Active.toolTipText=Se ON, il brano è attivo ed i messaggi Midi sono abilitati. Solo un brano alla volta può essere attivo. +ControlToolbarPanel.fbtn_Active.toolTipText=Se ON, il brano \u00c3\u00a8 attivo ed i messaggi Midi sono abilitati. Solo un brano alla volta pu\u00c3\u00b2 essere attivo. ControlToolbarPanel.fbtn_Click.toolTipText=Metronomo ControlToolbarPanel.fbtn_Pause.toolTipText=Pausa riproduzione ControlToolbarPanel.fbtn_Precount.toolTipText=precount prima di iniziare la riproduzione ControlToolbarPanel.posViewer.toolTipText=Posizione attuale (battuta\:tempo) ControlToolbarPanel.spn_Tempo.toolTipText=Tempo di riproduzione. Utilizzare J oppure - per diminuire il tempo, K oppure + per aumentarlo. ERR_BadSelection=La prima e l'ultima battuta selezionate non corrispondono correttamente alle parti del brano. -ERR_CantPlayFromHere=Non è possibile riprodurre da qui. È necessario selezionare una battuta valida nell'editor dello spartito accordi, oppure una parte del brano nell'editor della struttura brano. +ERR_CantPlayFromHere=Non \u00c3\u00a8 possibile riprodurre da qui. \u00c3\u0088 necessario selezionare una battuta valida nell'editor dello spartito accordi, oppure una parte del brano nell'editor della struttura brano. ERR_InvalidPlayableSelection=Impossibile riprodurre questa selezione\: {0} ERR_NeedContiguousSelection=Le battute o le parti del brano selezionate devono essere contigue. -ERR_NotActive=Impossibile riprodurre da qui\: il brano non è attivo +ERR_NotActive=Impossibile riprodurre da qui\: il brano non \u00c3\u00a8 attivo FixMidiMixDialog.btn_Cancel.text=Annulla FixMidiMixDialog.btn_fix.text=Correggi FixMidiMixDialog.btn_skip.text=Ignora @@ -50,7 +50,7 @@ FixMidiMixDialog.lbl_firstLine.text=Rilevati potenziali problemi di configurazio FixMidiMixDialog.lbl_fixInstrumentTitle.text=I seguenti strumenti dovrebbero essere sostituiti per adattarsi alla configurazione del synth di output in uso\: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=I seguenti canali della batteria dovrebbero essere reindirizzati al canale 10\: MIDI_CONFIGURATION_PROBLEMS=Problemi Di Configurazione Midi -TransposePlaybackKeyDialog.btn_Cancel.text=Annulla -TransposePlaybackKeyDialog.btn_Ok.text=Conferma -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Abilita la trasposizione durante la riproduzione -TransposePlaybackKeyDialog.helpTextArea1.text=Cambia chiave durante la riproduzione del brano (trasponi i simboli degli accordi). +TransposeDisplayDialog.btn_Cancel.text=Annulla +TransposeDisplayDialog.btn_Ok.text=Conferma +TransposeDisplayDialog.helpTextArea1.text=Cambia chiave durante la riproduzione del brano (trasponi i simboli degli accordi). +TransposeDisplayDialog.cb_enableTransposition.text=Abilita la trasposizione durante la riproduzione diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ja_JP.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ja_JP.properties index a9cf4750e3..7ce99b98cb 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ja_JP.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ja_JP.properties @@ -19,7 +19,7 @@ CTL_PlaybackToNextSongPartTooltip=Play next song part (F2) CTL_PlaybackToPreviousSongPart=Previous song part CTL_PlaybackToPreviousSongPartTooltip=Play previous song part (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=カウントイン +CTL_Precount=\u00e3\u0082\u00ab\u00e3\u0082\u00a6\u00e3\u0083\u00b3\u00e3\u0083\u0088\u00e3\u0082\u00a4\u00e3\u0083\u00b3 CTL_Precount1Bar=Precount 1 bar - Use shift-click to change precount mode CTL_Precount2Bar=Precount 2 bars - Use shift-click to change precount mode CTL_PrecountBarAuto=Precount Auto mode - Use shift-click to change precount mode @@ -42,15 +42,15 @@ ERR_CantPlayFromHere=Can''''t play from here. Select first on a valid bar in the ERR_InvalidPlayableSelection=Can''t play this selection\: {0} ERR_NeedContiguousSelection=Selected bars/songs parts need to be contiguous. ERR_NotActive=Can't play from here\: song is not active -FixMidiMixDialog.btn_Cancel.text=キャンセル -FixMidiMixDialog.btn_fix.text=修正 -FixMidiMixDialog.btn_skip.text=無視 -FixMidiMixDialog.cb_rememberMyChoice.text=このセッションの間は選択内容を保持する -FixMidiMixDialog.lbl_firstLine.text=潜在的なMIDI設定の問題が検出されました。修正しますか? -FixMidiMixDialog.lbl_fixInstrumentTitle.text=現在の出力シンセ構成に合わせて、以下の楽器を置き換える必要があります。 -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=次のドラムチャンネルをチャンネル10に再ルーティングします。 -MIDI_CONFIGURATION_PROBLEMS=MIDI構成の問題 -TransposePlaybackKeyDialog.btn_Cancel.text=キャンセル -TransposePlaybackKeyDialog.btn_Ok.text=OK -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Enable key transposition during playback -TransposePlaybackKeyDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +FixMidiMixDialog.btn_Cancel.text=\u00e3\u0082\u00ad\u00e3\u0083\u00a3\u00e3\u0083\u00b3\u00e3\u0082\u00bb\u00e3\u0083\u00ab +FixMidiMixDialog.btn_fix.text=\u00e4\u00bf\u00ae\u00e6\u00ad\u00a3 +FixMidiMixDialog.btn_skip.text=\u00e7\u0084\u00a1\u00e8\u00a6\u0096 +FixMidiMixDialog.cb_rememberMyChoice.text=\u00e3\u0081\u0093\u00e3\u0081\u00ae\u00e3\u0082\u00bb\u00e3\u0083\u0083\u00e3\u0082\u00b7\u00e3\u0083\u00a7\u00e3\u0083\u00b3\u00e3\u0081\u00ae\u00e9\u0096\u0093\u00e3\u0081\u00af\u00e9\u0081\u00b8\u00e6\u008a\u009e\u00e5\u0086\u0085\u00e5\u00ae\u00b9\u00e3\u0082\u0092\u00e4\u00bf\u009d\u00e6\u008c\u0081\u00e3\u0081\u0099\u00e3\u0082\u008b +FixMidiMixDialog.lbl_firstLine.text=\u00e6\u00bd\u009c\u00e5\u009c\u00a8\u00e7\u009a\u0084\u00e3\u0081\u00aaMIDI\u00e8\u00a8\u00ad\u00e5\u00ae\u009a\u00e3\u0081\u00ae\u00e5\u0095\u008f\u00e9\u00a1\u008c\u00e3\u0081\u008c\u00e6\u00a4\u009c\u00e5\u0087\u00ba\u00e3\u0081\u0095\u00e3\u0082\u008c\u00e3\u0081\u00be\u00e3\u0081\u0097\u00e3\u0081\u009f\u00e3\u0080\u0082\u00e4\u00bf\u00ae\u00e6\u00ad\u00a3\u00e3\u0081\u0097\u00e3\u0081\u00be\u00e3\u0081\u0099\u00e3\u0081\u008b\u00ef\u00bc\u009f +FixMidiMixDialog.lbl_fixInstrumentTitle.text=\u00e7\u008f\u00be\u00e5\u009c\u00a8\u00e3\u0081\u00ae\u00e5\u0087\u00ba\u00e5\u008a\u009b\u00e3\u0082\u00b7\u00e3\u0083\u00b3\u00e3\u0082\u00bb\u00e6\u00a7\u008b\u00e6\u0088\u0090\u00e3\u0081\u00ab\u00e5\u0090\u0088\u00e3\u0082\u008f\u00e3\u0081\u009b\u00e3\u0081\u00a6\u00e3\u0080\u0081\u00e4\u00bb\u00a5\u00e4\u00b8\u008b\u00e3\u0081\u00ae\u00e6\u00a5\u00bd\u00e5\u0099\u00a8\u00e3\u0082\u0092\u00e7\u00bd\u00ae\u00e3\u0081\u008d\u00e6\u008f\u009b\u00e3\u0081\u0088\u00e3\u0082\u008b\u00e5\u00bf\u0085\u00e8\u00a6\u0081\u00e3\u0081\u008c\u00e3\u0081\u0082\u00e3\u0082\u008a\u00e3\u0081\u00be\u00e3\u0081\u0099\u00e3\u0080\u0082 +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=\u00e6\u00ac\u00a1\u00e3\u0081\u00ae\u00e3\u0083\u0089\u00e3\u0083\u00a9\u00e3\u0083\u00a0\u00e3\u0083\u0081\u00e3\u0083\u00a3\u00e3\u0083\u00b3\u00e3\u0083\u008d\u00e3\u0083\u00ab\u00e3\u0082\u0092\u00e3\u0083\u0081\u00e3\u0083\u00a3\u00e3\u0083\u00b3\u00e3\u0083\u008d\u00e3\u0083\u00ab10\u00e3\u0081\u00ab\u00e5\u0086\u008d\u00e3\u0083\u00ab\u00e3\u0083\u00bc\u00e3\u0083\u0086\u00e3\u0082\u00a3\u00e3\u0083\u00b3\u00e3\u0082\u00b0\u00e3\u0081\u0097\u00e3\u0081\u00be\u00e3\u0081\u0099\u00e3\u0080\u0082 +MIDI_CONFIGURATION_PROBLEMS=MIDI\u00e6\u00a7\u008b\u00e6\u0088\u0090\u00e3\u0081\u00ae\u00e5\u0095\u008f\u00e9\u00a1\u008c +TransposeDisplayDialog.btn_Cancel.text=\u00e3\u0082\u00ad\u00e3\u0083\u00a3\u00e3\u0083\u00b3\u00e3\u0082\u00bb\u00e3\u0083\u00ab +TransposeDisplayDialog.btn_Ok.text=OK +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +TransposeDisplayDialog.cb_enableTransposition.text=Enable key transposition during playback diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ko_KR.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ko_KR.properties index b156b38252..a9ad10969f 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ko_KR.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ko_KR.properties @@ -19,7 +19,7 @@ CTL_PlaybackToNextSongPartTooltip=Play next song part (F2) CTL_PlaybackToPreviousSongPart=Previous song part CTL_PlaybackToPreviousSongPartTooltip=Play previous song part (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=예비박 +CTL_Precount=\u00ec\u0098\u0088\u00eb\u00b9\u0084\u00eb\u00b0\u0095 CTL_Precount1Bar=Precount 1 bar - Use shift-click to change precount mode CTL_Precount2Bar=Precount 2 bars - Use shift-click to change precount mode CTL_PrecountBarAuto=Precount Auto mode - Use shift-click to change precount mode @@ -42,7 +42,7 @@ ERR_CantPlayFromHere=Can''''t play from here. Select first on a valid bar in the ERR_InvalidPlayableSelection=Can''t play this selection\: {0} ERR_NeedContiguousSelection=Selected bars/songs parts need to be contiguous. ERR_NotActive=Can't play from here\: song is not active -FixMidiMixDialog.btn_Cancel.text=취소 +FixMidiMixDialog.btn_Cancel.text=\u00ec\u00b7\u00a8\u00ec\u0086\u008c FixMidiMixDialog.btn_fix.text=Fix FixMidiMixDialog.btn_skip.text=Ignore FixMidiMixDialog.cb_rememberMyChoice.text=Remember my choice during this session @@ -50,7 +50,7 @@ FixMidiMixDialog.lbl_firstLine.text=Potential Midi configuration problems detect FixMidiMixDialog.lbl_fixInstrumentTitle.text=The following instruments should be replaced to fit the current output synth configuration\: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=The following drums channels should be rerouted to channel 10\: MIDI_CONFIGURATION_PROBLEMS=Midi Configuration Problems -TransposePlaybackKeyDialog.btn_Cancel.text=취소 -TransposePlaybackKeyDialog.btn_Ok.text=확인 -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Enable key transposition during playback -TransposePlaybackKeyDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +TransposeDisplayDialog.btn_Cancel.text=\u00ec\u00b7\u00a8\u00ec\u0086\u008c +TransposeDisplayDialog.btn_Ok.text=\u00ed\u0099\u0095\u00ec\u009d\u00b8 +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +TransposeDisplayDialog.cb_enableTransposition.text=Enable key transposition during playback diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_no_NO.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_no_NO.properties index d008cbadc7..47a44f222c 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_no_NO.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_no_NO.properties @@ -50,7 +50,7 @@ FixMidiMixDialog.lbl_firstLine.text=Potential Midi configuration problems detect FixMidiMixDialog.lbl_fixInstrumentTitle.text=The following instruments should be replaced to fit the current output synth configuration\: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=The following drums channels should be rerouted to channel 10\: MIDI_CONFIGURATION_PROBLEMS=Midi Configuration Problems -TransposePlaybackKeyDialog.btn_Cancel.text=Cancel -TransposePlaybackKeyDialog.btn_Ok.text=OK -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Enable key transposition during playback -TransposePlaybackKeyDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +TransposeDisplayDialog.btn_Cancel.text=Cancel +TransposeDisplayDialog.btn_Ok.text=OK +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +TransposeDisplayDialog.cb_enableTransposition.text=Enable key transposition during playback diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_pt_BR.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_pt_BR.properties index b9ac0641ab..ebc14b2193 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_pt_BR.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_pt_BR.properties @@ -1,56 +1,56 @@ -AutoUpdateOFFtooltip=Atualização Automática Está DESABILITADA\: Ocorreu Uma Alteração Estrutural na Música, a Reprodução da Música Não Será Mais Atualizada em Tempo Real. Parar a Reprodução da Música Para Reabilitar o Modo de Atualização Automática. -AutoUpdateONtooltip=Atualização Automática Está HABILITADA\: A Reprodução da Música é Atualizada em Tempo Real Com as Alterações da Música (Exceto Alterações Estruturais) +AutoUpdateOFFtooltip=Atualiza\u00c3\u00a7\u00c3\u00a3o Autom\u00c3\u00a1tica Est\u00c3\u00a1 DESABILITADA\: Ocorreu Uma Altera\u00c3\u00a7\u00c3\u00a3o Estrutural na M\u00c3\u00basica, a Reprodu\u00c3\u00a7\u00c3\u00a3o da M\u00c3\u00basica N\u00c3\u00a3o Ser\u00c3\u00a1 Mais Atualizada em Tempo Real. Parar a Reprodu\u00c3\u00a7\u00c3\u00a3o da M\u00c3\u00basica Para Reabilitar o Modo de Atualiza\u00c3\u00a7\u00c3\u00a3o Autom\u00c3\u00a1tica. +AutoUpdateONtooltip=Atualiza\u00c3\u00a7\u00c3\u00a3o Autom\u00c3\u00a1tica Est\u00c3\u00a1 HABILITADA\: A Reprodu\u00c3\u00a7\u00c3\u00a3o da M\u00c3\u00basica \u00c3\u00a9 Atualizada em Tempo Real Com as Altera\u00c3\u00a7\u00c3\u00b5es da M\u00c3\u00basica (Exceto Altera\u00c3\u00a7\u00c3\u00b5es Estruturais) CTL_Click=Clique -CTL_ClickTooltip=Clique durante a reprodução -CTL_ControlToolbarAction=Barra de Controle da Música -CTL_CurrentPlaybackTransposition=Tom atual da reprodução\: {0} +CTL_ClickTooltip=Clique durante a reprodu\u00c3\u00a7\u00c3\u00a3o +CTL_ControlToolbarAction=Barra de Controle da M\u00c3\u00basica +CTL_CurrentPlaybackTransposition=Tom atual da reprodu\u00c3\u00a7\u00c3\u00a3o\: {0} CTL_DecreaseTempo=Reduzir Andamento CTL_IncreaseTempo=Aumentar Andamento CTL_Loop=Loop -CTL_LoopTooltip=Reprodução em loop (L) +CTL_LoopTooltip=Reprodu\u00c3\u00a7\u00c3\u00a3o em loop (L) CTL_Pause=Pausar -CTL_PauseTooltip=Pausar reprodução (espaço) +CTL_PauseTooltip=Pausar reprodu\u00c3\u00a7\u00c3\u00a3o (espa\u00c3\u00a7o) CTL_Play=Reproduzir CTL_PlayFromHere=Reproduzir a partir daqui -CTL_PlaySelection=Reproduzir seleção -CTL_PlayToolTip=Iniciar/Pausar reprodução (espaço) -CTL_PlaybackToNextSongPart=Próxima parte da música -CTL_PlaybackToNextSongPartTooltip=Tocar próxima parte da música (F2) -CTL_PlaybackToPreviousSongPart=Parte anterior da música -CTL_PlaybackToPreviousSongPartTooltip=Tocar parte anterior da música (F1) +CTL_PlaySelection=Reproduzir sele\u00c3\u00a7\u00c3\u00a3o +CTL_PlayToolTip=Iniciar/Pausar reprodu\u00c3\u00a7\u00c3\u00a3o (espa\u00c3\u00a7o) +CTL_PlaybackToNextSongPart=Pr\u00c3\u00b3xima parte da m\u00c3\u00basica +CTL_PlaybackToNextSongPartTooltip=Tocar pr\u00c3\u00b3xima parte da m\u00c3\u00basica (F2) +CTL_PlaybackToPreviousSongPart=Parte anterior da m\u00c3\u00basica +CTL_PlaybackToPreviousSongPartTooltip=Tocar parte anterior da m\u00c3\u00basica (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=Pré-contagem -CTL_Precount1Bar=Pré-contar 1 compasso - Use shift-clique para alterar o modo de pré-contagem -CTL_Precount2Bar=Pré-contar 2 compassos - Use shift-clique para alterar o modo de pré-contagem -CTL_PrecountBarAuto=Pré-contagem automática - Use shift-clique para alterar o modo de pré-contagem +CTL_Precount=Pr\u00c3\u00a9-contagem +CTL_Precount1Bar=Pr\u00c3\u00a9-contar 1 compasso - Use shift-clique para alterar o modo de pr\u00c3\u00a9-contagem +CTL_Precount2Bar=Pr\u00c3\u00a9-contar 2 compassos - Use shift-clique para alterar o modo de pr\u00c3\u00a9-contagem +CTL_PrecountBarAuto=Pr\u00c3\u00a9-contagem autom\u00c3\u00a1tica - Use shift-clique para alterar o modo de pr\u00c3\u00a9-contagem CTL_SetActive=Ativar/ Desativar (ON/OFF) CTL_SetActivePopupAction=Ativar/ Desativar (ON/OFF) -CTL_SetActiveToolTip=Especificar a música para a qual as mensagens Midi estão ativadas [O] -CTL_ShowPlaybackPoint=Exibir ponto da reprodução +CTL_SetActiveToolTip=Especificar a m\u00c3\u00basica para a qual as mensagens Midi est\u00c3\u00a3o ativadas [O] +CTL_ShowPlaybackPoint=Exibir ponto da reprodu\u00c3\u00a7\u00c3\u00a3o CTL_ShowPlaybackTooltip=Destacar o compasso sendo tocado CTL_Stop=Parar -CTL_StopTooltip=Parar reprodução (shift + espaço) -CTL_TransposePlaybackKey=Transpor tom da reprodução -ControlToolbarPanel.fbtn_Active.toolTipText=Se LIGADO, a música e as mensagens Midi estarão ativas. Apenas uma música pode estar ativa por vez. +CTL_StopTooltip=Parar reprodu\u00c3\u00a7\u00c3\u00a3o (shift + espa\u00c3\u00a7o) +CTL_TransposePlaybackKey=Transpor tom da reprodu\u00c3\u00a7\u00c3\u00a3o +ControlToolbarPanel.fbtn_Active.toolTipText=Se LIGADO, a m\u00c3\u00basica e as mensagens Midi estar\u00c3\u00a3o ativas. Apenas uma m\u00c3\u00basica pode estar ativa por vez. ControlToolbarPanel.fbtn_Click.toolTipText=Clique -ControlToolbarPanel.fbtn_Pause.toolTipText=Pausar a reprodução -ControlToolbarPanel.fbtn_Precount.toolTipText=pré-contagem antes de iniciar a reprodução -ControlToolbarPanel.posViewer.toolTipText=Posição atual (compasso\:tempo) -ControlToolbarPanel.spn_Tempo.toolTipText=Tempo de andamento da reprodução. Use J ou - para diminuir, K ou + para aumentar. -ERR_BadSelection=O primeiro e o último compassos selecionados não combinam corretamente com partes da música. -ERR_CantPlayFromHere=Não é possível reproduzir a partir daqui. Selecione primeiro um compasso válido no editor da folha de acordes ou em uma parte da música no editor de estrutura da música. -ERR_InvalidPlayableSelection=Não é possível reproduzir esta seleção\: {0} -ERR_NeedContiguousSelection=Os compassos/partes da música selecionados precisam estar adjacentes. -ERR_NotActive=Não é possível reproduzir daqui\: a música não está ativa +ControlToolbarPanel.fbtn_Pause.toolTipText=Pausar a reprodu\u00c3\u00a7\u00c3\u00a3o +ControlToolbarPanel.fbtn_Precount.toolTipText=pr\u00c3\u00a9-contagem antes de iniciar a reprodu\u00c3\u00a7\u00c3\u00a3o +ControlToolbarPanel.posViewer.toolTipText=Posi\u00c3\u00a7\u00c3\u00a3o atual (compasso\:tempo) +ControlToolbarPanel.spn_Tempo.toolTipText=Tempo de andamento da reprodu\u00c3\u00a7\u00c3\u00a3o. Use J ou - para diminuir, K ou + para aumentar. +ERR_BadSelection=O primeiro e o \u00c3\u00baltimo compassos selecionados n\u00c3\u00a3o combinam corretamente com partes da m\u00c3\u00basica. +ERR_CantPlayFromHere=N\u00c3\u00a3o \u00c3\u00a9 poss\u00c3\u00advel reproduzir a partir daqui. Selecione primeiro um compasso v\u00c3\u00a1lido no editor da folha de acordes ou em uma parte da m\u00c3\u00basica no editor de estrutura da m\u00c3\u00basica. +ERR_InvalidPlayableSelection=N\u00c3\u00a3o \u00c3\u00a9 poss\u00c3\u00advel reproduzir esta sele\u00c3\u00a7\u00c3\u00a3o\: {0} +ERR_NeedContiguousSelection=Os compassos/partes da m\u00c3\u00basica selecionados precisam estar adjacentes. +ERR_NotActive=N\u00c3\u00a3o \u00c3\u00a9 poss\u00c3\u00advel reproduzir daqui\: a m\u00c3\u00basica n\u00c3\u00a3o est\u00c3\u00a1 ativa FixMidiMixDialog.btn_Cancel.text=Cancelar FixMidiMixDialog.btn_fix.text=Corrigir FixMidiMixDialog.btn_skip.text=Ignorar -FixMidiMixDialog.cb_rememberMyChoice.text=Lembrar minha escolha durante esta sessão -FixMidiMixDialog.lbl_firstLine.text=Possíveis problemas de configuração Midi detectados. Deseja corrigi-los? -FixMidiMixDialog.lbl_fixInstrumentTitle.text=Os seguintes instrumentos devem ser substituídos para se adequarem à configuração atual de sintetizador de saída\: +FixMidiMixDialog.cb_rememberMyChoice.text=Lembrar minha escolha durante esta sess\u00c3\u00a3o +FixMidiMixDialog.lbl_firstLine.text=Poss\u00c3\u00adveis problemas de configura\u00c3\u00a7\u00c3\u00a3o Midi detectados. Deseja corrigi-los? +FixMidiMixDialog.lbl_fixInstrumentTitle.text=Os seguintes instrumentos devem ser substitu\u00c3\u00addos para se adequarem \u00c3\u00a0 configura\u00c3\u00a7\u00c3\u00a3o atual de sintetizador de sa\u00c3\u00adda\: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Os seguintes canais de tambores devem ser reencaminhados para o canal 10\: -MIDI_CONFIGURATION_PROBLEMS=Problemas de Configuração Midi -TransposePlaybackKeyDialog.btn_Cancel.text=Cancelar -TransposePlaybackKeyDialog.btn_Ok.text=OK -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Habilitar a transposição de tom durante a reprodução -TransposePlaybackKeyDialog.helpTextArea1.text=Alterar tom (transpor cifras de acorde) ao tocar uma música. +MIDI_CONFIGURATION_PROBLEMS=Problemas de Configura\u00c3\u00a7\u00c3\u00a3o Midi +TransposeDisplayDialog.btn_Cancel.text=Cancelar +TransposeDisplayDialog.btn_Ok.text=OK +TransposeDisplayDialog.helpTextArea1.text=Alterar tom (transpor cifras de acorde) ao tocar uma m\u00c3\u00basica. +TransposeDisplayDialog.cb_enableTransposition.text=Habilitar a transposi\u00c3\u00a7\u00c3\u00a3o de tom durante a reprodu\u00c3\u00a7\u00c3\u00a3o diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ru_RU.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ru_RU.properties index cf4381b10b..327cca593d 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ru_RU.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ru_RU.properties @@ -19,7 +19,7 @@ CTL_PlaybackToNextSongPartTooltip=Play next song part (F2) CTL_PlaybackToPreviousSongPart=Previous song part CTL_PlaybackToPreviousSongPartTooltip=Play previous song part (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=Предварительный отсчёт +CTL_Precount=\u00d0\u009f\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00b2\u00d0\u00b0\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d1\u008b\u00d0\u00b9 \u00d0\u00be\u00d1\u0082\u00d1\u0081\u00d1\u0087\u00d1\u0091\u00d1\u0082 CTL_Precount1Bar=Precount 1 bar - Use shift-click to change precount mode CTL_Precount2Bar=Precount 2 bars - Use shift-click to change precount mode CTL_PrecountBarAuto=Precount Auto mode - Use shift-click to change precount mode @@ -42,7 +42,7 @@ ERR_CantPlayFromHere=Can''''t play from here. Select first on a valid bar in the ERR_InvalidPlayableSelection=Can''t play this selection\: {0} ERR_NeedContiguousSelection=Selected bars/songs parts need to be contiguous. ERR_NotActive=Can't play from here\: song is not active -FixMidiMixDialog.btn_Cancel.text=Сброс +FixMidiMixDialog.btn_Cancel.text=\u00d0\u00a1\u00d0\u00b1\u00d1\u0080\u00d0\u00be\u00d1\u0081 FixMidiMixDialog.btn_fix.text=Fix FixMidiMixDialog.btn_skip.text=Ignore FixMidiMixDialog.cb_rememberMyChoice.text=Remember my choice during this session @@ -50,7 +50,7 @@ FixMidiMixDialog.lbl_firstLine.text=Potential Midi configuration problems detect FixMidiMixDialog.lbl_fixInstrumentTitle.text=The following instruments should be replaced to fit the current output synth configuration\: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=The following drums channels should be rerouted to channel 10\: MIDI_CONFIGURATION_PROBLEMS=Midi Configuration Problems -TransposePlaybackKeyDialog.btn_Cancel.text=Сброс -TransposePlaybackKeyDialog.btn_Ok.text=OK -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Enable key transposition during playback -TransposePlaybackKeyDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +TransposeDisplayDialog.btn_Cancel.text=\u00d0\u00a1\u00d0\u00b1\u00d1\u0080\u00d0\u00be\u00d1\u0081 +TransposeDisplayDialog.btn_Ok.text=OK +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +TransposeDisplayDialog.cb_enableTransposition.text=Enable key transposition during playback diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_uk_UA.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_uk_UA.properties index f91ac6b2ea..c67df4a749 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_uk_UA.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_uk_UA.properties @@ -1,56 +1,56 @@ -AutoUpdateOFFtooltip=Автоматичне оновлення ВИМКНЕНО\: структуру пісні змінено. Музика, що відтворюється, більше не оновлюється в реальному часі. Зупиніть відтворення музики, щоб знову активувати режим автоматичного оновлення. -AutoUpdateONtooltip=Увімкнено автоматичне оновлення\: відтворена музика оновлюється в режимі реального часу, коли відбуваються зміни (за винятком структурних змін) -CTL_Click=Метроном -CTL_ClickTooltip=Натисніть під час відтворення -CTL_ControlToolbarAction=Панель керування музикою -CTL_CurrentPlaybackTransposition=Транспозиція поточного ключа відтворення\: {0} -CTL_DecreaseTempo=Зменшити Темп -CTL_IncreaseTempo=Збільшити Темп -CTL_Loop=Зациклити -CTL_LoopTooltip=Циклічне відтворення (L) -CTL_Pause=Пауза -CTL_PauseTooltip=Призупинити відтворення (пробіл) -CTL_Play=Грати -CTL_PlayFromHere=Відтворити звідси -CTL_PlaySelection=Грати вибране -CTL_PlayToolTip=Старт/Пауза (пробіл) -CTL_PlaybackToNextSongPart=Наступна частина композиції -CTL_PlaybackToNextSongPartTooltip=Грати наступну частину композиції (F2) -CTL_PlaybackToPreviousSongPart=Попередня частина композиції -CTL_PlaybackToPreviousSongPartTooltip=Грати попередню частину композиції(F1) +AutoUpdateOFFtooltip=\u00d0\u0090\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d0\u00bc\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0087\u00d0\u00bd\u00d0\u00b5 \u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f \u00d0\u0092\u00d0\u0098\u00d0\u009c\u00d0\u009a\u00d0\u009d\u00d0\u0095\u00d0\u009d\u00d0\u009e\: \u00d1\u0081\u00d1\u0082\u00d1\u0080\u00d1\u0083\u00d0\u00ba\u00d1\u0082\u00d1\u0083\u00d1\u0080\u00d1\u0083 \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096 \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00be. \u00d0\u009c\u00d1\u0083\u00d0\u00b7\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0, \u00d1\u0089\u00d0\u00be \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d1\u008e\u00d1\u0094\u00d1\u0082\u00d1\u008c\u00d1\u0081\u00d1\u008f, \u00d0\u00b1\u00d1\u0096\u00d0\u00bb\u00d1\u008c\u00d1\u0088\u00d0\u00b5 \u00d0\u00bd\u00d0\u00b5 \u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d1\u008e\u00d1\u0094\u00d1\u0082\u00d1\u008c\u00d1\u0081\u00d1\u008f \u00d0\u00b2 \u00d1\u0080\u00d0\u00b5\u00d0\u00b0\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be\u00d0\u00bc\u00d1\u0083 \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0096. \u00d0\u0097\u00d1\u0083\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d1\u0096\u00d1\u0082\u00d1\u008c \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f \u00d0\u00bc\u00d1\u0083\u00d0\u00b7\u00d0\u00b8\u00d0\u00ba\u00d0\u00b8, \u00d1\u0089\u00d0\u00be\u00d0\u00b1 \u00d0\u00b7\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d1\u0083 \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d1\u0080\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc \u00d0\u00b0\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d0\u00bc\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0087\u00d0\u00bd\u00d0\u00be\u00d0\u00b3\u00d0\u00be \u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f. +AutoUpdateONtooltip=\u00d0\u00a3\u00d0\u00b2\u00d1\u0096\u00d0\u00bc\u00d0\u00ba\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00be \u00d0\u00b0\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d0\u00bc\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0087\u00d0\u00bd\u00d0\u00b5 \u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f\: \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00b0 \u00d0\u00bc\u00d1\u0083\u00d0\u00b7\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0 \u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d1\u008e\u00d1\u0094\u00d1\u0082\u00d1\u008c\u00d1\u0081\u00d1\u008f \u00d0\u00b2 \u00d1\u0080\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc\u00d1\u0096 \u00d1\u0080\u00d0\u00b5\u00d0\u00b0\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be\u00d0\u00b3\u00d0\u00be \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0083, \u00d0\u00ba\u00d0\u00be\u00d0\u00bb\u00d0\u00b8 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00b1\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u008e\u00d1\u0082\u00d1\u008c\u00d1\u0081\u00d1\u008f \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b8 (\u00d0\u00b7\u00d0\u00b0 \u00d0\u00b2\u00d0\u00b8\u00d0\u00bd\u00d1\u008f\u00d1\u0082\u00d0\u00ba\u00d0\u00be\u00d0\u00bc \u00d1\u0081\u00d1\u0082\u00d1\u0080\u00d1\u0083\u00d0\u00ba\u00d1\u0082\u00d1\u0083\u00d1\u0080\u00d0\u00bd\u00d0\u00b8\u00d1\u0085 \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd) +CTL_Click=\u00d0\u009c\u00d0\u00b5\u00d1\u0082\u00d1\u0080\u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00bc +CTL_ClickTooltip=\u00d0\u009d\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0081\u00d0\u00bd\u00d1\u0096\u00d1\u0082\u00d1\u008c \u00d0\u00bf\u00d1\u0096\u00d0\u00b4 \u00d1\u0087\u00d0\u00b0\u00d1\u0081 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f +CTL_ControlToolbarAction=\u00d0\u009f\u00d0\u00b0\u00d0\u00bd\u00d0\u00b5\u00d0\u00bb\u00d1\u008c \u00d0\u00ba\u00d0\u00b5\u00d1\u0080\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008f \u00d0\u00bc\u00d1\u0083\u00d0\u00b7\u00d0\u00b8\u00d0\u00ba\u00d0\u00be\u00d1\u008e +CTL_CurrentPlaybackTransposition=\u00d0\u00a2\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d1\u0082\u00d0\u00be\u00d1\u0087\u00d0\u00bd\u00d0\u00be\u00d0\u00b3\u00d0\u00be \u00d0\u00ba\u00d0\u00bb\u00d1\u008e\u00d1\u0087\u00d0\u00b0 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f\: {0} +CTL_DecreaseTempo=\u00d0\u0097\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d1\u0088\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00a2\u00d0\u00b5\u00d0\u00bc\u00d0\u00bf +CTL_IncreaseTempo=\u00d0\u0097\u00d0\u00b1\u00d1\u0096\u00d0\u00bb\u00d1\u008c\u00d1\u0088\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00a2\u00d0\u00b5\u00d0\u00bc\u00d0\u00bf +CTL_Loop=\u00d0\u0097\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d0\u00ba\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 +CTL_LoopTooltip=\u00d0\u00a6\u00d0\u00b8\u00d0\u00ba\u00d0\u00bb\u00d1\u0096\u00d1\u0087\u00d0\u00bd\u00d0\u00b5 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f (L) +CTL_Pause=\u00d0\u009f\u00d0\u00b0\u00d1\u0083\u00d0\u00b7\u00d0\u00b0 +CTL_PauseTooltip=\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00b7\u00d1\u0083\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f (\u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d1\u0096\u00d0\u00bb) +CTL_Play=\u00d0\u0093\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 +CTL_PlayFromHere=\u00d0\u0092\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0081\u00d0\u00b8 +CTL_PlaySelection=\u00d0\u0093\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00b2\u00d0\u00b8\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00b5 +CTL_PlayToolTip=\u00d0\u00a1\u00d1\u0082\u00d0\u00b0\u00d1\u0080\u00d1\u0082/\u00d0\u009f\u00d0\u00b0\u00d1\u0083\u00d0\u00b7\u00d0\u00b0 (\u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d1\u0096\u00d0\u00bb) +CTL_PlaybackToNextSongPart=\u00d0\u009d\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d1\u0083\u00d0\u00bf\u00d0\u00bd\u00d0\u00b0 \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d0\u00b0 \u00d0\u00ba\u00d0\u00be\u00d0\u00bc\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097 +CTL_PlaybackToNextSongPartTooltip=\u00d0\u0093\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00bd\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d1\u0083\u00d0\u00bf\u00d0\u00bd\u00d1\u0083 \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d1\u0083 \u00d0\u00ba\u00d0\u00be\u00d0\u00bc\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097 (F2) +CTL_PlaybackToPreviousSongPart=\u00d0\u009f\u00d0\u00be\u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d1\u008f \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d0\u00b0 \u00d0\u00ba\u00d0\u00be\u00d0\u00bc\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097 +CTL_PlaybackToPreviousSongPartTooltip=\u00d0\u0093\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00bf\u00d0\u00be\u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d1\u008e \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d1\u0083 \u00d0\u00ba\u00d0\u00be\u00d0\u00bc\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097(F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=Попередній відлік -CTL_Precount1Bar=Підрахунок в 1 такті - Режим підрахунку можна змінити за допомогою Shift-Click -CTL_Precount2Bar=Підрахунок у 2 такті - Режим підрахунку можна змінити за допомогою Shift-Click -CTL_PrecountBarAuto=Автоматичний підрахунок - режим підрахунку можна змінити, натиснувши Shift -CTL_SetActive=Активне перемикання (ON/OFF) -CTL_SetActivePopupAction=Активне перемикання (ON/OFF) -CTL_SetActiveToolTip=Установити єдину активну пісню, для якої ввімкнено Midi повідомлення [O] -CTL_ShowPlaybackPoint=Показувати точку відтворення -CTL_ShowPlaybackTooltip=Підсвічувати панель відтворення -CTL_Stop=Стоп -CTL_StopTooltip=Призупинити відтворення (shift space) -CTL_TransposePlaybackKey=Ключ транспозиції відтворення -ControlToolbarPanel.fbtn_Active.toolTipText=Якщо увімкнено, пісня увімкнена або активна. Тільки одна пісня може бути активована за раз. -ControlToolbarPanel.fbtn_Click.toolTipText=Метроном -ControlToolbarPanel.fbtn_Pause.toolTipText=Призупинити відтворення -ControlToolbarPanel.fbtn_Precount.toolTipText=попередній відлік перед відтворенням -ControlToolbarPanel.posViewer.toolTipText=Поточна позиція (такт\:доля) +CTL_Precount=\u00d0\u009f\u00d0\u00be\u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d1\u0096\u00d0\u00b9 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00bb\u00d1\u0096\u00d0\u00ba +CTL_Precount1Bar=\u00d0\u009f\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00be\u00d0\u00ba \u00d0\u00b2 1 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d1\u0096 - \u00d0\u00a0\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc \u00d0\u00bf\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00ba\u00d1\u0083 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b0 \u00d0\u00b4\u00d0\u00be\u00d0\u00bf\u00d0\u00be\u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00be\u00d1\u008e Shift-Click +CTL_Precount2Bar=\u00d0\u009f\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00be\u00d0\u00ba \u00d1\u0083 2 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d1\u0096 - \u00d0\u00a0\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc \u00d0\u00bf\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00ba\u00d1\u0083 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b0 \u00d0\u00b4\u00d0\u00be\u00d0\u00bf\u00d0\u00be\u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00be\u00d1\u008e Shift-Click +CTL_PrecountBarAuto=\u00d0\u0090\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d0\u00bc\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0087\u00d0\u00bd\u00d0\u00b8\u00d0\u00b9 \u00d0\u00bf\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00be\u00d0\u00ba - \u00d1\u0080\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc \u00d0\u00bf\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00ba\u00d1\u0083 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8, \u00d0\u00bd\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0081\u00d0\u00bd\u00d1\u0083\u00d0\u00b2\u00d1\u0088\u00d0\u00b8 Shift +CTL_SetActive=\u00d0\u0090\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00b5 \u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00bc\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008f (ON/OFF) +CTL_SetActivePopupAction=\u00d0\u0090\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00b5 \u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00bc\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008f (ON/OFF) +CTL_SetActiveToolTip=\u00d0\u00a3\u00d1\u0081\u00d1\u0082\u00d0\u00b0\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d1\u0094\u00d0\u00b4\u00d0\u00b8\u00d0\u00bd\u00d1\u0083 \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d1\u0083 \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u008e, \u00d0\u00b4\u00d0\u00bb\u00d1\u008f \u00d1\u008f\u00d0\u00ba\u00d0\u00be\u00d1\u0097 \u00d0\u00b2\u00d0\u00b2\u00d1\u0096\u00d0\u00bc\u00d0\u00ba\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00be Midi \u00d0\u00bf\u00d0\u00be\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f [O] +CTL_ShowPlaybackPoint=\u00d0\u009f\u00d0\u00be\u00d0\u00ba\u00d0\u00b0\u00d0\u00b7\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d1\u0082\u00d0\u00be\u00d1\u0087\u00d0\u00ba\u00d1\u0083 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f +CTL_ShowPlaybackTooltip=\u00d0\u009f\u00d1\u0096\u00d0\u00b4\u00d1\u0081\u00d0\u00b2\u00d1\u0096\u00d1\u0087\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00bf\u00d0\u00b0\u00d0\u00bd\u00d0\u00b5\u00d0\u00bb\u00d1\u008c \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f +CTL_Stop=\u00d0\u00a1\u00d1\u0082\u00d0\u00be\u00d0\u00bf +CTL_StopTooltip=\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00b7\u00d1\u0083\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f (shift space) +CTL_TransposePlaybackKey=\u00d0\u009a\u00d0\u00bb\u00d1\u008e\u00d1\u0087 \u00d1\u0082\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f +ControlToolbarPanel.fbtn_Active.toolTipText=\u00d0\u00af\u00d0\u00ba\u00d1\u0089\u00d0\u00be \u00d1\u0083\u00d0\u00b2\u00d1\u0096\u00d0\u00bc\u00d0\u00ba\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00be, \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u008f \u00d1\u0083\u00d0\u00b2\u00d1\u0096\u00d0\u00bc\u00d0\u00ba\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b0\u00d0\u00b1\u00d0\u00be \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00b0. \u00d0\u00a2\u00d1\u0096\u00d0\u00bb\u00d1\u008c\u00d0\u00ba\u00d0\u00b8 \u00d0\u00be\u00d0\u00b4\u00d0\u00bd\u00d0\u00b0 \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u008f \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00b5 \u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d0\u00b8 \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b7\u00d0\u00b0 \u00d1\u0080\u00d0\u00b0\u00d0\u00b7. +ControlToolbarPanel.fbtn_Click.toolTipText=\u00d0\u009c\u00d0\u00b5\u00d1\u0082\u00d1\u0080\u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00bc +ControlToolbarPanel.fbtn_Pause.toolTipText=\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00b7\u00d1\u0083\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f +ControlToolbarPanel.fbtn_Precount.toolTipText=\u00d0\u00bf\u00d0\u00be\u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d1\u0096\u00d0\u00b9 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00bb\u00d1\u0096\u00d0\u00ba \u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f\u00d0\u00bc +ControlToolbarPanel.posViewer.toolTipText=\u00d0\u009f\u00d0\u00be\u00d1\u0082\u00d0\u00be\u00d1\u0087\u00d0\u00bd\u00d0\u00b0 \u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u008f (\u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\:\u00d0\u00b4\u00d0\u00be\u00d0\u00bb\u00d1\u008f) ControlToolbarPanel.spn_Tempo.toolTipText=Playback tempo. Use J or - to decrease tempo, K or + to increase. -ERR_BadSelection=Перший і останній вибрані такти неправильно відповідають частинам пісні. -ERR_CantPlayFromHere=Не можна грати звідси. Спочатку виберіть правильний такт на аркуші акордів або партію пісні в редакторі структури пісні. -ERR_InvalidPlayableSelection=Не вдалося відтворити цей вибір\: {0} -ERR_NeedContiguousSelection=Вибрані такти/частини пісні мають бути одна за одною. -ERR_NotActive=Не можливо відтворити звідси\: пісня не активна -FixMidiMixDialog.btn_Cancel.text=Скасувати -FixMidiMixDialog.btn_fix.text=Виправлення -FixMidiMixDialog.btn_skip.text=Ігнорувати -FixMidiMixDialog.cb_rememberMyChoice.text=Запам'ятати мій вибір під час цього сеансу -FixMidiMixDialog.lbl_firstLine.text=Виявлено проблеми з MIDI конфігурацією. Погоджуєтесь на їх виправлення? -FixMidiMixDialog.lbl_fixInstrumentTitle.text=Слід замінити такі інструменти, щоб вони відповідали поточній конфігурації вихідного синтезатора\: -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Наступні канали барабанів слід перенаправити на канал 10\: -MIDI_CONFIGURATION_PROBLEMS=Проблеми з конфігурацією Midi -TransposePlaybackKeyDialog.btn_Cancel.text=Скасувати -TransposePlaybackKeyDialog.btn_Ok.text=Гаразд -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=Увімкнути транспонування клавіш під час відтворення -TransposePlaybackKeyDialog.helpTextArea1.text=Змінювати ключ (транспозиції символів акордів) під час відтворення пісні. +ERR_BadSelection=\u00d0\u009f\u00d0\u00b5\u00d1\u0080\u00d1\u0088\u00d0\u00b8\u00d0\u00b9 \u00d1\u0096 \u00d0\u00be\u00d1\u0081\u00d1\u0082\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u0096\u00d0\u00b9 \u00d0\u00b2\u00d0\u00b8\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0096 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8 \u00d0\u00bd\u00d0\u00b5\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00bf\u00d0\u00be\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00b0\u00d1\u008e\u00d1\u0082\u00d1\u008c \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d0\u00b0\u00d0\u00bc \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096. +ERR_CantPlayFromHere=\u00d0\u009d\u00d0\u00b5 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b3\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0081\u00d0\u00b8. \u00d0\u00a1\u00d0\u00bf\u00d0\u00be\u00d1\u0087\u00d0\u00b0\u00d1\u0082\u00d0\u00ba\u00d1\u0083 \u00d0\u00b2\u00d0\u00b8\u00d0\u00b1\u00d0\u00b5\u00d1\u0080\u00d1\u0096\u00d1\u0082\u00d1\u008c \u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00b8\u00d0\u00b9 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082 \u00d0\u00bd\u00d0\u00b0 \u00d0\u00b0\u00d1\u0080\u00d0\u00ba\u00d1\u0083\u00d1\u0088\u00d1\u0096 \u00d0\u00b0\u00d0\u00ba\u00d0\u00be\u00d1\u0080\u00d0\u00b4\u00d1\u0096\u00d0\u00b2 \u00d0\u00b0\u00d0\u00b1\u00d0\u00be \u00d0\u00bf\u00d0\u00b0\u00d1\u0080\u00d1\u0082\u00d1\u0096\u00d1\u008e \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096 \u00d0\u00b2 \u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d1\u0080\u00d1\u0096 \u00d1\u0081\u00d1\u0082\u00d1\u0080\u00d1\u0083\u00d0\u00ba\u00d1\u0082\u00d1\u0083\u00d1\u0080\u00d0\u00b8 \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096. +ERR_InvalidPlayableSelection=\u00d0\u009d\u00d0\u00b5 \u00d0\u00b2\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00be\u00d1\u0081\u00d1\u008f \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d1\u0086\u00d0\u00b5\u00d0\u00b9 \u00d0\u00b2\u00d0\u00b8\u00d0\u00b1\u00d1\u0096\u00d1\u0080\: {0} +ERR_NeedContiguousSelection=\u00d0\u0092\u00d0\u00b8\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0096 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8/\u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d0\u00b8 \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096 \u00d0\u00bc\u00d0\u00b0\u00d1\u008e\u00d1\u0082\u00d1\u008c \u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d0\u00b8 \u00d0\u00be\u00d0\u00b4\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b7\u00d0\u00b0 \u00d0\u00be\u00d0\u00b4\u00d0\u00bd\u00d0\u00be\u00d1\u008e. +ERR_NotActive=\u00d0\u009d\u00d0\u00b5 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00bb\u00d0\u00b8\u00d0\u00b2\u00d0\u00be \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0081\u00d0\u00b8\: \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u008f \u00d0\u00bd\u00d0\u00b5 \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00b0 +FixMidiMixDialog.btn_Cancel.text=\u00d0\u00a1\u00d0\u00ba\u00d0\u00b0\u00d1\u0081\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 +FixMidiMixDialog.btn_fix.text=\u00d0\u0092\u00d0\u00b8\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f +FixMidiMixDialog.btn_skip.text=\u00d0\u0086\u00d0\u00b3\u00d0\u00bd\u00d0\u00be\u00d1\u0080\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 +FixMidiMixDialog.cb_rememberMyChoice.text=\u00d0\u0097\u00d0\u00b0\u00d0\u00bf\u00d0\u00b0\u00d0\u00bc'\u00d1\u008f\u00d1\u0082\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00bc\u00d1\u0096\u00d0\u00b9 \u00d0\u00b2\u00d0\u00b8\u00d0\u00b1\u00d1\u0096\u00d1\u0080 \u00d0\u00bf\u00d1\u0096\u00d0\u00b4 \u00d1\u0087\u00d0\u00b0\u00d1\u0081 \u00d1\u0086\u00d1\u008c\u00d0\u00be\u00d0\u00b3\u00d0\u00be \u00d1\u0081\u00d0\u00b5\u00d0\u00b0\u00d0\u00bd\u00d1\u0081\u00d1\u0083 +FixMidiMixDialog.lbl_firstLine.text=\u00d0\u0092\u00d0\u00b8\u00d1\u008f\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00be \u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d0\u00bb\u00d0\u00b5\u00d0\u00bc\u00d0\u00b8 \u00d0\u00b7 MIDI \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d1\u0084\u00d1\u0096\u00d0\u00b3\u00d1\u0083\u00d1\u0080\u00d0\u00b0\u00d1\u0086\u00d1\u0096\u00d1\u0094\u00d1\u008e. \u00d0\u009f\u00d0\u00be\u00d0\u00b3\u00d0\u00be\u00d0\u00b4\u00d0\u00b6\u00d1\u0083\u00d1\u0094\u00d1\u0082\u00d0\u00b5\u00d1\u0081\u00d1\u008c \u00d0\u00bd\u00d0\u00b0 \u00d1\u0097\u00d1\u0085 \u00d0\u00b2\u00d0\u00b8\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f? +FixMidiMixDialog.lbl_fixInstrumentTitle.text=\u00d0\u00a1\u00d0\u00bb\u00d1\u0096\u00d0\u00b4 \u00d0\u00b7\u00d0\u00b0\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0096 \u00d1\u0096\u00d0\u00bd\u00d1\u0081\u00d1\u0082\u00d1\u0080\u00d1\u0083\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d1\u0082\u00d0\u00b8, \u00d1\u0089\u00d0\u00be\u00d0\u00b1 \u00d0\u00b2\u00d0\u00be\u00d0\u00bd\u00d0\u00b8 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00bf\u00d0\u00be\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8 \u00d0\u00bf\u00d0\u00be\u00d1\u0082\u00d0\u00be\u00d1\u0087\u00d0\u00bd\u00d1\u0096\u00d0\u00b9 \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d1\u0084\u00d1\u0096\u00d0\u00b3\u00d1\u0083\u00d1\u0080\u00d0\u00b0\u00d1\u0086\u00d1\u0096\u00d1\u0097 \u00d0\u00b2\u00d0\u00b8\u00d1\u0085\u00d1\u0096\u00d0\u00b4\u00d0\u00bd\u00d0\u00be\u00d0\u00b3\u00d0\u00be \u00d1\u0081\u00d0\u00b8\u00d0\u00bd\u00d1\u0082\u00d0\u00b5\u00d0\u00b7\u00d0\u00b0\u00d1\u0082\u00d0\u00be\u00d1\u0080\u00d0\u00b0\: +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=\u00d0\u009d\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d1\u0083\u00d0\u00bf\u00d0\u00bd\u00d1\u0096 \u00d0\u00ba\u00d0\u00b0\u00d0\u00bd\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8 \u00d0\u00b1\u00d0\u00b0\u00d1\u0080\u00d0\u00b0\u00d0\u00b1\u00d0\u00b0\u00d0\u00bd\u00d1\u0096\u00d0\u00b2 \u00d1\u0081\u00d0\u00bb\u00d1\u0096\u00d0\u00b4 \u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00b0\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00bd\u00d0\u00b0 \u00d0\u00ba\u00d0\u00b0\u00d0\u00bd\u00d0\u00b0\u00d0\u00bb 10\: +MIDI_CONFIGURATION_PROBLEMS=\u00d0\u009f\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d0\u00bb\u00d0\u00b5\u00d0\u00bc\u00d0\u00b8 \u00d0\u00b7 \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d1\u0084\u00d1\u0096\u00d0\u00b3\u00d1\u0083\u00d1\u0080\u00d0\u00b0\u00d1\u0086\u00d1\u0096\u00d1\u0094\u00d1\u008e Midi +TransposeDisplayDialog.btn_Cancel.text=\u00d0\u00a1\u00d0\u00ba\u00d0\u00b0\u00d1\u0081\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 +TransposeDisplayDialog.btn_Ok.text=\u00d0\u0093\u00d0\u00b0\u00d1\u0080\u00d0\u00b0\u00d0\u00b7\u00d0\u00b4 +TransposeDisplayDialog.helpTextArea1.text=\u00d0\u0097\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d1\u008e\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00ba\u00d0\u00bb\u00d1\u008e\u00d1\u0087 (\u00d1\u0082\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097 \u00d1\u0081\u00d0\u00b8\u00d0\u00bc\u00d0\u00b2\u00d0\u00be\u00d0\u00bb\u00d1\u0096\u00d0\u00b2 \u00d0\u00b0\u00d0\u00ba\u00d0\u00be\u00d1\u0080\u00d0\u00b4\u00d1\u0096\u00d0\u00b2) \u00d0\u00bf\u00d1\u0096\u00d0\u00b4 \u00d1\u0087\u00d0\u00b0\u00d1\u0081 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096. +TransposeDisplayDialog.cb_enableTransposition.text=\u00d0\u00a3\u00d0\u00b2\u00d1\u0096\u00d0\u00bc\u00d0\u00ba\u00d0\u00bd\u00d1\u0083\u00d1\u0082\u00d0\u00b8 \u00d1\u0082\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00bd\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008f \u00d0\u00ba\u00d0\u00bb\u00d0\u00b0\u00d0\u00b2\u00d1\u0096\u00d1\u0088 \u00d0\u00bf\u00d1\u0096\u00d0\u00b4 \u00d1\u0087\u00d0\u00b0\u00d1\u0081 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_zh_CN.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_zh_CN.properties index c24a92d7af..41ab47b1ef 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_zh_CN.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_zh_CN.properties @@ -1,56 +1,56 @@ -AutoUpdateOFFtooltip=自动更新关闭:歌曲结构发生变化,播放音乐不再实时更新。 停止音乐播放以重新激活自动更新模式。 -AutoUpdateONtooltip=自动更新开启:播放音乐随歌曲变化实时更新(结构变化除外) -CTL_Click=节拍器 -CTL_ClickTooltip=播放时打开节拍器 -CTL_ControlToolbarAction=音乐控制工具栏 -CTL_CurrentPlaybackTransposition=当前回放转换键: {0} -CTL_DecreaseTempo=降低速度 -CTL_IncreaseTempo=增加速度 -CTL_Loop=循环 -CTL_LoopTooltip=循环回放(L) -CTL_Pause=暂停 -CTL_PauseTooltip=暂停播放(空格) -CTL_Play=播放 -CTL_PlayFromHere=从这里开始 -CTL_PlaySelection=播放选择 -CTL_PlayToolTip=开始/暂停播放(空格) -CTL_PlaybackToNextSongPart=下一曲 -CTL_PlaybackToNextSongPartTooltip=播放下一首歌片段 (F2) -CTL_PlaybackToPreviousSongPart=上一首歌曲片段 -CTL_PlaybackToPreviousSongPartTooltip=播放上一首曲目部分 (F1) +AutoUpdateOFFtooltip=\u00e8\u0087\u00aa\u00e5\u008a\u00a8\u00e6\u009b\u00b4\u00e6\u0096\u00b0\u00e5\u0085\u00b3\u00e9\u0097\u00ad\u00ef\u00bc\u009a\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e7\u00bb\u0093\u00e6\u009e\u0084\u00e5\u008f\u0091\u00e7\u0094\u009f\u00e5\u008f\u0098\u00e5\u008c\u0096\u00ef\u00bc\u008c\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e9\u009f\u00b3\u00e4\u00b9\u0090\u00e4\u00b8\u008d\u00e5\u0086\u008d\u00e5\u00ae\u009e\u00e6\u0097\u00b6\u00e6\u009b\u00b4\u00e6\u0096\u00b0\u00e3\u0080\u0082 \u00e5\u0081\u009c\u00e6\u00ad\u00a2\u00e9\u009f\u00b3\u00e4\u00b9\u0090\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e4\u00bb\u00a5\u00e9\u0087\u008d\u00e6\u0096\u00b0\u00e6\u00bf\u0080\u00e6\u00b4\u00bb\u00e8\u0087\u00aa\u00e5\u008a\u00a8\u00e6\u009b\u00b4\u00e6\u0096\u00b0\u00e6\u00a8\u00a1\u00e5\u00bc\u008f\u00e3\u0080\u0082 +AutoUpdateONtooltip=\u00e8\u0087\u00aa\u00e5\u008a\u00a8\u00e6\u009b\u00b4\u00e6\u0096\u00b0\u00e5\u00bc\u0080\u00e5\u0090\u00af\u00ef\u00bc\u009a\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e9\u009f\u00b3\u00e4\u00b9\u0090\u00e9\u009a\u008f\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e5\u008f\u0098\u00e5\u008c\u0096\u00e5\u00ae\u009e\u00e6\u0097\u00b6\u00e6\u009b\u00b4\u00e6\u0096\u00b0\u00ef\u00bc\u0088\u00e7\u00bb\u0093\u00e6\u009e\u0084\u00e5\u008f\u0098\u00e5\u008c\u0096\u00e9\u0099\u00a4\u00e5\u00a4\u0096\u00ef\u00bc\u0089 +CTL_Click=\u00e8\u008a\u0082\u00e6\u008b\u008d\u00e5\u0099\u00a8 +CTL_ClickTooltip=\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e6\u0097\u00b6\u00e6\u0089\u0093\u00e5\u00bc\u0080\u00e8\u008a\u0082\u00e6\u008b\u008d\u00e5\u0099\u00a8 +CTL_ControlToolbarAction=\u00e9\u009f\u00b3\u00e4\u00b9\u0090\u00e6\u008e\u00a7\u00e5\u0088\u00b6\u00e5\u00b7\u00a5\u00e5\u0085\u00b7\u00e6\u00a0\u008f +CTL_CurrentPlaybackTransposition=\u00e5\u00bd\u0093\u00e5\u0089\u008d\u00e5\u009b\u009e\u00e6\u0094\u00be\u00e8\u00bd\u00ac\u00e6\u008d\u00a2\u00e9\u0094\u00ae\u00ef\u00bc\u009a {0} +CTL_DecreaseTempo=\u00e9\u0099\u008d\u00e4\u00bd\u008e\u00e9\u0080\u009f\u00e5\u00ba\u00a6 +CTL_IncreaseTempo=\u00e5\u00a2\u009e\u00e5\u008a\u00a0\u00e9\u0080\u009f\u00e5\u00ba\u00a6 +CTL_Loop=\u00e5\u00be\u00aa\u00e7\u008e\u00af +CTL_LoopTooltip=\u00e5\u00be\u00aa\u00e7\u008e\u00af\u00e5\u009b\u009e\u00e6\u0094\u00be(L) +CTL_Pause=\u00e6\u009a\u0082\u00e5\u0081\u009c +CTL_PauseTooltip=\u00e6\u009a\u0082\u00e5\u0081\u009c\u00e6\u0092\u00ad\u00e6\u0094\u00be(\u00e7\u00a9\u00ba\u00e6\u00a0\u00bc) +CTL_Play=\u00e6\u0092\u00ad\u00e6\u0094\u00be +CTL_PlayFromHere=\u00e4\u00bb\u008e\u00e8\u00bf\u0099\u00e9\u0087\u008c\u00e5\u00bc\u0080\u00e5\u00a7\u008b +CTL_PlaySelection=\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e9\u0080\u0089\u00e6\u008b\u00a9 +CTL_PlayToolTip=\u00e5\u00bc\u0080\u00e5\u00a7\u008b/\u00e6\u009a\u0082\u00e5\u0081\u009c\u00e6\u0092\u00ad\u00e6\u0094\u00be(\u00e7\u00a9\u00ba\u00e6\u00a0\u00bc) +CTL_PlaybackToNextSongPart=\u00e4\u00b8\u008b\u00e4\u00b8\u0080\u00e6\u009b\u00b2 +CTL_PlaybackToNextSongPartTooltip=\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e4\u00b8\u008b\u00e4\u00b8\u0080\u00e9\u00a6\u0096\u00e6\u00ad\u008c\u00e7\u0089\u0087\u00e6\u00ae\u00b5 (F2) +CTL_PlaybackToPreviousSongPart=\u00e4\u00b8\u008a\u00e4\u00b8\u0080\u00e9\u00a6\u0096\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e7\u0089\u0087\u00e6\u00ae\u00b5 +CTL_PlaybackToPreviousSongPartTooltip=\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e4\u00b8\u008a\u00e4\u00b8\u0080\u00e9\u00a6\u0096\u00e6\u009b\u00b2\u00e7\u009b\u00ae\u00e9\u0083\u00a8\u00e5\u0088\u0086 (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=倒计时 -CTL_Precount1Bar=倒计时1小节-使用shift-click更改倒计时模式 -CTL_Precount2Bar=倒计时2小节-使用shift-click更改倒计时模式 -CTL_PrecountBarAuto=倒计时自动模式-使用shift-click更改倒计时模式 -CTL_SetActive=切换激活 (开启/关闭) -CTL_SetActivePopupAction=切换激活 (开启/关闭) -CTL_SetActiveToolTip=设置启用 Midi 消息的唯一活动歌曲 [O] -CTL_ShowPlaybackPoint=显示回放点 -CTL_ShowPlaybackTooltip=突出显示正在播放的小节 -CTL_Stop=停止 -CTL_StopTooltip=停止播放 (Shift+空格) -CTL_TransposePlaybackKey=回放转换键 -ControlToolbarPanel.fbtn_Active.toolTipText=如果打开,歌曲处于活动状态,Midi消息被启用。一次只能激活一首歌。 -ControlToolbarPanel.fbtn_Click.toolTipText=节拍器 -ControlToolbarPanel.fbtn_Pause.toolTipText=暂停播放 -ControlToolbarPanel.fbtn_Precount.toolTipText=开始播放前倒计时 -ControlToolbarPanel.posViewer.toolTipText=当前位置(小节\:节拍) -ControlToolbarPanel.spn_Tempo.toolTipText=回放速度。使用J或-降低速度,K或+增加速度。 -ERR_BadSelection=第一个和最后一个选定的小节与歌曲部分不匹配。 -ERR_CantPlayFromHere=无法从此处播放。请在和弦引导表编辑器中的有效栏上选择第一个,或在歌曲结构编辑器中选择歌曲部分。 -ERR_InvalidPlayableSelection=无法播放此选择: {0} -ERR_NeedContiguousSelection=选定的小节/歌曲部分需要连续 -ERR_NotActive=无法从这里播放:歌曲未激活 -FixMidiMixDialog.btn_Cancel.text=取消 -FixMidiMixDialog.btn_fix.text=修复 -FixMidiMixDialog.btn_skip.text=忽略 -FixMidiMixDialog.cb_rememberMyChoice.text=记住我的选择 -FixMidiMixDialog.lbl_firstLine.text=检测到潜在的 Midi 配置问题。确定修复? -FixMidiMixDialog.lbl_fixInstrumentTitle.text=应更换以下音色,以适应当前的输出合成器配置\: -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=以下鼓通道应重新链接至通道10\: -MIDI_CONFIGURATION_PROBLEMS=Midi 配置问题 -TransposePlaybackKeyDialog.btn_Cancel.text=取消 -TransposePlaybackKeyDialog.btn_Ok.text=确定 -TransposePlaybackKeyDialog.cb_enableKeyTransposition.text=启用回放切换键 -TransposePlaybackKeyDialog.helpTextArea1.text=播放歌曲时更改调(移调和弦符号)。 +CTL_Precount=\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6 +CTL_Precount1Bar=\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b61\u00e5\u00b0\u008f\u00e8\u008a\u0082-\u00e4\u00bd\u00bf\u00e7\u0094\u00a8shift-click\u00e6\u009b\u00b4\u00e6\u0094\u00b9\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6\u00e6\u00a8\u00a1\u00e5\u00bc\u008f +CTL_Precount2Bar=\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b62\u00e5\u00b0\u008f\u00e8\u008a\u0082-\u00e4\u00bd\u00bf\u00e7\u0094\u00a8shift-click\u00e6\u009b\u00b4\u00e6\u0094\u00b9\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6\u00e6\u00a8\u00a1\u00e5\u00bc\u008f +CTL_PrecountBarAuto=\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6\u00e8\u0087\u00aa\u00e5\u008a\u00a8\u00e6\u00a8\u00a1\u00e5\u00bc\u008f-\u00e4\u00bd\u00bf\u00e7\u0094\u00a8shift-click\u00e6\u009b\u00b4\u00e6\u0094\u00b9\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6\u00e6\u00a8\u00a1\u00e5\u00bc\u008f +CTL_SetActive=\u00e5\u0088\u0087\u00e6\u008d\u00a2\u00e6\u00bf\u0080\u00e6\u00b4\u00bb (\u00e5\u00bc\u0080\u00e5\u0090\u00af/\u00e5\u0085\u00b3\u00e9\u0097\u00ad) +CTL_SetActivePopupAction=\u00e5\u0088\u0087\u00e6\u008d\u00a2\u00e6\u00bf\u0080\u00e6\u00b4\u00bb (\u00e5\u00bc\u0080\u00e5\u0090\u00af/\u00e5\u0085\u00b3\u00e9\u0097\u00ad) +CTL_SetActiveToolTip=\u00e8\u00ae\u00be\u00e7\u00bd\u00ae\u00e5\u0090\u00af\u00e7\u0094\u00a8 Midi \u00e6\u00b6\u0088\u00e6\u0081\u00af\u00e7\u009a\u0084\u00e5\u0094\u00af\u00e4\u00b8\u0080\u00e6\u00b4\u00bb\u00e5\u008a\u00a8\u00e6\u00ad\u008c\u00e6\u009b\u00b2 [O] +CTL_ShowPlaybackPoint=\u00e6\u0098\u00be\u00e7\u00a4\u00ba\u00e5\u009b\u009e\u00e6\u0094\u00be\u00e7\u0082\u00b9 +CTL_ShowPlaybackTooltip=\u00e7\u00aa\u0081\u00e5\u0087\u00ba\u00e6\u0098\u00be\u00e7\u00a4\u00ba\u00e6\u00ad\u00a3\u00e5\u009c\u00a8\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e7\u009a\u0084\u00e5\u00b0\u008f\u00e8\u008a\u0082 +CTL_Stop=\u00e5\u0081\u009c\u00e6\u00ad\u00a2 +CTL_StopTooltip=\u00e5\u0081\u009c\u00e6\u00ad\u00a2\u00e6\u0092\u00ad\u00e6\u0094\u00be (Shift+\u00e7\u00a9\u00ba\u00e6\u00a0\u00bc) +CTL_TransposePlaybackKey=\u00e5\u009b\u009e\u00e6\u0094\u00be\u00e8\u00bd\u00ac\u00e6\u008d\u00a2\u00e9\u0094\u00ae +ControlToolbarPanel.fbtn_Active.toolTipText=\u00e5\u00a6\u0082\u00e6\u009e\u009c\u00e6\u0089\u0093\u00e5\u00bc\u0080\u00ef\u00bc\u008c\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e5\u00a4\u0084\u00e4\u00ba\u008e\u00e6\u00b4\u00bb\u00e5\u008a\u00a8\u00e7\u008a\u00b6\u00e6\u0080\u0081\u00ef\u00bc\u008cMidi\u00e6\u00b6\u0088\u00e6\u0081\u00af\u00e8\u00a2\u00ab\u00e5\u0090\u00af\u00e7\u0094\u00a8\u00e3\u0080\u0082\u00e4\u00b8\u0080\u00e6\u00ac\u00a1\u00e5\u008f\u00aa\u00e8\u0083\u00bd\u00e6\u00bf\u0080\u00e6\u00b4\u00bb\u00e4\u00b8\u0080\u00e9\u00a6\u0096\u00e6\u00ad\u008c\u00e3\u0080\u0082 +ControlToolbarPanel.fbtn_Click.toolTipText=\u00e8\u008a\u0082\u00e6\u008b\u008d\u00e5\u0099\u00a8 +ControlToolbarPanel.fbtn_Pause.toolTipText=\u00e6\u009a\u0082\u00e5\u0081\u009c\u00e6\u0092\u00ad\u00e6\u0094\u00be +ControlToolbarPanel.fbtn_Precount.toolTipText=\u00e5\u00bc\u0080\u00e5\u00a7\u008b\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e5\u0089\u008d\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6 +ControlToolbarPanel.posViewer.toolTipText=\u00e5\u00bd\u0093\u00e5\u0089\u008d\u00e4\u00bd\u008d\u00e7\u00bd\u00ae(\u00e5\u00b0\u008f\u00e8\u008a\u0082\:\u00e8\u008a\u0082\u00e6\u008b\u008d) +ControlToolbarPanel.spn_Tempo.toolTipText=\u00e5\u009b\u009e\u00e6\u0094\u00be\u00e9\u0080\u009f\u00e5\u00ba\u00a6\u00e3\u0080\u0082\u00e4\u00bd\u00bf\u00e7\u0094\u00a8J\u00e6\u0088\u0096-\u00e9\u0099\u008d\u00e4\u00bd\u008e\u00e9\u0080\u009f\u00e5\u00ba\u00a6\u00ef\u00bc\u008cK\u00e6\u0088\u0096+\u00e5\u00a2\u009e\u00e5\u008a\u00a0\u00e9\u0080\u009f\u00e5\u00ba\u00a6\u00e3\u0080\u0082 +ERR_BadSelection=\u00e7\u00ac\u00ac\u00e4\u00b8\u0080\u00e4\u00b8\u00aa\u00e5\u0092\u008c\u00e6\u009c\u0080\u00e5\u0090\u008e\u00e4\u00b8\u0080\u00e4\u00b8\u00aa\u00e9\u0080\u0089\u00e5\u00ae\u009a\u00e7\u009a\u0084\u00e5\u00b0\u008f\u00e8\u008a\u0082\u00e4\u00b8\u008e\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e9\u0083\u00a8\u00e5\u0088\u0086\u00e4\u00b8\u008d\u00e5\u008c\u00b9\u00e9\u0085\u008d\u00e3\u0080\u0082 +ERR_CantPlayFromHere=\u00e6\u0097\u00a0\u00e6\u00b3\u0095\u00e4\u00bb\u008e\u00e6\u00ad\u00a4\u00e5\u00a4\u0084\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e3\u0080\u0082\u00e8\u00af\u00b7\u00e5\u009c\u00a8\u00e5\u0092\u008c\u00e5\u00bc\u00a6\u00e5\u00bc\u0095\u00e5\u00af\u00bc\u00e8\u00a1\u00a8\u00e7\u00bc\u0096\u00e8\u00be\u0091\u00e5\u0099\u00a8\u00e4\u00b8\u00ad\u00e7\u009a\u0084\u00e6\u009c\u0089\u00e6\u0095\u0088\u00e6\u00a0\u008f\u00e4\u00b8\u008a\u00e9\u0080\u0089\u00e6\u008b\u00a9\u00e7\u00ac\u00ac\u00e4\u00b8\u0080\u00e4\u00b8\u00aa\u00ef\u00bc\u008c\u00e6\u0088\u0096\u00e5\u009c\u00a8\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e7\u00bb\u0093\u00e6\u009e\u0084\u00e7\u00bc\u0096\u00e8\u00be\u0091\u00e5\u0099\u00a8\u00e4\u00b8\u00ad\u00e9\u0080\u0089\u00e6\u008b\u00a9\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e9\u0083\u00a8\u00e5\u0088\u0086\u00e3\u0080\u0082 +ERR_InvalidPlayableSelection=\u00e6\u0097\u00a0\u00e6\u00b3\u0095\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e6\u00ad\u00a4\u00e9\u0080\u0089\u00e6\u008b\u00a9\u00ef\u00bc\u009a {0} +ERR_NeedContiguousSelection=\u00e9\u0080\u0089\u00e5\u00ae\u009a\u00e7\u009a\u0084\u00e5\u00b0\u008f\u00e8\u008a\u0082/\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e9\u0083\u00a8\u00e5\u0088\u0086\u00e9\u009c\u0080\u00e8\u00a6\u0081\u00e8\u00bf\u009e\u00e7\u00bb\u00ad +ERR_NotActive=\u00e6\u0097\u00a0\u00e6\u00b3\u0095\u00e4\u00bb\u008e\u00e8\u00bf\u0099\u00e9\u0087\u008c\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00ef\u00bc\u009a\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e6\u009c\u00aa\u00e6\u00bf\u0080\u00e6\u00b4\u00bb +FixMidiMixDialog.btn_Cancel.text=\u00e5\u008f\u0096\u00e6\u00b6\u0088 +FixMidiMixDialog.btn_fix.text=\u00e4\u00bf\u00ae\u00e5\u00a4\u008d +FixMidiMixDialog.btn_skip.text=\u00e5\u00bf\u00bd\u00e7\u0095\u00a5 +FixMidiMixDialog.cb_rememberMyChoice.text=\u00e8\u00ae\u00b0\u00e4\u00bd\u008f\u00e6\u0088\u0091\u00e7\u009a\u0084\u00e9\u0080\u0089\u00e6\u008b\u00a9 +FixMidiMixDialog.lbl_firstLine.text=\u00e6\u00a3\u0080\u00e6\u00b5\u008b\u00e5\u0088\u00b0\u00e6\u00bd\u009c\u00e5\u009c\u00a8\u00e7\u009a\u0084 Midi \u00e9\u0085\u008d\u00e7\u00bd\u00ae\u00e9\u0097\u00ae\u00e9\u00a2\u0098\u00e3\u0080\u0082\u00e7\u00a1\u00ae\u00e5\u00ae\u009a\u00e4\u00bf\u00ae\u00e5\u00a4\u008d\u00ef\u00bc\u009f +FixMidiMixDialog.lbl_fixInstrumentTitle.text=\u00e5\u00ba\u0094\u00e6\u009b\u00b4\u00e6\u008d\u00a2\u00e4\u00bb\u00a5\u00e4\u00b8\u008b\u00e9\u009f\u00b3\u00e8\u0089\u00b2\u00ef\u00bc\u008c\u00e4\u00bb\u00a5\u00e9\u0080\u0082\u00e5\u00ba\u0094\u00e5\u00bd\u0093\u00e5\u0089\u008d\u00e7\u009a\u0084\u00e8\u00be\u0093\u00e5\u0087\u00ba\u00e5\u0090\u0088\u00e6\u0088\u0090\u00e5\u0099\u00a8\u00e9\u0085\u008d\u00e7\u00bd\u00ae\: +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=\u00e4\u00bb\u00a5\u00e4\u00b8\u008b\u00e9\u00bc\u0093\u00e9\u0080\u009a\u00e9\u0081\u0093\u00e5\u00ba\u0094\u00e9\u0087\u008d\u00e6\u0096\u00b0\u00e9\u0093\u00be\u00e6\u008e\u00a5\u00e8\u0087\u00b3\u00e9\u0080\u009a\u00e9\u0081\u009310\: +MIDI_CONFIGURATION_PROBLEMS=Midi \u00e9\u0085\u008d\u00e7\u00bd\u00ae\u00e9\u0097\u00ae\u00e9\u00a2\u0098 +TransposeDisplayDialog.btn_Cancel.text=\u00e5\u008f\u0096\u00e6\u00b6\u0088 +TransposeDisplayDialog.btn_Ok.text=\u00e7\u00a1\u00ae\u00e5\u00ae\u009a +TransposeDisplayDialog.helpTextArea1.text=\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e6\u0097\u00b6\u00e6\u009b\u00b4\u00e6\u0094\u00b9\u00e8\u00b0\u0083\u00ef\u00bc\u0088\u00e7\u00a7\u00bb\u00e8\u00b0\u0083\u00e5\u0092\u008c\u00e5\u00bc\u00a6\u00e7\u00ac\u00a6\u00e5\u008f\u00b7\u00ef\u00bc\u0089\u00e3\u0080\u0082 +TransposeDisplayDialog.cb_enableTransposition.text=\u00e5\u0090\u00af\u00e7\u0094\u00a8\u00e5\u009b\u009e\u00e6\u0094\u00be\u00e5\u0088\u0087\u00e6\u008d\u00a2\u00e9\u0094\u00ae diff --git a/app/Test/src/main/java/org/jjazz/test/TesAllRhythmsGenerateSequence.java b/app/Test/src/main/java/org/jjazz/test/TesAllRhythmsGenerateSequence.java index 589e60c7da..80e3835d6f 100644 --- a/app/Test/src/main/java/org/jjazz/test/TesAllRhythmsGenerateSequence.java +++ b/app/Test/src/main/java/org/jjazz/test/TesAllRhythmsGenerateSequence.java @@ -80,7 +80,6 @@ public void actionPerformed(ActionEvent ae) private class Run implements Runnable { - Song song; MidiMix midiMix; @@ -99,7 +98,7 @@ private class Run implements Runnable @Override public void run() { - SongSequenceBuilder seqBuilder = new SongSequenceBuilder(new SongContext(song, midiMix), PlaybackSettings.getInstance().getPlaybackKeyTransposition()); + SongSequenceBuilder seqBuilder = new SongSequenceBuilder(new SongContext(song, midiMix), PlaybackSettings.getInstance().getDisplayTransposition()); SongStructure sgs = song.getSongStructure(); JJazzUndoManager um = JJazzUndoManagerFinder.getDefault().get(sgs); um.setLimit(1); // to not use too much memory with all rhythms instances... diff --git a/core/ChordLeadSheet/src/main/java/org/jjazz/chordleadsheet/api/ClsUtilities.java b/core/ChordLeadSheet/src/main/java/org/jjazz/chordleadsheet/api/ClsUtilities.java index acc89237cc..d550f2cad5 100644 --- a/core/ChordLeadSheet/src/main/java/org/jjazz/chordleadsheet/api/ClsUtilities.java +++ b/core/ChordLeadSheet/src/main/java/org/jjazz/chordleadsheet/api/ClsUtilities.java @@ -40,6 +40,9 @@ public class ClsUtilities * @param cls * @param transposition */ + /* TODO #534 Check if used bu other code than the playback transposition. + * It may be reused by passing transposition to all CLI_ChordSymbol. + * Just not called frrom SongSequenceBuilder */ static public void transpose(ChordLeadSheet cls, int transposition) { if (transposition == 0) diff --git a/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java b/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java index 96d1e3c425..b14039a52e 100644 --- a/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java +++ b/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java @@ -18,7 +18,7 @@ * You should have received a copy of the GNU Lesser General Public License * along with JJazzLab. If not, see * - * Contributor(s): + * Contributor(s): */ package org.jjazz.midi.api; @@ -328,7 +328,7 @@ public int getTransposition() } /** - * Set the transposition value in semi-tons. + * Set the transposition value in semitones. * * @param t [-36; +36] */ @@ -429,13 +429,13 @@ public String toString() { return "(v=" + volume + " t=" + transposition + " r=" + reverb + " c=" + chorus + " p=" + panoramic + ")"; } - /** + + /** * This enables XStream instance configuration even for private classes or classes from non-public packages of Netbeans modules. */ @ServiceProvider(service = XStreamConfigurator.class) public static class XStreamConfig implements XStreamConfigurator { - @Override public void configure(XStreamConfigurator.InstanceId instanceId, XStream xstream) { @@ -480,7 +480,6 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException */ private static class SerializationProxy implements Serializable { - private static final long serialVersionUID = -297226301726L; private int spVERSION = 2; // Do not make final! private int spTransposition; @@ -518,5 +517,4 @@ private Object readResolve() throws ObjectStreamException return is; } } - } diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/MusicGenerationQueue.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/MusicGenerationQueue.java index 907dca3e87..f4bd5dbae0 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/MusicGenerationQueue.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/MusicGenerationQueue.java @@ -200,12 +200,6 @@ public void run() if (incoming != null) { -// LOGGER.log(Level.FINE, "MusicGenerationQueue.run() handling incoming={0} nanoTime()={1}", new Object[] -// { -// incoming, System.nanoTime() -// }); - // LOGGER.info("UpdateRequestsHandler.run() handling cls=" + toDebugString(incoming.getSong().getChordLeadSheet())); - // Handle new context, save as pending if handling failed pendingSongContext = handleContext(incoming) ? null : incoming; @@ -214,12 +208,10 @@ public void run() // Handle the last pending context, reset it if handling was successful if (handleContext(pendingSongContext)) { -// LOGGER.log(Level.FINE, "MusicGenerationQueue.run() handled pendingSongContext={0}", pendingSongContext); pendingSongContext = null; } } - try { Thread.sleep(POLL_INTERVAL_MS); @@ -292,39 +284,23 @@ private synchronized SongContext readThreadSharedSongContextThenNullify() */ private boolean handleContext(SongContext sgContext) { - boolean b; - if (generationFuture == null) - { - // No generation task created yet, start one - // LOGGER.fine("handleContext() start generation FIRST TIME"); - startGenerationTask(sgContext); - b = true; - - } else if (generationFuture.isDone()) + boolean newContextAccepted; + if (generationFuture == null || generationFuture.isDone()) { - // There is a generation task but it is complete, restart one - // LOGGER.fine("handleContext() start generation"); + // Either no generation task created yet, or a previous one finished already. Start a new one either way. + // LOGGER.fine(() -> "handleContext() - Task is null, create a new one: " + (generationFuture == null) + // + ". Existing task already finished: " + generationFuture.isDone()); startGenerationTask(sgContext); - b = true; + newContextAccepted = true; } else { // There is a generation task : because not started yet (wait preUpdateBufferTimeMs) or generating music - // Try to update it - if (generationTask.changeContext(sgContext)) - { - // LOGGER.fine("handleContext() changed context of current generation task"); - // OK, task was waiting, we're done - b = true; - - } else - { - // NOK, task is generating music - b = false; - } + // Try to update it. Value is true means task was waiting, we're done. Value is false means task is generating music. + newContextAccepted = generationTask.changeContext(sgContext); } - return b; + return newContextAccepted; } @@ -376,7 +352,7 @@ private class UpdateGenerationTask implements Runnable } /** - * Change the context for which to generate the update + * Change the context for which to generate the update. *

* Once the task has started (run() was called) the context can't be changed anymore. * @@ -402,14 +378,14 @@ public void run() started = true; } - long startTime = System.nanoTime(); LOGGER.log(Level.FINE, "UpdateGenerationTask.run() >>> STARTING generation nanoTime()={0}", startTime); - //LOGGER.info("UpdateGenerationTask.run() >>> STARTING generation cls=" + toDebugString(songContext.getSong().getChordLeadSheet())); - // Recompute the RhythmVoice mapRvPhrases - SongSequenceBuilder sgBuilder = new SongSequenceBuilder(songContext, PlaybackSettings.getInstance().getPlaybackKeyTransposition()); + // Recompute the RhythmVoice mapRvPhrases + // TODO #534 Disply transposition should not happen here, pass zero and check if we can get rid of the parameter + SongSequenceBuilder sgBuilder = new SongSequenceBuilder(songContext, 0); + Throwable throwable = null; Map map = null; try @@ -445,18 +421,13 @@ public void run() // Notify listeners cs.fireChange(); - try { Thread.sleep(postUpdateSleepTime); } catch (InterruptedException ex) { LOGGER.log(Level.FINE, "UpdateGenerator.run() UpdateGenerator thread.sleep interrupted ex={0}", ex.getMessage()); - return; } - - } - } } diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackListener.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackListener.java index 318db7fc09..9c695b6a67 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackListener.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackListener.java @@ -27,7 +27,7 @@ import org.jjazz.songstructure.api.SongPart; /** - * Listener of events occuring during song playback. + * Listener of events occurring during song playback. *

* MusicController will fire the events taking into account the user-defined output synth latency. Events are fired by the * MusicController on the Event Dispatching Thread. Event handling must be time-efficient. @@ -35,7 +35,6 @@ */ public interface PlaybackListener { - /** * The enable status has changed. * diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java index 095a9b0a3d..2f730ab4db 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java @@ -52,7 +52,7 @@ import org.jjazz.songstructure.api.SongPart; /** - * Playback settings (click, precount, looping, playback transposition, auto-update mode) and related helper methods. + * Playback settings (click, precount, looping, transposition, auto-update mode) and related helper methods. *

* Property change events are fired when settings are modified. */ @@ -94,7 +94,10 @@ static public PrecountMode valueOf(String name, PrecountMode defValue) */ public static final String PROP_VETO_PRE_PLAYBACK = "PropVetoPrePlayback"; public static final String PROP_LOOPCOUNT = "PropLoopCount"; - public static final String PROP_PLAYBACK_KEY_TRANSPOSITION = "PlaybackTransposition"; + + // TODO #534 This should go away + public static final String PROP_DISPLAY_TRANSPOSITION = "DisplayTransposition"; + public static final String PROP_CLICK_PITCH_HIGH = "ClickPitchHigh"; public static final String PROP_CLICK_PITCH_LOW = "ClickPitchLow"; public static final String PROP_CLICK_VELOCITY_HIGH = "ClickVelocityHigh"; @@ -158,36 +161,33 @@ public void setLoopCount(int loopCount) } /** - * Get the key transposition applied to chord symbols when playing a song. - *

+ * Get the key transposition applied to all music notation shown in the UI. * * @return [0;-11] Default is 0. */ - public int getPlaybackKeyTransposition() + public int getDisplayTransposition() // TODO #534 The ints should be positive for showing music, negative for editing { - return prefs.getInt(PROP_PLAYBACK_KEY_TRANSPOSITION, 0); + return prefs.getInt(PROP_DISPLAY_TRANSPOSITION, 0); } /** - * Set the key transposition applied to chord symbols when playing a song. - *

- * Ex: if transposition=-2, chord=C#7 will be replaced by B7. + * Set the key transposition applied all music notation shown in the UI. *

- * Note that to have some effect the current PlaybackSession must take into account this parameter. + * Ex: if transposition=-2, chord=B7 will be shown as C#7. * * @param t [0;-11] */ - public void setPlaybackKeyTransposition(int t) + public void setDisplayTransposition(int t) { if (t < -11 || t > 0) { throw new IllegalArgumentException("t=" + t); } - int old = getPlaybackKeyTransposition(); - prefs.putInt(PROP_PLAYBACK_KEY_TRANSPOSITION, t); - pcs.firePropertyChange(PROP_PLAYBACK_KEY_TRANSPOSITION, old, t); - fireIsMusicGenerationModified(PROP_PLAYBACK_KEY_TRANSPOSITION, t); + int old = getDisplayTransposition(); + prefs.putInt(PROP_DISPLAY_TRANSPOSITION, t); + pcs.firePropertyChange(PROP_DISPLAY_TRANSPOSITION, old, t); + fireIsMusicGenerationModified(PROP_DISPLAY_TRANSPOSITION, t); } /** @@ -225,7 +225,6 @@ public void setPlaybackClickEnabled(boolean b) prefs.putBoolean(PROP_PLAYBACK_CLICK_ENABLED, b); pcs.firePropertyChange(PROP_PLAYBACK_CLICK_ENABLED, old, b); fireIsMusicGenerationModified(PROP_PLAYBACK_CLICK_ENABLED, b); - } public boolean isPlaybackClickEnabled() @@ -703,6 +702,4 @@ private void fireIsMusicGenerationModified(String id, Object data) { pcs.firePropertyChange(PROP_MUSIC_GENERATION, id, data); } - - } diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/SongMidiExporter.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/SongMidiExporter.java index 51fa1862ae..6df62617cf 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/SongMidiExporter.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/SongMidiExporter.java @@ -85,7 +85,7 @@ static public boolean songToMidiFile(Song song, MidiMix midiMix, File midiFile, var sgContext = new SongContext(song, midiMix); - var ssb = new SongSequenceBuilder(sgContext, PlaybackSettings.getInstance().getPlaybackKeyTransposition()); + var ssb = new SongSequenceBuilder(sgContext, 0); SongSequenceBuilder.SongSequence songSequence = null; diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/BaseSongSession.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/BaseSongSession.java index c7a337c7d0..64654eef48 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/BaseSongSession.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/BaseSongSession.java @@ -83,7 +83,7 @@ public class BaseSongSession implements PropertyChangeListener, PlaybackSession, private long loopStartTick = 0; private long loopEndTick = -1; protected int loopCount = PLAYBACK_SETTINGS_LOOP_COUNT; // Need to be accessible from subclass, because of getLoopCount() implementation - private boolean isPlaybackTranspositionEnabled = true; + private boolean isPlaybackTranspositionEnabled = true; // TODO #534 This does not serialize w/song, get rid of attibute? private boolean isClickTrackIncluded = true; private boolean isPrecountTrackIncluded = true; private boolean isControlTrackIncluded = true; @@ -109,10 +109,7 @@ public class BaseSongSession implements PropertyChangeListener, PlaybackSession, */ public BaseSongSession(SongContext sgContext, boolean enablePlaybackTransposition, boolean enableClickTrack, boolean enablePrecountTrack, boolean enableControlTrack, - int loopCount, - ActionListener endOfPlaybackAction, - boolean useActiveSongBackgroundMusicBuilder - ) + int loopCount, ActionListener endOfPlaybackAction, boolean useActiveSongBackgroundMusicBuilder) { if (sgContext == null) { @@ -393,7 +390,7 @@ public int getPrecountTrackId() return precountClickTrackId; } - public boolean isPlaybackTranspositionEnabled() + public boolean isPlaybackTranspositionEnabled() // TODO #534 Just used for THE playback transposition? Cleanup if that's the case { return isPlaybackTranspositionEnabled; } @@ -482,7 +479,6 @@ public void propertyChange(PropertyChangeEvent e) pcs.firePropertyChange(PROP_MUTED_TRACKS, false, true); } } - default -> { } @@ -498,7 +494,6 @@ public void propertyChange(PropertyChangeEvent e) mapTrackIdMuted.put(playbackClickTrackId, !PlaybackSettings.getInstance().isPlaybackClickEnabled()); pcs.firePropertyChange(PROP_MUTED_TRACKS, false, true); } - case PlaybackSettings.PROP_LOOPCOUNT -> { if (loopCount == PLAYBACK_SETTINGS_LOOP_COUNT) @@ -506,15 +501,12 @@ public void propertyChange(PropertyChangeEvent e) pcs.firePropertyChange(PROP_LOOP_COUNT, (Integer) e.getOldValue(), (Integer) e.getNewValue()); } } - - default -> // E.g. PROP_PLAYBACK_KEY_TRANSPOSITION + default -> // E.g. PROP_DISPLAY_TRANSPOSITION { } } - // E.g. PROP_PLAYBACK_KEY_TRANSPOSITION + // E.g. PROP_DISPLAY_TRANSPOSITION // Nothing - - } } @@ -583,7 +575,6 @@ protected int preparePlaybackClickTrack(Sequence sequence, SongContext context) // ========================================================================================================== /** - * * @param sgContext * @param silent * @param useBackgroundMusicBuilder @@ -594,10 +585,8 @@ private SongSequenceBuilder.SongSequence generateSongSequence(SongContext sgCont { SongSequenceBuilder.SongSequence res = null; - - int playbackKeyTranspose = isPlaybackTranspositionEnabled() ? PlaybackSettings.getInstance().getPlaybackKeyTransposition() : 0; - SongSequenceBuilder seqBuilder = new SongSequenceBuilder(sgContext, playbackKeyTranspose); // Will work on a deep copy of sgContext - + // TODO #534 Check consequences, can I get rid of the constructor that receives transposition? + SongSequenceBuilder seqBuilder = new SongSequenceBuilder(sgContext, 0); // Will work on a deep copy of sgContext // Reuse ActiveSongBackgroundMusicBuilder result when possible var asbmb = ActiveSongBackgroundMusicBuilder.getDefault(); @@ -627,8 +616,6 @@ private SongSequenceBuilder.SongSequence generateSongSequence(SongContext sgCont throw new MusicGenerationException(ResUtil.getString(getClass(), "ERR_BuildSeqError")); } - return res; } - } diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java index 4e53b9b2c5..4c77dd98e7 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java @@ -30,7 +30,6 @@ import java.util.logging.Level; import java.util.logging.Logger; import org.jjazz.chordleadsheet.api.ChordLeadSheet; -import org.jjazz.chordleadsheet.api.event.ClsActionEvent; import org.jjazz.chordleadsheet.api.item.CLI_Section; import org.jjazz.midimix.api.MidiMix; import org.jjazz.midimix.api.UserRhythmVoice; @@ -49,7 +48,6 @@ import org.jjazz.song.api.SongMetaEvents.ClsSourceActionEvent; import org.jjazz.song.api.SongMetaEvents.SgsSourceActionEvent; import org.jjazz.songcontext.api.SongContext; -import org.jjazz.songstructure.api.event.SgsActionEvent; import static org.jjazz.songstructure.api.event.SgsActionEvent.API_ID.AddSongParts; import static org.jjazz.songstructure.api.event.SgsActionEvent.API_ID.RemoveSongParts; import static org.jjazz.songstructure.api.event.SgsActionEvent.API_ID.ReplaceSongParts; @@ -393,7 +391,6 @@ public void propertyChange(PropertyChangeEvent e) // // MidiMix source events // - case MidiMix.PROP_RHYTHM_VOICE_CHANNEL, MidiMix.PROP_RHYTHM_VOICE -> { doDisableUpdates = true; @@ -414,7 +411,6 @@ public void propertyChange(PropertyChangeEvent e) doUpdate = true; } - // // PlaybackSettings source events // @@ -422,11 +418,15 @@ public void propertyChange(PropertyChangeEvent e) { dirty = true; } - case PlaybackSettings.PROP_PLAYBACK_KEY_TRANSPOSITION, PlaybackSettings.PROP_PLAYBACK_CLICK_ENABLED -> + case PlaybackSettings.PROP_PLAYBACK_CLICK_ENABLED -> { doUpdate = true; } - + case PlaybackSettings.PROP_DISPLAY_TRANSPOSITION -> + { + // TODO #534 This should probably not be sent here in the first place, stop it up the chain. + // NO-OP + } // // Song property events @@ -448,8 +448,6 @@ public void propertyChange(PropertyChangeEvent e) { doUpdate = true; } - - default -> { throw new IllegalArgumentException("s=" + s); diff --git a/core/RhythmMusicGeneration/src/main/java/org/jjazz/rhythmmusicgeneration/api/SongSequenceBuilder.java b/core/RhythmMusicGeneration/src/main/java/org/jjazz/rhythmmusicgeneration/api/SongSequenceBuilder.java index b703d79349..033bfdccb3 100644 --- a/core/RhythmMusicGeneration/src/main/java/org/jjazz/rhythmmusicgeneration/api/SongSequenceBuilder.java +++ b/core/RhythmMusicGeneration/src/main/java/org/jjazz/rhythmmusicgeneration/api/SongSequenceBuilder.java @@ -134,6 +134,8 @@ static public class SongSequence * @param playbackKeyTranspose Optional chord symbols transposition (use 0 for no transposition) */ public SongSequenceBuilder(SongContext sgContext, int playbackKeyTranspose) + // TODO #534 Probably get rid of the transpose param here, not sure if it will be used at all + // >>>>> public SongSequenceBuilder(SongContext sgContext) <<<<< { Objects.requireNonNull(sgContext); this.songContextOriginal = sgContext; @@ -1127,6 +1129,7 @@ private void processInstrumentsSettings(SongContext context, Map pitch + insSet.getTransposition()); From 273a1b868c78ab54ee14db0200ecd775b37c7986 Mon Sep 17 00:00:00 2001 From: Juan Ottonello Date: Mon, 6 Oct 2025 15:51:21 +1300 Subject: [PATCH 2/7] Modify naming and clean usages of transpose value in music playback #534 --- .../java/org/jjazz/arranger/Arranger.java | 2 +- .../jjazz/chordinspector/ChordListener.java | 8 ++-- .../AutoPreviewToolbarPanel.form | 2 +- .../AutoPreviewToolbarPanel.java | 11 +++-- .../TransposeDisplayDialog.java | 7 ++- ...va => TransposeDisplayedChordSymbols.java} | 19 ++++---- .../musiccontrolactions/Bundle.properties | 6 +-- .../RhythmPreviewerImpl.java | 2 +- .../RP_SYS_CustomPhraseEditor.java | 1 - .../RP_SYS_DrumsTransformComp.java | 2 +- .../api/RealTimeRpEditorDialog.java | 1 - .../test/TesAllRhythmsGenerateSequence.java | 3 +- .../test/TestMusicGenerationOnSongFiles.java | 2 +- .../jjazz/midi/api/InstrumentSettings.java | 2 +- .../java/org/jjazz/midimix/api/MidiMix.java | 2 +- .../api/MusicGenerationQueue.java | 43 +++++++++++++----- .../musiccontrol/api/PlaybackSettings.java | 36 +++++++-------- .../musiccontrol/api/SongMidiExporter.java | 3 +- .../api/playbacksession/BaseSongSession.java | 23 +++------- .../playbacksession/StaticSongSession.java | 36 +++++---------- .../UpdateProviderSongSession.java | 45 ++++++------------- .../api/SongSequenceBuilder.java | 9 +--- 22 files changed, 113 insertions(+), 152 deletions(-) rename app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/{TransposeDisplay.java => TransposeDisplayedChordSymbols.java} (85%) diff --git a/app/Arranger/src/main/java/org/jjazz/arranger/Arranger.java b/app/Arranger/src/main/java/org/jjazz/arranger/Arranger.java index 83add7d898..ea58a81232 100644 --- a/app/Arranger/src/main/java/org/jjazz/arranger/Arranger.java +++ b/app/Arranger/src/main/java/org/jjazz/arranger/Arranger.java @@ -165,7 +165,7 @@ public void play() throws MusicGenerationException songPartWork = songContextWork.getSongParts().get(0); var cls = songContextWork.getSong().getChordLeadSheet(); firstChordSymbol = cls.getItems(songPartWork.getParentSection(), CLI_ChordSymbol.class).get(0); - var dynSession = UpdateProviderSongSession.getSession(songContextWork, true, true, false, false, false, Sequencer.LOOP_CONTINUOUSLY, null); + var dynSession = UpdateProviderSongSession.getSession(songContextWork, true, false, false, false, Sequencer.LOOP_CONTINUOUSLY, null); dynSession.setPreUpdateBufferTimeMs(5); // Each user chord change generates only 2 song changes (remove and add 1 CLI_ChordSymbol) dynSession.setPostUpdateSleepTimeMs(100); // This allow user to change chord quickly dynSession.setUserErrorExceptionHandler(null); // User execption may occur depending on timing, as we remove then add a chord symbol at section start diff --git a/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordListener.java b/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordListener.java index d503c6e2de..d048c1b871 100644 --- a/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordListener.java +++ b/app/ChordInspector/src/main/java/org/jjazz/chordinspector/ChordListener.java @@ -58,15 +58,15 @@ public ChordListener(ChordInspectorPanel editor) // Listen to transposition option changes playbackSettings = PlaybackSettings.getInstance(); - playbackSettings.addPropertyChangeListener(PlaybackSettings.PROP_DISPLAY_TRANSPOSITION, this); - setTransposition(playbackSettings.getDisplayTransposition()); + playbackSettings.addPropertyChangeListener(PlaybackSettings.PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, this); + setTransposition(playbackSettings.getChordSymbolsDisplayTransposition()); } public void cleanup() { cap.removeWeakSelectionListener(this); - playbackSettings.removePropertyChangeListener(PlaybackSettings.PROP_DISPLAY_TRANSPOSITION, this); + playbackSettings.removePropertyChangeListener(PlaybackSettings.PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, this); if (chordSymbol != null) { chordSymbol.removePropertyChangeListener(this); @@ -150,7 +150,7 @@ public void propertyChange(PropertyChangeEvent evt) { editor.setModel(chordSymbol.getData()); } - } else if (PlaybackSettings.PROP_DISPLAY_TRANSPOSITION.equals(evt.getPropertyName())) + } else if (PlaybackSettings.PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION.equals(evt.getPropertyName())) { setTransposition((int) evt.getNewValue()); } diff --git a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/AutoPreviewToolbarPanel.form b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/AutoPreviewToolbarPanel.form index e0f975aef9..c375e322bc 100644 --- a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/AutoPreviewToolbarPanel.form +++ b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/AutoPreviewToolbarPanel.form @@ -37,7 +37,7 @@ - + diff --git a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/AutoPreviewToolbarPanel.java b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/AutoPreviewToolbarPanel.java index 631e40466e..6435c06e67 100644 --- a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/AutoPreviewToolbarPanel.java +++ b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/AutoPreviewToolbarPanel.java @@ -44,7 +44,6 @@ */ public class AutoPreviewToolbarPanel extends javax.swing.JPanel { - private static final Logger LOGGER = Logger.getLogger(AutoPreviewToolbarPanel.class.getSimpleName()); public AutoPreviewToolbarPanel() @@ -53,7 +52,7 @@ public AutoPreviewToolbarPanel() new AutoUpdateLabelModel(lbl_autoPreview); - this.fbtn_playbackTransposition.setAction(Actions.forID("MusicControls", "org.jjazz.musiccontrolactions.transposeplaybackkey")); //NOI18N + this.fbtn_chordsDisplayTransposition.setAction(Actions.forID("MusicControls", "org.jjazz.musiccontrolactions.transposedisplay")); //NOI18N } // ====================================================================== @@ -170,7 +169,7 @@ private void initComponents() { filler4 = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 32767)); - fbtn_playbackTransposition = new org.jjazz.flatcomponents.api.FlatToggleButton(); + fbtn_chordsDisplayTransposition = new org.jjazz.flatcomponents.api.FlatToggleButton(); filler9 = new javax.swing.Box.Filler(new java.awt.Dimension(3, 0), new java.awt.Dimension(6, 0), new java.awt.Dimension(6, 32767)); lbl_autoPreview = new javax.swing.JLabel(); @@ -178,8 +177,8 @@ private void initComponents() setLayout(new javax.swing.BoxLayout(this, javax.swing.BoxLayout.X_AXIS)); add(filler4); - fbtn_playbackTransposition.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/jjazz/musiccontrolactions/resources/Sax-OFF-24x24.png"))); // NOI18N - add(fbtn_playbackTransposition); + fbtn_chordsDisplayTransposition.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/jjazz/musiccontrolactions/resources/Sax-OFF-24x24.png"))); // NOI18N + add(fbtn_chordsDisplayTransposition); add(filler9); lbl_autoPreview.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/jjazz/musiccontrolactions/resources/AutoUpdate-OFF-24x24.png"))); // NOI18N @@ -187,7 +186,7 @@ private void initComponents() }// //GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables - private org.jjazz.flatcomponents.api.FlatToggleButton fbtn_playbackTransposition; + private org.jjazz.flatcomponents.api.FlatToggleButton fbtn_chordsDisplayTransposition; private javax.swing.Box.Filler filler4; private javax.swing.Box.Filler filler9; private javax.swing.JLabel lbl_autoPreview; diff --git a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java index 446c51146d..5cc719ddca 100644 --- a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java +++ b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java @@ -22,6 +22,7 @@ */ package org.jjazz.musiccontrolactions; +import com.google.common.base.Preconditions; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import javax.swing.AbstractAction; @@ -66,10 +67,8 @@ private TransposeDisplayDialog(java.awt.Frame parent, boolean modal) */ public void preset(int transposeBy) { - if (transposeBy < -11 || transposeBy > 0) - { - throw new IllegalArgumentException("transposition=" + transposeBy); - } + Preconditions.checkArgument(transposeBy >= -11 && transposeBy <= 0, "transposition=" + transposeBy); + cb_enableTransposition.setSelected(transposeBy != 0); cmb_transposition.setEnabled(transposeBy != 0); if (transposeBy != 0) diff --git a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplay.java b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayedChordSymbols.java similarity index 85% rename from app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplay.java rename to app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayedChordSymbols.java index bb4dcbd9f8..844e726aec 100644 --- a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplay.java +++ b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayedChordSymbols.java @@ -42,21 +42,21 @@ /** * Transpose the leadsheet and all other music shown in the UI. */ -@ActionID(category = "MusicControls", id = "org.jjazz.musiccontrolactions.transposeplaybackkey") +@ActionID(category = "MusicControls", id = "org.jjazz.musiccontrolactions.transposedisplay") @ActionRegistration(displayName = "#CTL_TransposeDisplay", lazy = false) @ActionReferences( { @ActionReference(path = "Actions/ExtendedToolbar", position = 10) }) -public class TransposeDisplay extends AbstractAction implements PropertyChangeListener +public class TransposeDisplayedChordSymbols extends AbstractAction implements PropertyChangeListener { @StaticResource(relative = true) private static final String OFF_ICON = "resources/Sax-OFF-24x24.png"; @StaticResource(relative = true) private static final String ON_ICON = "resources/Sax-ON-24x24.png"; - private static final Logger LOGGER = Logger.getLogger(TransposeDisplay.class.getSimpleName()); + private static final Logger LOGGER = Logger.getLogger(TransposeDisplayedChordSymbols.class.getSimpleName()); - public TransposeDisplay() + public TransposeDisplayedChordSymbols() { putValue("hideActionText", true); updateButtonUI(); @@ -70,16 +70,15 @@ public void actionPerformed(ActionEvent e) var ps = PlaybackSettings.getInstance(); var dlg = TransposeDisplayDialog.getInstance(); - dlg.preset(ps.getDisplayTransposition()); + dlg.preset(ps.getChordSymbolsDisplayTransposition()); dlg.setLocationRelativeTo(WindowManager.getDefault().getMainWindow()); dlg.setVisible(true); if (dlg.isExitOk()) { - int old = ps.getDisplayTransposition(); - ps.setDisplayTransposition(dlg.getDisplayTransposition()); + ps.setChordSymbolsDisplayTransposition(dlg.getDisplayTransposition()); - Analytics.setProperties(Analytics.buildMap("Playback Key Transpose", dlg.getDisplayTransposition())); + Analytics.setProperties(Analytics.buildMap("Chord symbol display transposition", dlg.getDisplayTransposition())); } } @@ -92,7 +91,7 @@ public void propertyChange(PropertyChangeEvent evt) var mc = PlaybackSettings.getInstance(); if (evt.getSource() == mc) { - if (evt.getPropertyName().equals(PlaybackSettings.PROP_DISPLAY_TRANSPOSITION)) + if (evt.getPropertyName().equals(PlaybackSettings.PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION)) { updateButtonUI(); } @@ -104,7 +103,7 @@ public void propertyChange(PropertyChangeEvent evt) // ====================================================================== private void updateButtonUI() { - int t = PlaybackSettings.getInstance().getDisplayTransposition(); + int t = PlaybackSettings.getInstance().getChordSymbolsDisplayTransposition(); String iconPath = t == 0 ? OFF_ICON : ON_ICON; putValue(Action.SMALL_ICON, new ImageIcon(getClass().getResource(iconPath))); diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties index 8f92c229f9..a6fb8b51be 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties @@ -3,7 +3,7 @@ AutoUpdateONtooltip=Auto update is ON: playing music is updated in real time wit CTL_Click=Click CTL_ClickTooltip=Click during playback CTL_ControlToolbarAction=Music Control Toolbar -CTL_CurrentDisplayTransposition=Current display transposition: {0} +CTL_CurrentDisplayTransposition=Current chord symbol display transposition: {0} CTL_DecreaseTempo=Decrease Tempo CTL_IncreaseTempo=Increase Tempo CTL_Loop=Loop @@ -30,7 +30,7 @@ CTL_ShowPlaybackPoint=Show playback point CTL_ShowPlaybackTooltip=Highlight the bar being played CTL_Stop=Stop CTL_StopTooltip=Stop playback (shift space) -CTL_TransposeDisplay=Transpose display +CTL_TransposeDisplay=Chord symbol display transposition ControlToolbarPanel.fbtn_Active.toolTipText=If ON, song is active and Midi messages are enabled. Only one song can be active at a time. ControlToolbarPanel.fbtn_Click.toolTipText=Click ControlToolbarPanel.fbtn_Pause.toolTipText=Pause the playback @@ -56,5 +56,5 @@ CheckLowQualitySynthDialog.title=Warning CheckLowQualitySynthDialog.LowQualitySynthText=Low quality synth detected: {0}\n\nJJazzLab will not sound good.\n\nIf you can, use the embedded FluidSynth (see Midi panel from Options/Preferences menu). TransposeDisplayDialog.btn_Cancel.text=Cancel TransposeDisplayDialog.btn_Ok.text=OK -TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) that are displayed. +TransposeDisplayDialog.helpTextArea1.text=Transpose the chord symbols only for display (no impact on generated music). TransposeDisplayDialog.cb_enableTransposition.text=Enable display transposition diff --git a/app/RhythmSelectionDialog/src/main/java/org/jjazz/rhythmselectiondialog/RhythmPreviewerImpl.java b/app/RhythmSelectionDialog/src/main/java/org/jjazz/rhythmselectiondialog/RhythmPreviewerImpl.java index da8ac75cdf..f77bd6384e 100644 --- a/app/RhythmSelectionDialog/src/main/java/org/jjazz/rhythmselectiondialog/RhythmPreviewerImpl.java +++ b/app/RhythmSelectionDialog/src/main/java/org/jjazz/rhythmselectiondialog/RhythmPreviewerImpl.java @@ -307,7 +307,7 @@ private class PreviewSession extends BaseSongSession private PreviewSession(SongContext sgContext, int loopCount, ActionListener endOfPlaybackAction) { - super(sgContext, true, false, false, true, loopCount, endOfPlaybackAction, false); + super(sgContext, false, false, true, loopCount, endOfPlaybackAction, false); } @Override diff --git a/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/RP_SYS_CustomPhraseEditor.java b/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/RP_SYS_CustomPhraseEditor.java index 0446c45ccb..24535fde06 100644 --- a/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/RP_SYS_CustomPhraseEditor.java +++ b/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/RP_SYS_CustomPhraseEditor.java @@ -136,7 +136,6 @@ public void preset(RP_SYS_CustomPhraseValue rpValue, SongPartContext sptContext) false, false, false, - false, 0, null, false); diff --git a/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/RP_SYS_DrumsTransformComp.java b/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/RP_SYS_DrumsTransformComp.java index 1317abf619..97ff06062f 100644 --- a/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/RP_SYS_DrumsTransformComp.java +++ b/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/RP_SYS_DrumsTransformComp.java @@ -177,7 +177,7 @@ public void preset(RP_SYS_DrumsTransformValue rpValue, SongPartContext sptContex Runnable task = () -> { SongContext workContext = RealTimeRpEditorDialog.buildPreviewContext(songPartContext, rp, rp.getDefaultValue()); - BaseSongSession tmpSession = new BaseSongSession(workContext, false, false, false, false, 0, null, false); + BaseSongSession tmpSession = new BaseSongSession(workContext, false, false, false, 0, null, false); try { tmpSession.generate(true); // This can block for some time, possibly a few seconds on slow computers/complex rhythms diff --git a/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/api/RealTimeRpEditorDialog.java b/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/api/RealTimeRpEditorDialog.java index 3554b6132c..fac88fd326 100644 --- a/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/api/RealTimeRpEditorDialog.java +++ b/app/RpCustomEditorFactoryImpl/src/main/java/org/jjazz/rpcustomeditorfactoryimpl/api/RealTimeRpEditorDialog.java @@ -300,7 +300,6 @@ private void startPlayback() // UpdateProviderSongSession automatically generates updates if a RhythmParameter value changes var dynSession = UpdateProviderSongSession.getSession(songPartContextpreview, - true, false, false, true, diff --git a/app/Test/src/main/java/org/jjazz/test/TesAllRhythmsGenerateSequence.java b/app/Test/src/main/java/org/jjazz/test/TesAllRhythmsGenerateSequence.java index 80e3835d6f..4a5613d87c 100644 --- a/app/Test/src/main/java/org/jjazz/test/TesAllRhythmsGenerateSequence.java +++ b/app/Test/src/main/java/org/jjazz/test/TesAllRhythmsGenerateSequence.java @@ -32,7 +32,6 @@ import org.jjazz.chordleadsheet.api.UnsupportedEditException; import org.jjazz.midimix.api.MidiMix; import org.jjazz.midimix.spi.MidiMixManager; -import org.jjazz.musiccontrol.api.PlaybackSettings; import org.jjazz.rhythm.api.Rhythm; import org.jjazz.rhythmdatabase.api.RhythmDatabase; import org.jjazz.rhythmmusicgeneration.api.SongSequenceBuilder; @@ -98,7 +97,7 @@ private class Run implements Runnable @Override public void run() { - SongSequenceBuilder seqBuilder = new SongSequenceBuilder(new SongContext(song, midiMix), PlaybackSettings.getInstance().getDisplayTransposition()); + SongSequenceBuilder seqBuilder = new SongSequenceBuilder(new SongContext(song, midiMix)); SongStructure sgs = song.getSongStructure(); JJazzUndoManager um = JJazzUndoManagerFinder.getDefault().get(sgs); um.setLimit(1); // to not use too much memory with all rhythms instances... diff --git a/app/Test/src/main/java/org/jjazz/test/TestMusicGenerationOnSongFiles.java b/app/Test/src/main/java/org/jjazz/test/TestMusicGenerationOnSongFiles.java index d60a93b673..349df52521 100644 --- a/app/Test/src/main/java/org/jjazz/test/TestMusicGenerationOnSongFiles.java +++ b/app/Test/src/main/java/org/jjazz/test/TestMusicGenerationOnSongFiles.java @@ -166,7 +166,7 @@ public void run() // Generate music LOGGER.log(Level.INFO, " Generating music..."); var midiMix = MidiMixManager.getDefault().findMix(song); // Can raise MidiUnavailableException - SongSequenceBuilder seqBuilder = new SongSequenceBuilder(new SongContext(song, midiMix), 0); + SongSequenceBuilder seqBuilder = new SongSequenceBuilder(new SongContext(song, midiMix)); seqBuilder.buildMapRvPhrase(true); } diff --git a/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java b/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java index b14039a52e..329884805d 100644 --- a/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java +++ b/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java @@ -47,7 +47,7 @@ public class InstrumentSettings implements Serializable { - public final static String PROPERTY_TRANSPOSITION = "Transposition"; + public final static String PROPERTY_TRANSPOSITION = "Transposition"; // ? public final static String PROPERTY_VELOCITY_SHIFT = "VelocityShift"; public final static String PROPERTY_VOLUME = "Volume"; public final static String PROPERTY_PANORAMIC = "Panoramic"; diff --git a/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java b/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java index 8e8fef2003..d377704e1d 100644 --- a/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java +++ b/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java @@ -136,7 +136,7 @@ public class MidiMix implements SgsChangeListener, PropertyChangeListener, Vetoa /** * oldValue=InstumentMix, newValue=transposition value. */ - public static final String PROP_INSTRUMENT_TRANSPOSITION = "InstrumentTransposition"; + public static final String PROP_INSTRUMENT_TRANSPOSITION = "InstrumentTransposition"; // ? /** * oldValue=InstumentMix, newValue=velocity shift value. */ diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/MusicGenerationQueue.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/MusicGenerationQueue.java index f4bd5dbae0..7b91bfa787 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/MusicGenerationQueue.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/MusicGenerationQueue.java @@ -200,6 +200,13 @@ public void run() if (incoming != null) { + // DON'T REMOVE commented logging! A few recurrent bugs have shown up and it helps to troubleshoot them. +// LOGGER.log(Level.FINE, "MusicGenerationQueue.run() handling incoming={0} nanoTime()={1}", new Object[] +// { +// incoming, System.nanoTime() +// }); + // LOGGER.info("UpdateRequestsHandler.run() handling cls=" + toDebugString(incoming.getSong().getChordLeadSheet())); + // Handle new context, save as pending if handling failed pendingSongContext = handleContext(incoming) ? null : incoming; @@ -208,6 +215,7 @@ public void run() // Handle the last pending context, reset it if handling was successful if (handleContext(pendingSongContext)) { +// LOGGER.log(Level.FINE, "MusicGenerationQueue.run() handled pendingSongContext={0}", pendingSongContext); pendingSongContext = null; } } @@ -285,19 +293,35 @@ private synchronized SongContext readThreadSharedSongContextThenNullify() private boolean handleContext(SongContext sgContext) { boolean newContextAccepted; - if (generationFuture == null || generationFuture.isDone()) + if (generationFuture == null) + { + // No generation task created yet, start one + // LOGGER.fine("handleContext() start generation FIRST TIME"); + startGenerationTask(sgContext); + newContextAccepted = true; + + } else if (generationFuture.isDone()) { - // Either no generation task created yet, or a previous one finished already. Start a new one either way. - // LOGGER.fine(() -> "handleContext() - Task is null, create a new one: " + (generationFuture == null) - // + ". Existing task already finished: " + generationFuture.isDone()); + // There is a generation task but it is complete, restart one + // LOGGER.fine("handleContext() start generation"); startGenerationTask(sgContext); newContextAccepted = true; } else { // There is a generation task : because not started yet (wait preUpdateBufferTimeMs) or generating music - // Try to update it. Value is true means task was waiting, we're done. Value is false means task is generating music. - newContextAccepted = generationTask.changeContext(sgContext); + // Try to update it + if (generationTask.changeContext(sgContext)) + { + // LOGGER.fine("handleContext() changed context of current generation task"); + // OK, task was waiting, we're done + newContextAccepted = true; + + } else + { + // NOK, task is generating music + newContextAccepted = false; + } } return newContextAccepted; @@ -352,7 +376,7 @@ private class UpdateGenerationTask implements Runnable } /** - * Change the context for which to generate the update. + * Change the context for which to generate the update *

* Once the task has started (run() was called) the context can't be changed anymore. * @@ -380,11 +404,10 @@ public void run() long startTime = System.nanoTime(); LOGGER.log(Level.FINE, "UpdateGenerationTask.run() >>> STARTING generation nanoTime()={0}", startTime); - + //LOGGER.info("UpdateGenerationTask.run() >>> STARTING generation cls=" + toDebugString(songContext.getSong().getChordLeadSheet())); // Recompute the RhythmVoice mapRvPhrases - // TODO #534 Disply transposition should not happen here, pass zero and check if we can get rid of the parameter - SongSequenceBuilder sgBuilder = new SongSequenceBuilder(songContext, 0); + SongSequenceBuilder sgBuilder = new SongSequenceBuilder(songContext); Throwable throwable = null; Map map = null; diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java index 2f730ab4db..e786d412e6 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java @@ -22,6 +22,7 @@ */ package org.jjazz.musiccontrol.api; +import com.google.common.base.Preconditions; import java.beans.PropertyChangeListener; import java.beans.PropertyVetoException; import java.beans.VetoableChangeListener; @@ -94,10 +95,10 @@ static public PrecountMode valueOf(String name, PrecountMode defValue) */ public static final String PROP_VETO_PRE_PLAYBACK = "PropVetoPrePlayback"; public static final String PROP_LOOPCOUNT = "PropLoopCount"; - - // TODO #534 This should go away - public static final String PROP_DISPLAY_TRANSPOSITION = "DisplayTransposition"; - + + // TODO #534 This should ideally be moved somewhere not related with music playback. + public static final String PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION = "DisplayTransposition"; + public static final String PROP_CLICK_PITCH_HIGH = "ClickPitchHigh"; public static final String PROP_CLICK_PITCH_LOW = "ClickPitchLow"; public static final String PROP_CLICK_VELOCITY_HIGH = "ClickVelocityHigh"; @@ -108,7 +109,7 @@ static public PrecountMode valueOf(String name, PrecountMode defValue) public static final String PROP_PLAYBACK_CLICK_ENABLED = "PlaybackClickEnabled"; public static final String PROP_AUTO_UPDATE_ENABLED = "AutoUpdateEnabled"; /** - * Fired each time a parameter whic can impact music generation is modified . + * Fired each time a parameter that can impact music generation is modified . *

* OldValue=the property name that triggered the musical change, newValue=optional data */ @@ -161,33 +162,30 @@ public void setLoopCount(int loopCount) } /** - * Get the key transposition applied to all music notation shown in the UI. + * Get the key transposition applied to chord symbols shown in the UI. * * @return [0;-11] Default is 0. */ - public int getDisplayTransposition() // TODO #534 The ints should be positive for showing music, negative for editing + public int getChordSymbolsDisplayTransposition() // TODO #534 The ints should be positive for showing music, negative for editing { - return prefs.getInt(PROP_DISPLAY_TRANSPOSITION, 0); + return prefs.getInt(PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, 0); } /** - * Set the key transposition applied all music notation shown in the UI. + * Set the key transposition applied to chord symbols shown in the UI. *

* Ex: if transposition=-2, chord=B7 will be shown as C#7. * - * @param t [0;-11] + * @param transposition [0;-11] */ - public void setDisplayTransposition(int t) + public void setChordSymbolsDisplayTransposition(int transposition) { - if (t < -11 || t > 0) - { - throw new IllegalArgumentException("t=" + t); - } + Preconditions.checkArgument(transposition >= -11 && transposition <= 0, "transposition=" + transposition); - int old = getDisplayTransposition(); - prefs.putInt(PROP_DISPLAY_TRANSPOSITION, t); - pcs.firePropertyChange(PROP_DISPLAY_TRANSPOSITION, old, t); - fireIsMusicGenerationModified(PROP_DISPLAY_TRANSPOSITION, t); + int old = getChordSymbolsDisplayTransposition(); + prefs.putInt(PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, transposition); + pcs.firePropertyChange(PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, old, transposition); + fireIsMusicGenerationModified(PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, transposition); } /** diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/SongMidiExporter.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/SongMidiExporter.java index 6df62617cf..397f1e916d 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/SongMidiExporter.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/SongMidiExporter.java @@ -83,9 +83,8 @@ static public boolean songToMidiFile(Song song, MidiMix midiMix, File midiFile, return false; } - var sgContext = new SongContext(song, midiMix); - var ssb = new SongSequenceBuilder(sgContext, 0); + var ssb = new SongSequenceBuilder(sgContext); SongSequenceBuilder.SongSequence songSequence = null; diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/BaseSongSession.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/BaseSongSession.java index 64654eef48..452e915e75 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/BaseSongSession.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/BaseSongSession.java @@ -70,7 +70,6 @@ */ public class BaseSongSession implements PropertyChangeListener, PlaybackSession, ControlTrackProvider, SongContextProvider, EndOfPlaybackActionProvider { - public static final int PLAYBACK_SETTINGS_LOOP_COUNT = -1298; private State state = State.NEW; private boolean isDirty; @@ -83,7 +82,6 @@ public class BaseSongSession implements PropertyChangeListener, PlaybackSession, private long loopStartTick = 0; private long loopEndTick = -1; protected int loopCount = PLAYBACK_SETTINGS_LOOP_COUNT; // Need to be accessible from subclass, because of getLoopCount() implementation - private boolean isPlaybackTranspositionEnabled = true; // TODO #534 This does not serialize w/song, get rid of attibute? private boolean isClickTrackIncluded = true; private boolean isPrecountTrackIncluded = true; private boolean isControlTrackIncluded = true; @@ -97,9 +95,7 @@ public class BaseSongSession implements PropertyChangeListener, PlaybackSession, /** * Create a session with the specified parameters. *

- * * @param sgContext - * @param enablePlaybackTransposition * @param enableClickTrack * @param enablePrecountTrack * @param enableControlTrack @@ -107,8 +103,7 @@ public class BaseSongSession implements PropertyChangeListener, PlaybackSession, * @param endOfPlaybackAction * @param useActiveSongBackgroundMusicBuilder If true use ActiveSongBackgroundMusicBuilder when possible to speed up music generation */ - public BaseSongSession(SongContext sgContext, - boolean enablePlaybackTransposition, boolean enableClickTrack, boolean enablePrecountTrack, boolean enableControlTrack, + public BaseSongSession(SongContext sgContext, boolean enableClickTrack, boolean enablePrecountTrack, boolean enableControlTrack, int loopCount, ActionListener endOfPlaybackAction, boolean useActiveSongBackgroundMusicBuilder) { if (sgContext == null) @@ -116,7 +111,6 @@ public BaseSongSession(SongContext sgContext, throw new IllegalArgumentException("sgContext=" + sgContext); } this.songContext = sgContext; - this.isPlaybackTranspositionEnabled = enablePlaybackTransposition; this.isClickTrackIncluded = enableClickTrack; this.isPrecountTrackIncluded = enablePrecountTrack; this.isControlTrackIncluded = enableControlTrack; @@ -131,7 +125,6 @@ public BaseSongSession getFreshCopy(SongContext sgContext) { var newContext = sgContext == null ? getSongContext().clone() : sgContext; BaseSongSession res = new BaseSongSession(newContext, - isPlaybackTranspositionEnabled(), isClickTrackIncluded(), isPrecountTrackIncluded(), isControlTrackIncluded(), @@ -390,11 +383,6 @@ public int getPrecountTrackId() return precountClickTrackId; } - public boolean isPlaybackTranspositionEnabled() // TODO #534 Just used for THE playback transposition? Cleanup if that's the case - { - return isPlaybackTranspositionEnabled; - } - public boolean isClickTrackIncluded() { return isClickTrackIncluded; @@ -501,11 +489,11 @@ public void propertyChange(PropertyChangeEvent e) pcs.firePropertyChange(PROP_LOOP_COUNT, (Integer) e.getOldValue(), (Integer) e.getNewValue()); } } - default -> // E.g. PROP_DISPLAY_TRANSPOSITION + default -> // E.g. PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION { } } - // E.g. PROP_DISPLAY_TRANSPOSITION + // E.g. PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION // Nothing } } @@ -584,9 +572,8 @@ protected int preparePlaybackClickTrack(Sequence sequence, SongContext context) private SongSequenceBuilder.SongSequence generateSongSequence(SongContext sgContext, boolean silent, boolean useBackgroundMusicBuilder) throws MusicGenerationException { SongSequenceBuilder.SongSequence res = null; - - // TODO #534 Check consequences, can I get rid of the constructor that receives transposition? - SongSequenceBuilder seqBuilder = new SongSequenceBuilder(sgContext, 0); // Will work on a deep copy of sgContext + + SongSequenceBuilder seqBuilder = new SongSequenceBuilder(sgContext); // Will work on a deep copy of sgContext // Reuse ActiveSongBackgroundMusicBuilder result when possible var asbmb = ActiveSongBackgroundMusicBuilder.getDefault(); diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/StaticSongSession.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/StaticSongSession.java index 4db18bc619..cdc5204399 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/StaticSongSession.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/StaticSongSession.java @@ -26,11 +26,8 @@ import java.beans.PropertyChangeEvent; import java.util.ArrayList; import java.util.List; -import org.jjazz.midimix.api.MidiMix; -import org.jjazz.musiccontrol.api.PlaybackSettings; import org.jjazz.musiccontrol.api.SongMusicGenerationListener; import org.jjazz.rhythm.api.MusicGenerationException; -import org.jjazz.song.api.Song; import org.jjazz.songcontext.api.SongContext; /** @@ -52,7 +49,6 @@ public class StaticSongSession extends BaseSongSession *

* * @param sgContext - * @param enablePlaybackTransposition If true apply the playback transposition * @param includeClickTrack If true add the click track, and its muted/unmuted state will depend on the PlaybackSettings * @param includePrecountTrack If true add the precount track, and loopStartTick will depend on the PlaybackSettings * @param includeControlTrack if true add a control track (beat positions + chord symbol markers) @@ -60,26 +56,19 @@ public class StaticSongSession extends BaseSongSession * @param endOfPlaybackAction Action executed when playback is stopped. Can be null. * @return A session in the NEW or GENERATED state. */ - static public StaticSongSession getSession(SongContext sgContext, - boolean enablePlaybackTransposition, boolean includeClickTrack, boolean includePrecountTrack, - boolean includeControlTrack, - int loopCount, - ActionListener endOfPlaybackAction) + static public StaticSongSession getSession(SongContext sgContext, boolean includeClickTrack, + boolean includePrecountTrack, boolean includeControlTrack, int loopCount, ActionListener endOfPlaybackAction) { if (sgContext == null) { throw new IllegalArgumentException("sgContext=" + sgContext); } - StaticSongSession session = findSession(sgContext, - enablePlaybackTransposition, includeClickTrack, includePrecountTrack, includeControlTrack, - loopCount, - endOfPlaybackAction); + StaticSongSession session = findSession(sgContext, includeClickTrack, includePrecountTrack, + includeControlTrack, loopCount, endOfPlaybackAction); if (session == null) { - final StaticSongSession newSession = new StaticSongSession(sgContext, - enablePlaybackTransposition, includeClickTrack, includePrecountTrack, includeControlTrack, - loopCount, - endOfPlaybackAction); + final StaticSongSession newSession = new StaticSongSession(sgContext, includeClickTrack, + includePrecountTrack, includeControlTrack, loopCount, endOfPlaybackAction); sessions.add(newSession); return newSession; @@ -98,14 +87,14 @@ static public StaticSongSession getSession(SongContext sgContext, */ static public StaticSongSession getSession(SongContext sgContext) { - return getSession(sgContext, true, true, true, true, PLAYBACK_SETTINGS_LOOP_COUNT, null); + return getSession(sgContext, true, true, true, PLAYBACK_SETTINGS_LOOP_COUNT, null); } - private StaticSongSession(SongContext sgContext, boolean enablePlaybackTransposition, boolean enableClickTrack, + private StaticSongSession(SongContext sgContext, boolean enableClickTrack, boolean enablePrecountTrack, boolean enableControlTrack, int loopCount, ActionListener endOfPlaybackAction) { - super(sgContext, enablePlaybackTransposition, enableClickTrack, enablePrecountTrack, enableControlTrack, loopCount, endOfPlaybackAction, true); + super(sgContext, enableClickTrack, enablePrecountTrack, enableControlTrack, loopCount, endOfPlaybackAction, true); } /** @@ -161,17 +150,14 @@ public void propertyChange(PropertyChangeEvent e) * * @return Null if not found */ - static private StaticSongSession findSession(SongContext sgContext, - boolean includePlaybackTransposition, boolean includeClickTrack, boolean includePrecount, boolean includeControlTrack, - int loopCount, - ActionListener endOfPlaybackAction) + static private StaticSongSession findSession(SongContext sgContext, boolean includeClickTrack, + boolean includePrecount, boolean includeControlTrack, int loopCount, ActionListener endOfPlaybackAction) { for (var session : sessions) { if ((session.getState().equals(PlaybackSession.State.GENERATED) || session.getState().equals(PlaybackSession.State.NEW)) && !session.isDirty() && sgContext.equals(session.getSongContext()) - && includePlaybackTransposition == session.isPlaybackTranspositionEnabled() && includeClickTrack == session.isClickTrackIncluded() && includePrecount == session.isPrecountTrackIncluded() && includeControlTrack == session.isControlTrackIncluded() diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java index 4c77dd98e7..7e083b8b86 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java @@ -63,8 +63,7 @@ * - chord symbol changes (add/remove/change/moveAll)
* - rhythm parameter value changes
* - existing user phrase content changes (but not for add/remove user phrase events)
- * - PlaybackSettings playback transposition changes
- * - MidiMix instrument transposition/velocity changes, plus drum keymap and drum rerouting changes
+ * - MidiMix instrument velocity changes, plus drum keymap and drum rerouting changes
*

* If change can't be handled as an update (eg a song part tempo factor change or a click setting), session is marked dirty (ie needs regeneration). If session * is dirty, editors can still show the playback point using the control track but the "dirty" changes are not heard. @@ -105,7 +104,6 @@ public class UpdateProviderSongSession extends BaseSongSession implements Updata *

* * @param sgContext - * @param enablePlaybackTransposition If true apply the playback transposition * @param includeClickTrack If true add the click track, and its muted/unmuted state will depend on the PlaybackSettings * @param includePrecountTrack If true add the precount track, and loopStartTick will depend on the PlaybackSettings * @param includeControlTrack if true add a control track (beat positions + chord symbol markers) @@ -115,27 +113,19 @@ public class UpdateProviderSongSession extends BaseSongSession implements Updata * @return A session in the NEW or GENERATED state. */ static public UpdateProviderSongSession getSession(SongContext sgContext, - boolean enablePlaybackTransposition, boolean includeClickTrack, boolean includePrecountTrack, boolean includeControlTrack, - boolean enableUpdateControl, - int loopCount, - ActionListener endOfPlaybackAction) + boolean includeClickTrack, boolean includePrecountTrack, boolean includeControlTrack, + boolean enableUpdateControl, int loopCount, ActionListener endOfPlaybackAction) { if (sgContext == null) { throw new IllegalArgumentException("sgContext=" + sgContext); } - UpdateProviderSongSession session = findSession(sgContext, - enablePlaybackTransposition, includeClickTrack, includePrecountTrack, includeControlTrack, - enableUpdateControl, - loopCount, - endOfPlaybackAction); + UpdateProviderSongSession session = findSession(sgContext, includeClickTrack, + includePrecountTrack, includeControlTrack, enableUpdateControl, loopCount, endOfPlaybackAction); if (session == null) { - final UpdateProviderSongSession newSession = new UpdateProviderSongSession(sgContext, - enablePlaybackTransposition, includeClickTrack, includePrecountTrack, includeControlTrack, - enableUpdateControl, - loopCount, - endOfPlaybackAction); + final UpdateProviderSongSession newSession = new UpdateProviderSongSession(sgContext, includeClickTrack, + includePrecountTrack, includeControlTrack, enableUpdateControl, loopCount, endOfPlaybackAction); sessions.add(newSession); LOGGER.fine("getSession() create new session"); @@ -156,20 +146,14 @@ static public UpdateProviderSongSession getSession(SongContext sgContext, */ static public UpdateProviderSongSession getSession(SongContext sgContext) { - return getSession(sgContext, true, true, true, true, true, PLAYBACK_SETTINGS_LOOP_COUNT, null); + return getSession(sgContext, true, true, true, true, PLAYBACK_SETTINGS_LOOP_COUNT, null); } - private UpdateProviderSongSession(SongContext sgContext, - boolean enablePlaybackTransposition, - boolean includeClickTrack, boolean includePrecountTrack, boolean includeControlTrack, - boolean enableUpdateControl, - int loopCount, ActionListener endOfPlaybackAction) + private UpdateProviderSongSession(SongContext sgContext, boolean includeClickTrack, boolean includePrecountTrack, + boolean includeControlTrack, boolean enableUpdateControl, int loopCount, ActionListener endOfPlaybackAction) { - super(sgContext, - enablePlaybackTransposition, - includeClickTrack, includePrecountTrack, includeControlTrack, - loopCount, endOfPlaybackAction, true); + super(sgContext, includeClickTrack, includePrecountTrack, includeControlTrack, loopCount, endOfPlaybackAction, true); isUpdateControlEnabled = enableUpdateControl; userErrorExceptionHandler = e -> StatusDisplayer.getDefault().setStatusText(e.getLocalizedMessage()); @@ -180,7 +164,6 @@ public UpdateProviderSongSession getFreshCopy(SongContext sgContext) { var newContext = sgContext == null ? getSongContext().clone() : sgContext; UpdateProviderSongSession newSession = new UpdateProviderSongSession(newContext, - isPlaybackTranspositionEnabled(), isClickTrackIncluded(), isPrecountTrackIncluded(), isControlTrackIncluded(), @@ -422,7 +405,7 @@ public void propertyChange(PropertyChangeEvent e) { doUpdate = true; } - case PlaybackSettings.PROP_DISPLAY_TRANSPOSITION -> + case PlaybackSettings.PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION -> { // TODO #534 This should probably not be sent here in the first place, stop it up the chain. // NO-OP @@ -666,7 +649,7 @@ private void musicGenerationResultReceived(Result result) * @return Null if not found */ static private UpdateProviderSongSession findSession(SongContext sgContext, - boolean enablePlaybackTransposition, boolean includeClickTrack, boolean includePrecount, boolean includeControlTrack, + boolean includeClickTrack, boolean includePrecount, boolean includeControlTrack, boolean enableUpdateControl, int loopCount, ActionListener endOfPlaybackAction) @@ -676,7 +659,6 @@ static private UpdateProviderSongSession findSession(SongContext sgContext, if ((session.getState().equals(PlaybackSession.State.GENERATED) || session.getState().equals(PlaybackSession.State.NEW)) && !session.isDirty() && sgContext.equals(session.getSongContext()) - && enablePlaybackTransposition == session.isPlaybackTranspositionEnabled() && includeClickTrack == session.isClickTrackIncluded() && includePrecount == session.isPrecountTrackIncluded() && includeControlTrack == session.isControlTrackIncluded() @@ -715,5 +697,4 @@ static private String toDebugString(ChordLeadSheet cls) } return sb.toString(); } - } diff --git a/core/RhythmMusicGeneration/src/main/java/org/jjazz/rhythmmusicgeneration/api/SongSequenceBuilder.java b/core/RhythmMusicGeneration/src/main/java/org/jjazz/rhythmmusicgeneration/api/SongSequenceBuilder.java index 033bfdccb3..4840734bed 100644 --- a/core/RhythmMusicGeneration/src/main/java/org/jjazz/rhythmmusicgeneration/api/SongSequenceBuilder.java +++ b/core/RhythmMusicGeneration/src/main/java/org/jjazz/rhythmmusicgeneration/api/SongSequenceBuilder.java @@ -93,7 +93,6 @@ * Methods to convert a Song into Phrases and Midi sequence. *

*/ - public class SongSequenceBuilder { /** @@ -110,7 +109,6 @@ public class SongSequenceBuilder */ static public class SongSequence { - public Sequence sequence; public Map mapRvTrackId; public Map mapRvPhrase; @@ -131,16 +129,12 @@ static public class SongSequence * Note that sgContext is not modified, the instance works on a deep copy of sgContext. * * @param sgContext - * @param playbackKeyTranspose Optional chord symbols transposition (use 0 for no transposition) */ - public SongSequenceBuilder(SongContext sgContext, int playbackKeyTranspose) - // TODO #534 Probably get rid of the transpose param here, not sure if it will be used at all - // >>>>> public SongSequenceBuilder(SongContext sgContext) <<<<< + public SongSequenceBuilder(SongContext sgContext) { Objects.requireNonNull(sgContext); this.songContextOriginal = sgContext; this.songContextWork = songContextOriginal.deepClone(false, false); - ClsUtilities.transpose(songContextWork.getSong().getChordLeadSheet(), playbackKeyTranspose); } @@ -1129,7 +1123,6 @@ private void processInstrumentsSettings(SongContext context, Map pitch + insSet.getTransposition()); From c1e56cccf5715ece4a914a35a5ff21b9649cdac3 Mon Sep 17 00:00:00 2001 From: Juan Ottonello Date: Mon, 6 Oct 2025 17:09:30 +1300 Subject: [PATCH 3/7] Fix preference management to make transposition positive for #534 --- .../TransposeDisplayDialog.java | 8 ++++---- .../musiccontrol/api/PlaybackSettings.java | 18 +++++++----------- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java index 5cc719ddca..24b4978fa1 100644 --- a/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java +++ b/app/MusicControlActions/src/main/java/org/jjazz/musiccontrolactions/TransposeDisplayDialog.java @@ -63,17 +63,17 @@ private TransposeDisplayDialog(java.awt.Frame parent, boolean modal) } /** - * @param transposeBy [-11;0] + * @param transposeBy int in range [0, 12) */ public void preset(int transposeBy) { - Preconditions.checkArgument(transposeBy >= -11 && transposeBy <= 0, "transposition=" + transposeBy); + Preconditions.checkArgument(transposeBy >= 0 && transposeBy < 12, "transposition=" + transposeBy); cb_enableTransposition.setSelected(transposeBy != 0); cmb_transposition.setEnabled(transposeBy != 0); if (transposeBy != 0) { - cmb_transposition.setSelectedIndex(-transposeBy - 1); + cmb_transposition.setSelectedIndex(transposeBy - 1); } pack(); cb_enableTransposition.requestFocusInWindow(); // After pack @@ -93,7 +93,7 @@ public boolean isExitOk() */ public int getDisplayTransposition() { - return !cb_enableTransposition.isSelected() ? 0 : -cmb_transposition.getSelectedIndex() - 1; + return !cb_enableTransposition.isSelected() ? 0 : cmb_transposition.getSelectedIndex() + 1; } // ==================================================================================================== diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java index e786d412e6..3fd01789a7 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/PlaybackSettings.java @@ -95,10 +95,7 @@ static public PrecountMode valueOf(String name, PrecountMode defValue) */ public static final String PROP_VETO_PRE_PLAYBACK = "PropVetoPrePlayback"; public static final String PROP_LOOPCOUNT = "PropLoopCount"; - - // TODO #534 This should ideally be moved somewhere not related with music playback. public static final String PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION = "DisplayTransposition"; - public static final String PROP_CLICK_PITCH_HIGH = "ClickPitchHigh"; public static final String PROP_CLICK_PITCH_LOW = "ClickPitchLow"; public static final String PROP_CLICK_VELOCITY_HIGH = "ClickVelocityHigh"; @@ -164,28 +161,27 @@ public void setLoopCount(int loopCount) /** * Get the key transposition applied to chord symbols shown in the UI. * - * @return [0;-11] Default is 0. + * @return [0, 12) Default is 0. */ - public int getChordSymbolsDisplayTransposition() // TODO #534 The ints should be positive for showing music, negative for editing + public int getChordSymbolsDisplayTransposition() { - return prefs.getInt(PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, 0); + return - prefs.getInt(PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, 0); // Saved as negative range for backwards compatibility } /** * Set the key transposition applied to chord symbols shown in the UI. *

- * Ex: if transposition=-2, chord=B7 will be shown as C#7. + * Ex: if transposition=2, chord=B7 will be shown as C#7. * - * @param transposition [0;-11] + * @param transposition int in range [0, 12) */ public void setChordSymbolsDisplayTransposition(int transposition) { - Preconditions.checkArgument(transposition >= -11 && transposition <= 0, "transposition=" + transposition); + Preconditions.checkArgument(transposition >= 0 && transposition < 12, "transposition=" + transposition); int old = getChordSymbolsDisplayTransposition(); - prefs.putInt(PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, transposition); + prefs.putInt(PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, - transposition); // Save as negative range for backwards compatibility pcs.firePropertyChange(PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, old, transposition); - fireIsMusicGenerationModified(PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, transposition); } /** From ea2edf09c46b06bb06881225982d6557e7e42b45 Mon Sep 17 00:00:00 2001 From: Juan Ottonello Date: Mon, 6 Oct 2025 17:50:50 +1300 Subject: [PATCH 4/7] Fix translations corrupted as part of #534 --- .../musiccontrolactions/Bundle.properties | 6 +- .../Bundle_de_DE.properties | 38 +++--- .../Bundle_es_ES.properties | 72 ++++++------ .../Bundle_fr_FR.properties | 64 +++++----- .../Bundle_id_ID.properties | 6 +- .../Bundle_it_IT.properties | 22 ++-- .../Bundle_ja_JP.properties | 26 ++--- .../Bundle_ko_KR.properties | 14 +-- .../Bundle_no_NO.properties | 6 +- .../Bundle_pt_BR.properties | 74 ++++++------ .../Bundle_ru_RU.properties | 12 +- .../Bundle_uk_UA.properties | 108 ++++++++--------- .../Bundle_zh_CN.properties | 110 +++++++++--------- 13 files changed, 277 insertions(+), 281 deletions(-) diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties index a6fb8b51be..0e934acd76 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle.properties @@ -50,11 +50,7 @@ FixMidiMixDialog.lbl_firstLine.text=Potential Midi configuration problems detect FixMidiMixDialog.lbl_fixInstrumentTitle.text=The following instruments should be replaced to fit the current output synth configuration: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=The following drums channels should be rerouted to channel 10: MIDI_CONFIGURATION_PROBLEMS=Midi Configuration Problems -CheckLowQualitySynthDialog.btn_ok.text=OK -CheckLowQualitySynthDialog.cb_doNotShowAgain.text=Do not show this notification again -CheckLowQualitySynthDialog.title=Warning -CheckLowQualitySynthDialog.LowQualitySynthText=Low quality synth detected: {0}\n\nJJazzLab will not sound good.\n\nIf you can, use the embedded FluidSynth (see Midi panel from Options/Preferences menu). TransposeDisplayDialog.btn_Cancel.text=Cancel TransposeDisplayDialog.btn_Ok.text=OK TransposeDisplayDialog.helpTextArea1.text=Transpose the chord symbols only for display (no impact on generated music). -TransposeDisplayDialog.cb_enableTransposition.text=Enable display transposition +TransposeDisplayDialog.cb_enableTransposition.text=Enable display transposition \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_de_DE.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_de_DE.properties index 820f169a4c..22529b2e99 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_de_DE.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_de_DE.properties @@ -1,9 +1,9 @@ -AutoUpdateOFFtooltip=Auto Update ist OFF\: Die Song-Struktur wurde ge\u00c3\u00a4ndert. Die abgespielte Musik wird nicht mehr in Echtzeit aktualisiert. Musikwiedergabe stoppen, um den Auto-Update-Modus wieder zu aktivieren. -AutoUpdateONtooltip=Auto-Update ist eingeschaltet\: Abgespielte Musik wird bei \u00c3\u0084nderungen in Echtzeit aktualisiert (au\u00c3\u009fer bei strukturellen \u00c3\u0084nderungen) +AutoUpdateOFFtooltip=Auto Update ist OFF\: Die Song-Struktur wurde geändert. Die abgespielte Musik wird nicht mehr in Echtzeit aktualisiert. Musikwiedergabe stoppen, um den Auto-Update-Modus wieder zu aktivieren. +AutoUpdateONtooltip=Auto-Update ist eingeschaltet\: Abgespielte Musik wird bei Änderungen in Echtzeit aktualisiert (außer bei strukturellen Änderungen) CTL_Click=Klicken -CTL_ClickTooltip=W\u00c3\u00a4hrend der Wiedergabe klicken +CTL_ClickTooltip=Während der Wiedergabe klicken CTL_ControlToolbarAction=Musiksteuerungs Symbolleiste -CTL_CurrentPlaybackTransposition=Aktuelle Wiedergabeschl\u00c3\u00bcssel-Transmposition\: {0} +CTL_CurrentDisplayTransposition=Aktuelle Wiedergabeschlüssel-Transmposition\: {0} CTL_DecreaseTempo=Tempo reduzieren CTL_IncreaseTempo=Tempo beschleunigen CTL_Loop=Loop @@ -14,43 +14,43 @@ CTL_Play=Abspielen CTL_PlayFromHere=Ab hier abspielen CTL_PlaySelection=Auswahl abspielen CTL_PlayToolTip=Wiedergabe /anhalten (Leertaste) -CTL_PlaybackToNextSongPart=N\u00c3\u00a4chster Songteil -CTL_PlaybackToNextSongPartTooltip=N\u00c3\u00a4chsten Songteil abspielen (F2) +CTL_PlaybackToNextSongPart=Nächster Songteil +CTL_PlaybackToNextSongPartTooltip=Nächsten Songteil abspielen (F2) CTL_PlaybackToPreviousSongPart=Vorheriger Songteil CTL_PlaybackToPreviousSongPartTooltip=Vorherigen Teil abspielen (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=Vorausz\u00c3\u00a4hler -CTL_Precount1Bar=1 Takt einz\u00c3\u00a4hlen - Mit Shift-Click kann der Einz\u00c3\u00a4hlmodus ge\u00c3\u00a4ndert werden -CTL_Precount2Bar=2 Takte einz\u00c3\u00a4hlen - mit Shift-Click kann der Einz\u00c3\u00a4hlmodus ge\u00c3\u00a4ndert werden -CTL_PrecountBarAuto=Automatischer Einz\u00c3\u00a4hler - mit Shift-Click kann der Einz\u00c3\u00a4hlmodus ge\u00c3\u00a4ndert werden +CTL_Precount=Vorauszähler +CTL_Precount1Bar=1 Takt einzählen - Mit Shift-Click kann der Einzählmodus geändert werden +CTL_Precount2Bar=2 Takte einzählen - mit Shift-Click kann der Einzählmodus geändert werden +CTL_PrecountBarAuto=Automatischer Einzähler - mit Shift-Click kann der Einzählmodus geändert werden CTL_SetActive=Aktiv umschalten (ON/OFF) CTL_SetActivePopupAction=Aktiv umschalten (ON/OFF) -CTL_SetActiveToolTip=Legen Sie den einzigen aktiven Song fest, f\u00c3\u00bcr den Midi Nachrichten aktiviert sind [O] +CTL_SetActiveToolTip=Legen Sie den einzigen aktiven Song fest, für den Midi Nachrichten aktiviert sind [O] CTL_ShowPlaybackPoint=Wiedergabepunkt anzeigen CTL_ShowPlaybackTooltip=Den abgespielten Takt hervorheben CTL_Stop=Beenden CTL_StopTooltip=Wiedergabe anhalten -CTL_TransposePlaybackKey=Wiedergabeschl\u00c3\u00bcssel transponieren +CTL_TransposeDisplay=Wiedergabeschlüssel transponieren ControlToolbarPanel.fbtn_Active.toolTipText=Wenn ON ist Lied aktiv und Midi-Nachrichten sind aktiviert. Nur ein Lied kann gleichzeitig aktiv sein. ControlToolbarPanel.fbtn_Click.toolTipText=Klicken ControlToolbarPanel.fbtn_Pause.toolTipText=Abspielen anhalten ControlToolbarPanel.fbtn_Precount.toolTipText=precount vor Wiedergabe ControlToolbarPanel.posViewer.toolTipText=Aktuelle Position (bar\:beat) ControlToolbarPanel.spn_Tempo.toolTipText=Wiedergabetempo. Verwenden Sie J oder - um das Tempo zu, reduzieren K oder + um es zu beschleunigen. -ERR_BadSelection=Erste und zuletzt ausgew\u00c3\u00a4hlte Takte stimmen nicht korrekt mit Songparts \u00c3\u00bcberein. -ERR_CantPlayFromHere=Kann von hier nicht abspielen. W\u00c3\u00a4hlen Sie zuerst einen g\u00c3\u00bcltigen Takt im Akkordblatt oder einen Songpart im Songstruktur Editor. +ERR_BadSelection=Erste und zuletzt ausgewählte Takte stimmen nicht korrekt mit Songparts überein. +ERR_CantPlayFromHere=Kann von hier nicht abspielen. Wählen Sie zuerst einen gültigen Takt im Akkordblatt oder einen Songpart im Songstruktur Editor. ERR_InvalidPlayableSelection=Kann diese Auswahl nicht abspielen\: {0} -ERR_NeedContiguousSelection=Ausgew\u00c3\u00a4hlte Takte/Songteile m\u00c3\u00bcssen nacheinander liegen. +ERR_NeedContiguousSelection=Ausgewählte Takte/Songteile müssen nacheinander liegen. ERR_NotActive=Kann von hier nicht abspielen\: Song ist nicht aktiv FixMidiMixDialog.btn_Cancel.text=Abbrechen FixMidiMixDialog.btn_fix.text=Beheben FixMidiMixDialog.btn_skip.text=Ignorieren -FixMidiMixDialog.cb_rememberMyChoice.text=Meine Wahl w\u00c3\u00a4hrend dieser Session merken +FixMidiMixDialog.cb_rememberMyChoice.text=Meine Wahl während dieser Session merken FixMidiMixDialog.lbl_firstLine.text=Potenzielle Midi Konfigurationsprobleme erkannt. OK um diese zu beheben? FixMidiMixDialog.lbl_fixInstrumentTitle.text=Folgenden Instrumente sollten ersetzt werden, um der aktuellen Ausgabesynth-Konfiguration zu entsprechen\: -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Folgende Drum-kan\u00c3\u00a4le sollten auf Kanal 10 umgeleitet werden\: +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Folgende Drum-kanäle sollten auf Kanal 10 umgeleitet werden\: MIDI_CONFIGURATION_PROBLEMS=Midi Konfigurationsprobleme TransposeDisplayDialog.btn_Cancel.text=Abbrechen TransposeDisplayDialog.btn_Ok.text=OK -TransposeDisplayDialog.helpTextArea1.text=\u00c3\u0084ndern Sie die die Tonleiter (Akkordsymbole transponieren), wenn Sie einen Song abspielen. -TransposeDisplayDialog.cb_enableTransposition.text=Tonart-Trasposition w\u00c3\u00a4hrend der Wiedergabe erlauben +TransposeDisplayDialog.cb_enableTransposition.text=Tonart-Trasposition während der Wiedergabe erlauben +TransposeDisplayDialog.helpTextArea1.text=Ändern Sie die die Tonleiter (Akkordsymbole transponieren), wenn Sie einen Song abspielen. \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_es_ES.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_es_ES.properties index 9d824e6476..3579f39cd6 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_es_ES.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_es_ES.properties @@ -1,56 +1,56 @@ -AutoUpdateOFFtooltip=Actualizaci\u00c3\u00b3n autom\u00c3\u00a1tica est\u00c3\u00a1 APAGADA\: ha ocurrido un cambio estructural de canci\u00c3\u00b3n, reproducir m\u00c3\u00basica no se actualiza m\u00c3\u00a1s en tiempo real. Detener la reproducci\u00c3\u00b3n de m\u00c3\u00basica para reactivar el modo de actualizaci\u00c3\u00b3n autom\u00c3\u00a1tica. -AutoUpdateONtooltip=Actualizaci\u00c3\u00b3n autom\u00c3\u00a1tica activada\: la reproducci\u00c3\u00b3n de m\u00c3\u00basica se actualiza en tiempo real con cambios de canci\u00c3\u00b3n (excepto los cambios estructurales) +AutoUpdateOFFtooltip=Actualización automática está APAGADA\: ha ocurrido un cambio estructural de canción, reproducir música no se actualiza más en tiempo real. Detener la reproducción de música para reactivar el modo de actualización automática. +AutoUpdateONtooltip=Actualización automática activada\: la reproducción de música se actualiza en tiempo real con cambios de canción (excepto los cambios estructurales) CTL_Click=Click -CTL_ClickTooltip=Click del metr\u00c3\u00b3nomo durante la reproducci\u00c3\u00b3n -CTL_ControlToolbarAction=Barra de herramientas para controlar m\u00c3\u00basica -CTL_CurrentPlaybackTransposition=Tonalidad de la reproducci\u00c3\u00b3n actual\: {0} +CTL_ClickTooltip=Click del metrónomo durante la reproducción +CTL_ControlToolbarAction=Barra de herramientas para controlar música +CTL_CurrentDisplayTransposition=Tonalidad de la reproducción actual\: {0} CTL_DecreaseTempo=Disminuir Tempo CTL_IncreaseTempo=Aumentar tempo CTL_Loop=En bucle -CTL_LoopTooltip=Reproducci\u00c3\u00b3n en bucle (L) +CTL_LoopTooltip=Reproducción en bucle (L) CTL_Pause=Pausa CTL_PauseTooltip=Pause playback CTL_Play=Reproducir -CTL_PlayFromHere=Reproducir a partir de aqu\u00c3\u00ad -CTL_PlaySelection=Reproducir selecci\u00c3\u00b3n +CTL_PlayFromHere=Reproducir a partir de aquí +CTL_PlaySelection=Reproducir selección CTL_PlayToolTip=Start/Pause playback (space key) -CTL_PlaybackToNextSongPart=Pr\u00c3\u00b3xima parte de la canci\u00c3\u00b3n -CTL_PlaybackToNextSongPartTooltip=Reproducir la siguiente parte de la canci\u00c3\u00b3n (F2) -CTL_PlaybackToPreviousSongPart=Parte anterior de la canci\u00c3\u00b3n -CTL_PlaybackToPreviousSongPartTooltip=Reproducir la parte precedente de la canci\u00c3\u00b3n (F2) +CTL_PlaybackToNextSongPart=Próxima parte de la canción +CTL_PlaybackToNextSongPartTooltip=Reproducir la siguiente parte de la canción (F2) +CTL_PlaybackToPreviousSongPart=Parte anterior de la canción +CTL_PlaybackToPreviousSongPartTooltip=Reproducir la parte precedente de la canción (F2) CTL_RestartPlayback=Restart playback (F3) CTL_Precount=Preconteo -CTL_Precount1Bar=Preconteo de 1 comp\u00c3\u00a1s - Use May\u00c3\u00bascula-clic para cambiar el modo de preconteo -CTL_Precount2Bar=Preconteo de 2 compases - Use May\u00c3\u00bascula-clic para cambiar el modo de preconteo -CTL_PrecountBarAuto=Preconteo Autom\u00c3\u00a1tico - Usa May\u00c3\u00basculas-clic para cambiar el modo de preconteo +CTL_Precount1Bar=Preconteo de 1 compás - Use Mayúscula-clic para cambiar el modo de preconteo +CTL_Precount2Bar=Preconteo de 2 compases - Use Mayúscula-clic para cambiar el modo de preconteo +CTL_PrecountBarAuto=Preconteo Automático - Usa Mayúsculas-clic para cambiar el modo de preconteo CTL_SetActive=Activar (ON/OFF) CTL_SetActivePopupAction=Activar (ON/OFF) -CTL_SetActiveToolTip=Establecer la \u00c3\u00banica canci\u00c3\u00b3n activa para la cual los mensajes Midi estar\u00c3\u00a1n habilitados [O] -CTL_ShowPlaybackPoint=Mostrar punto de reproducci\u00c3\u00b3n -CTL_ShowPlaybackTooltip=Resaltar el comp\u00c3\u00a1s en reproducci\u00c3\u00b3n +CTL_SetActiveToolTip=Establecer la única canción activa para la cual los mensajes Midi estarán habilitados [O] +CTL_ShowPlaybackPoint=Mostrar punto de reproducción +CTL_ShowPlaybackTooltip=Resaltar el compás en reproducción CTL_Stop=Parar CTL_StopTooltip=Stop playback -CTL_TransposePlaybackKey=Transponer tono de reproducci\u00c3\u00b3n -ControlToolbarPanel.fbtn_Active.toolTipText=Si est\u00c3\u00a1 activado, la canci\u00c3\u00b3n estar\u00c3\u00a1 activa y los mensajes Midi estar\u00c3\u00a1n habilitados. Solo una canci\u00c3\u00b3n puede estar activa a la vez. +CTL_TransposeDisplay=Transponer tono de reproducción +ControlToolbarPanel.fbtn_Active.toolTipText=Si está activado, la canción estará activa y los mensajes Midi estarán habilitados. Solo una canción puede estar activa a la vez. ControlToolbarPanel.fbtn_Click.toolTipText=Click -ControlToolbarPanel.fbtn_Pause.toolTipText=Pausa la reproducci\u00c3\u00b3n -ControlToolbarPanel.fbtn_Precount.toolTipText=preconteo antes de iniciar la reproducci\u00c3\u00b3n -ControlToolbarPanel.posViewer.toolTipText=Posici\u00c3\u00b3n actual (comp\u00c3\u00a1s\:tempo) -ControlToolbarPanel.spn_Tempo.toolTipText=Tempo de reproducci\u00c3\u00b3n. Use "J" o "-" para disminuirlo, "K" o "+" para aumentarlo. -ERR_BadSelection=Los primeros y \u00c3\u00baltimos compases seleccionados no coinciden correctamente con las partes de las canciones. -ERR_CantPlayFromHere=No se puede reproducir desde aqu\u00c3\u00ad. Seleccione primero en comp\u00c3\u00a1s v\u00c3\u00a1lido en la hoja de acordes o una parte de la canci\u00c3\u00b3n en el editor de estructuras. -ERR_InvalidPlayableSelection=No se puede reproducir esta selecci\u00c3\u00b3n\: {0} -ERR_NeedContiguousSelection=Los compases o partes de canci\u00c3\u00b3n seleccionados deben ser contiguos. -ERR_NotActive=No se puede reproducir desde aqu\u00c3\u00ad\: la canci\u00c3\u00b3n no est\u00c3\u00a1 activa +ControlToolbarPanel.fbtn_Pause.toolTipText=Pausa la reproducción +ControlToolbarPanel.fbtn_Precount.toolTipText=preconteo antes de iniciar la reproducción +ControlToolbarPanel.posViewer.toolTipText=Posición actual (compás\:tempo) +ControlToolbarPanel.spn_Tempo.toolTipText=Tempo de reproducción. Use "J" o "-" para disminuirlo, "K" o "+" para aumentarlo. +ERR_BadSelection=Los primeros y últimos compases seleccionados no coinciden correctamente con las partes de las canciones. +ERR_CantPlayFromHere=No se puede reproducir desde aquí. Seleccione primero en compás válido en la hoja de acordes o una parte de la canción en el editor de estructuras. +ERR_InvalidPlayableSelection=No se puede reproducir esta selección\: {0} +ERR_NeedContiguousSelection=Los compases o partes de canción seleccionados deben ser contiguos. +ERR_NotActive=No se puede reproducir desde aquí\: la canción no está activa FixMidiMixDialog.btn_Cancel.text=Cancelar FixMidiMixDialog.btn_fix.text=Corregir FixMidiMixDialog.btn_skip.text=Ignorar -FixMidiMixDialog.cb_rememberMyChoice.text=Recordar mi elecci\u00c3\u00b3n durante esta sesi\u00c3\u00b3n -FixMidiMixDialog.lbl_firstLine.text=Se han detectado posibles problemas de configuraci\u00c3\u00b3n Midi. \u00c2\u00bfDesea corregirlos autom\u00c3\u00a1ticamente? -FixMidiMixDialog.lbl_fixInstrumentTitle.text=Los siguientes instrumentos deben ser reemplazados para ajustarse a la configuraci\u00c3\u00b3n actual del sintetizador de salida\: -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Los siguientes canales de percusi\u00c3\u00b3n deben ser redireccionados al canal 10\: -MIDI_CONFIGURATION_PROBLEMS=Hay problemas en la configuraci\u00c3\u00b3n Midi +FixMidiMixDialog.cb_rememberMyChoice.text=Recordar mi elección durante esta sesión +FixMidiMixDialog.lbl_firstLine.text=Se han detectado posibles problemas de configuración Midi. ¿Desea corregirlos automáticamente? +FixMidiMixDialog.lbl_fixInstrumentTitle.text=Los siguientes instrumentos deben ser reemplazados para ajustarse a la configuración actual del sintetizador de salida\: +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Los siguientes canales de percusión deben ser redireccionados al canal 10\: +MIDI_CONFIGURATION_PROBLEMS=Hay problemas en la configuración Midi TransposeDisplayDialog.btn_Cancel.text=Cancelar TransposeDisplayDialog.btn_Ok.text=OK -TransposeDisplayDialog.helpTextArea1.text=Cambia el tono (transponer acordes) al reproducir una canci\u00c3\u00b3n. -TransposeDisplayDialog.cb_enableTransposition.text=Activar transposici\u00c3\u00b3n de tonos durante la reproducci\u00c3\u00b3n +TransposeDisplayDialog.cb_enableTransposition.text=Activar transposición de tonos durante la reproducción +TransposeDisplayDialog.helpTextArea1.text=Cambia el tono (transponer acordes) al reproducir una canción. \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_fr_FR.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_fr_FR.properties index 32dc8abf45..d4f3c4f80b 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_fr_FR.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_fr_FR.properties @@ -1,9 +1,9 @@ -AutoUpdateOFFtooltip=La mise \u00c3\u00a0 jour automatique est d\u00c3\u00a9sactiv\u00c3\u00a9e \: une modification de la structure du morceau est survenue, la lecture de la musique n'est plus mise \u00c3\u00a0 jour en temps r\u00c3\u00a9el. Arr\u00c3\u00aatez la lecture de la musique pour r\u00c3\u00a9activer le mode de mise \u00c3\u00a0 jour automatique. -AutoUpdateONtooltip=La mise \u00c3\u00a0 jour automatique est activ\u00c3\u00a9e \: la lecture de la musique est mise \u00c3\u00a0 jour en temps r\u00c3\u00a9el avec les modifications du morceau (sauf pour les modifications structurelles) +AutoUpdateOFFtooltip=La mise à jour automatique est désactivée \: une modification de la structure du morceau est survenue, la lecture de la musique n'est plus mise à jour en temps réel. Arrêtez la lecture de la musique pour réactiver le mode de mise à jour automatique. +AutoUpdateONtooltip=La mise à jour automatique est activée \: la lecture de la musique est mise à jour en temps réel avec les modifications du morceau (sauf pour les modifications structurelles) CTL_Click=Click CTL_ClickTooltip=Click pendant la lecture -CTL_ControlToolbarAction=Barre d'outils contr\u00c3\u00b4le de lecture -CTL_CurrentPlaybackTransposition=Tonalit\u00c3\u00a9 de lecture actuelle\: {0} +CTL_ControlToolbarAction=Barre d'outils contrôle de lecture +CTL_CurrentDisplayTransposition=Tonalité de lecture actuelle\: {0} CTL_DecreaseTempo=Diminuer le tempo CTL_IncreaseTempo=Augmenter le tempo CTL_Loop=Lire en boucle @@ -12,45 +12,45 @@ CTL_Pause=Pause CTL_PauseTooltip=Suspendre la lecture (touche espace) CTL_Play=Lecture CTL_PlayFromHere=Lecture depuis ici -CTL_PlaySelection=Lecture de la s\u00c3\u00a9lection -CTL_PlayToolTip=D\u00c3\u00a9marrer/Suspendre la lecture (touche espace) -CTL_PlaybackToNextSongPart=\u00c3\u0089l\u00c3\u00a9ment de structure suivant -CTL_PlaybackToNextSongPartTooltip=Jouer l'\u00c3\u00a9l\u00c3\u00a9ment de structure suivant (F2) -CTL_PlaybackToPreviousSongPart=\u00c3\u0089l\u00c3\u00a9ment de structure pr\u00c3\u00a9c\u00c3\u00a9dent -CTL_PlaybackToPreviousSongPartTooltip=Jouer l'\u00c3\u00a9l\u00c3\u00a9ment de structure pr\u00c3\u00a9c\u00c3\u00a9dent (F1) -CTL_RestartPlayback=Red\u00c3\u00a9marrer depuis le d\u00c3\u00a9but (F3) -CTL_Precount=D\u00c3\u00a9compte -CTL_Precount1Bar=D\u00c3\u00a9compte 1 mesure - Utiliser shift-click pour change le mode de d\u00c3\u00a9compte -CTL_Precount2Bar=D\u00c3\u00a9compte 2 mesures - Utiliser shift-click pour change le mode de d\u00c3\u00a9compte -CTL_PrecountBarAuto=D\u00c3\u00a9compte auto - Utiliser shift-click pour change le mode de d\u00c3\u00a9compte -CTL_SetActive=Activer/D\u00c3\u00a9sactiver (ON/OFF) -CTL_SetActivePopupAction=Activer/D\u00c3\u00a9sactiver (ON/OFF) -CTL_SetActiveToolTip=D\u00c3\u00a9finir le projet actif pour lequel les messages Midi sont envoy\u00c3\u00a9s [O] +CTL_PlaySelection=Lecture de la sélection +CTL_PlayToolTip=Démarrer/Suspendre la lecture (touche espace) +CTL_PlaybackToNextSongPart=Élément de structure suivant +CTL_PlaybackToNextSongPartTooltip=Jouer l'élément de structure suivant (F2) +CTL_PlaybackToPreviousSongPart=Élément de structure précédent +CTL_PlaybackToPreviousSongPartTooltip=Jouer l'élément de structure précédent (F1) +CTL_RestartPlayback=Redémarrer depuis le début (F3) +CTL_Precount=Décompte +CTL_Precount1Bar=Décompte 1 mesure - Utiliser shift-click pour change le mode de décompte +CTL_Precount2Bar=Décompte 2 mesures - Utiliser shift-click pour change le mode de décompte +CTL_PrecountBarAuto=Décompte auto - Utiliser shift-click pour change le mode de décompte +CTL_SetActive=Activer/Désactiver (ON/OFF) +CTL_SetActivePopupAction=Activer/Désactiver (ON/OFF) +CTL_SetActiveToolTip=Définir le projet actif pour lequel les messages Midi sont envoyés [O] CTL_ShowPlaybackPoint=Afficher la mesure en cours de lecture CTL_ShowPlaybackTooltip=Rendre visible la mesure en cours de lecture CTL_Stop=Stop -CTL_StopTooltip=Arr\u00c3\u00aater la lecture (touche shift-espace) -CTL_TransposePlaybackKey=Changer la tonalit\u00c3\u00a9 de lecture -ControlToolbarPanel.fbtn_Active.toolTipText=Si "ON", le projet est actif et les messages Midi sont activ\u00c3\u00a9s. Un seul projet peut \u00c3\u00aatre actif \u00c3\u00a0 la fois. +CTL_StopTooltip=Arrêter la lecture (touche shift-espace) +CTL_TransposeDisplay=Changer la tonalité de lecture +ControlToolbarPanel.fbtn_Active.toolTipText=Si "ON", le projet est actif et les messages Midi sont activés. Un seul projet peut être actif à la fois. ControlToolbarPanel.fbtn_Click.toolTipText=Click ControlToolbarPanel.fbtn_Pause.toolTipText=Suspendre la lecture -ControlToolbarPanel.fbtn_Precount.toolTipText=d\u00c3\u00a9compte avant la lecture +ControlToolbarPanel.fbtn_Precount.toolTipText=décompte avant la lecture ControlToolbarPanel.posViewer.toolTipText=Position actuelle (mesure\:temps) ControlToolbarPanel.spn_Tempo.toolTipText=Tempo de lecture. Utilisez J ou - pour diminuer le tempo, K ou + pour l'augmenter. -ERR_BadSelection=Les premi\u00c3\u00a8re et derni\u00c3\u00a8re mesure s\u00c3\u00a9lectionn\u00c3\u00a9es ne sont pas compatibles avec les \u00c3\u00a9l\u00c3\u00a9ments de structure. -ERR_CantPlayFromHere=Impossible de d\u00c3\u00a9marrer la lecture \u00c3\u00a0 partir d'ici. S\u00c3\u00a9lectionnez d'abord une mesure valide dans l'\u00c3\u00a9diteur de grille, ou un \u00c3\u00a9l\u00c3\u00a9ment de structure dans l'\u00c3\u00a9diteur de grille. -ERR_InvalidPlayableSelection=Impossible de d\u00c3\u00a9marrer la lecture de cette s\u00c3\u00a9lection \: {0} -ERR_NeedContiguousSelection=Les mesures s\u00c3\u00a9lectionn\u00c3\u00a9es doivent \u00c3\u00aatre contigu\u00c3\u00abs. -ERR_NotActive=Impossible de d\u00c3\u00a9marrer la lecture \u00c3\u00a0 partir d'ici\: le projet n'est pas actif +ERR_BadSelection=Les première et dernière mesure sélectionnées ne sont pas compatibles avec les éléments de structure. +ERR_CantPlayFromHere=Impossible de démarrer la lecture à partir d'ici. Sélectionnez d'abord une mesure valide dans l'éditeur de grille, ou un élément de structure dans l'éditeur de grille. +ERR_InvalidPlayableSelection=Impossible de démarrer la lecture de cette sélection \: {0} +ERR_NeedContiguousSelection=Les mesures sélectionnées doivent être contiguës. +ERR_NotActive=Impossible de démarrer la lecture à partir d'ici\: le projet n'est pas actif FixMidiMixDialog.btn_Cancel.text=Annuler FixMidiMixDialog.btn_fix.text=Corriger FixMidiMixDialog.btn_skip.text=Ignorer FixMidiMixDialog.cb_rememberMyChoice.text=Se souvenir de mon choix pendant cette session -FixMidiMixDialog.lbl_firstLine.text=Des probl\u00c3\u00a8mes potentiels de configuration Midi ont \u00c3\u00a9t\u00c3\u00a9 d\u00c3\u00a9tect\u00c3\u00a9s. OK pour les corriger ? -FixMidiMixDialog.lbl_fixInstrumentTitle.text=Les instruments suivants doivent \u00c3\u00aatre remplac\u00c3\u00a9s pour s'adapter \u00c3\u00a0 la configuration du synth\u00c3\u00a9 de sortie\: -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Les canaux batterie/percussion suivants doivent \u00c3\u00aatre redirig\u00c3\u00a9s vers le canal 10 \: -MIDI_CONFIGURATION_PROBLEMS=Probl\u00c3\u00a8mes de configuration Midi +FixMidiMixDialog.lbl_firstLine.text=Des problèmes potentiels de configuration Midi ont été détectés. OK pour les corriger ? +FixMidiMixDialog.lbl_fixInstrumentTitle.text=Les instruments suivants doivent être remplacés pour s'adapter à la configuration du synthé de sortie\: +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Les canaux batterie/percussion suivants doivent être redirigés vers le canal 10 \: +MIDI_CONFIGURATION_PROBLEMS=Problèmes de configuration Midi TransposeDisplayDialog.btn_Cancel.text=Annuler TransposeDisplayDialog.btn_Ok.text=OK -TransposeDisplayDialog.helpTextArea1.text=Change la tonalit\u00c3\u00a9 (transposition des accords de la grille) lors du playback. TransposeDisplayDialog.cb_enableTransposition.text=Activer la transposition pendant la lecture +TransposeDisplayDialog.helpTextArea1.text=Change la tonalité (transposition des accords de la grille) lors du playback. \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_id_ID.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_id_ID.properties index 63b943e226..f8372cf89b 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_id_ID.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_id_ID.properties @@ -3,7 +3,7 @@ AutoUpdateONtooltip=Auto update is ON\: playing music is updated in real time wi CTL_Click=Click CTL_ClickTooltip=Click during playback CTL_ControlToolbarAction=Music Control Toolbar -CTL_CurrentPlaybackTransposition=Current playback key transposition\: {0} +CTL_CurrentDisplayTransposition=Current playback key transposition\: {0} CTL_DecreaseTempo=Decrease Tempo CTL_IncreaseTempo=Increase Tempo CTL_Loop=Loop @@ -30,7 +30,7 @@ CTL_ShowPlaybackPoint=Show playback point CTL_ShowPlaybackTooltip=Highlight the bar being played CTL_Stop=Stop CTL_StopTooltip=Stop playback -CTL_TransposePlaybackKey=Transpose playback key +CTL_TransposeDisplay=Transpose playback key ControlToolbarPanel.fbtn_Active.toolTipText=If ON, song is active and Midi messages are enabled. Only one song can be active at a time. ControlToolbarPanel.fbtn_Click.toolTipText=Click ControlToolbarPanel.fbtn_Pause.toolTipText=Pause the playback @@ -52,5 +52,5 @@ FixMidiMixDialog.lbl_reroutedChannelsTitle.text=The following drums channels sho MIDI_CONFIGURATION_PROBLEMS=Midi Configuration Problems TransposeDisplayDialog.btn_Cancel.text=Batalkan TransposeDisplayDialog.btn_Ok.text=OK -TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. TransposeDisplayDialog.cb_enableTransposition.text=Enable key transposition during playback +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_it_IT.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_it_IT.properties index 37474f0ffa..a7ee29646d 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_it_IT.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_it_IT.properties @@ -1,9 +1,9 @@ -AutoUpdateOFFtooltip=L'aggiornamento automatico \u00c3\u00a8 disattivato\: si \u00c3\u00a8 verificato un cambiamento strutturale del brano, la riproduzione della musica non \u00c3\u00a8 pi\u00c3\u00b9 aggiornata in tempo reale. Ferma la riproduzione della musica per riattivare la modalit\u00c3\u00a0 di aggiornamento automatico. -AutoUpdateONtooltip=L'aggiornamento automatico \u00c3\u00a8 attivo\: la riproduzione della musica viene aggiornata in tempo reale con i cambiamenti dei brani (tranne i cambiamenti strutturali) +AutoUpdateOFFtooltip=L'aggiornamento automatico è disattivato\: si è verificato un cambiamento strutturale del brano, la riproduzione della musica non è più aggiornata in tempo reale. Ferma la riproduzione della musica per riattivare la modalità di aggiornamento automatico. +AutoUpdateONtooltip=L'aggiornamento automatico è attivo\: la riproduzione della musica viene aggiornata in tempo reale con i cambiamenti dei brani (tranne i cambiamenti strutturali) CTL_Click=Metronomo CTL_ClickTooltip=Metronomo CTL_ControlToolbarAction=Toolbar controllo musica -CTL_CurrentPlaybackTransposition=Chiave di trasposizione\: {0} +CTL_CurrentDisplayTransposition=Chiave di trasposizione\: {0} CTL_DecreaseTempo=Diminuisci Tempo CTL_IncreaseTempo=Aumenta Tempo CTL_Loop=Ciclo @@ -20,9 +20,9 @@ CTL_PlaybackToPreviousSongPart=Parte del brano precedente CTL_PlaybackToPreviousSongPartTooltip=Riproduce la parte precedente del brano (F1) CTL_RestartPlayback=Restart playback (F3) CTL_Precount=Preconteggio -CTL_Precount1Bar=Precount 1 battuta - Usa maiuscolo-click per cambiare la modalit\u00c3\u00a0 di precount -CTL_Precount2Bar=Precount 2 battuta - Usa maiuscolo-click per cambiare la modalit\u00c3\u00a0 di precount -CTL_PrecountBarAuto=Precount automatico - Usa maiuscolo-click per cambiare la modalit\u00c3\u00a0 di precount +CTL_Precount1Bar=Precount 1 battuta - Usa maiuscolo-click per cambiare la modalità di precount +CTL_Precount2Bar=Precount 2 battuta - Usa maiuscolo-click per cambiare la modalità di precount +CTL_PrecountBarAuto=Precount automatico - Usa maiuscolo-click per cambiare la modalità di precount CTL_SetActive=Attiva/Disattiva (ON/OFF) CTL_SetActivePopupAction=Attiva/Disattiva (ON/OFF) CTL_SetActiveToolTip=Imposta il brano per il quale i messaggi Midi sono abilitati [O] @@ -30,18 +30,18 @@ CTL_ShowPlaybackPoint=Visualizza punto di riproduzione CTL_ShowPlaybackTooltip=Evidenzia la battuta in riproduzione CTL_Stop=Stop CTL_StopTooltip=Stop playback -CTL_TransposePlaybackKey=Trasposizione -ControlToolbarPanel.fbtn_Active.toolTipText=Se ON, il brano \u00c3\u00a8 attivo ed i messaggi Midi sono abilitati. Solo un brano alla volta pu\u00c3\u00b2 essere attivo. +CTL_TransposeDisplay=Trasposizione +ControlToolbarPanel.fbtn_Active.toolTipText=Se ON, il brano è attivo ed i messaggi Midi sono abilitati. Solo un brano alla volta può essere attivo. ControlToolbarPanel.fbtn_Click.toolTipText=Metronomo ControlToolbarPanel.fbtn_Pause.toolTipText=Pausa riproduzione ControlToolbarPanel.fbtn_Precount.toolTipText=precount prima di iniziare la riproduzione ControlToolbarPanel.posViewer.toolTipText=Posizione attuale (battuta\:tempo) ControlToolbarPanel.spn_Tempo.toolTipText=Tempo di riproduzione. Utilizzare J oppure - per diminuire il tempo, K oppure + per aumentarlo. ERR_BadSelection=La prima e l'ultima battuta selezionate non corrispondono correttamente alle parti del brano. -ERR_CantPlayFromHere=Non \u00c3\u00a8 possibile riprodurre da qui. \u00c3\u0088 necessario selezionare una battuta valida nell'editor dello spartito accordi, oppure una parte del brano nell'editor della struttura brano. +ERR_CantPlayFromHere=Non è possibile riprodurre da qui. È necessario selezionare una battuta valida nell'editor dello spartito accordi, oppure una parte del brano nell'editor della struttura brano. ERR_InvalidPlayableSelection=Impossibile riprodurre questa selezione\: {0} ERR_NeedContiguousSelection=Le battute o le parti del brano selezionate devono essere contigue. -ERR_NotActive=Impossibile riprodurre da qui\: il brano non \u00c3\u00a8 attivo +ERR_NotActive=Impossibile riprodurre da qui\: il brano non è attivo FixMidiMixDialog.btn_Cancel.text=Annulla FixMidiMixDialog.btn_fix.text=Correggi FixMidiMixDialog.btn_skip.text=Ignora @@ -52,5 +52,5 @@ FixMidiMixDialog.lbl_reroutedChannelsTitle.text=I seguenti canali della batteria MIDI_CONFIGURATION_PROBLEMS=Problemi Di Configurazione Midi TransposeDisplayDialog.btn_Cancel.text=Annulla TransposeDisplayDialog.btn_Ok.text=Conferma -TransposeDisplayDialog.helpTextArea1.text=Cambia chiave durante la riproduzione del brano (trasponi i simboli degli accordi). TransposeDisplayDialog.cb_enableTransposition.text=Abilita la trasposizione durante la riproduzione +TransposeDisplayDialog.helpTextArea1.text=Cambia chiave durante la riproduzione del brano (trasponi i simboli degli accordi). \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ja_JP.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ja_JP.properties index 7ce99b98cb..bba6071831 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ja_JP.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ja_JP.properties @@ -3,7 +3,7 @@ AutoUpdateONtooltip=Auto update is ON\: playing music is updated in real time wi CTL_Click=Click CTL_ClickTooltip=Click during playback CTL_ControlToolbarAction=Music Control Toolbar -CTL_CurrentPlaybackTransposition=Current playback key transposition\: {0} +CTL_CurrentDisplayTransposition=Current playback key transposition\: {0} CTL_DecreaseTempo=Decrease Tempo CTL_IncreaseTempo=Increase Tempo CTL_Loop=Loop @@ -19,7 +19,7 @@ CTL_PlaybackToNextSongPartTooltip=Play next song part (F2) CTL_PlaybackToPreviousSongPart=Previous song part CTL_PlaybackToPreviousSongPartTooltip=Play previous song part (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=\u00e3\u0082\u00ab\u00e3\u0082\u00a6\u00e3\u0083\u00b3\u00e3\u0083\u0088\u00e3\u0082\u00a4\u00e3\u0083\u00b3 +CTL_Precount=カウントイン CTL_Precount1Bar=Precount 1 bar - Use shift-click to change precount mode CTL_Precount2Bar=Precount 2 bars - Use shift-click to change precount mode CTL_PrecountBarAuto=Precount Auto mode - Use shift-click to change precount mode @@ -30,7 +30,7 @@ CTL_ShowPlaybackPoint=Show playback point CTL_ShowPlaybackTooltip=Highlight the bar being played CTL_Stop=Stop CTL_StopTooltip=Stop playback -CTL_TransposePlaybackKey=Transpose playback key +CTL_TransposeDisplay=Transpose playback key ControlToolbarPanel.fbtn_Active.toolTipText=If ON, song is active and Midi messages are enabled. Only one song can be active at a time. ControlToolbarPanel.fbtn_Click.toolTipText=Click ControlToolbarPanel.fbtn_Pause.toolTipText=Pause the playback @@ -42,15 +42,15 @@ ERR_CantPlayFromHere=Can''''t play from here. Select first on a valid bar in the ERR_InvalidPlayableSelection=Can''t play this selection\: {0} ERR_NeedContiguousSelection=Selected bars/songs parts need to be contiguous. ERR_NotActive=Can't play from here\: song is not active -FixMidiMixDialog.btn_Cancel.text=\u00e3\u0082\u00ad\u00e3\u0083\u00a3\u00e3\u0083\u00b3\u00e3\u0082\u00bb\u00e3\u0083\u00ab -FixMidiMixDialog.btn_fix.text=\u00e4\u00bf\u00ae\u00e6\u00ad\u00a3 -FixMidiMixDialog.btn_skip.text=\u00e7\u0084\u00a1\u00e8\u00a6\u0096 -FixMidiMixDialog.cb_rememberMyChoice.text=\u00e3\u0081\u0093\u00e3\u0081\u00ae\u00e3\u0082\u00bb\u00e3\u0083\u0083\u00e3\u0082\u00b7\u00e3\u0083\u00a7\u00e3\u0083\u00b3\u00e3\u0081\u00ae\u00e9\u0096\u0093\u00e3\u0081\u00af\u00e9\u0081\u00b8\u00e6\u008a\u009e\u00e5\u0086\u0085\u00e5\u00ae\u00b9\u00e3\u0082\u0092\u00e4\u00bf\u009d\u00e6\u008c\u0081\u00e3\u0081\u0099\u00e3\u0082\u008b -FixMidiMixDialog.lbl_firstLine.text=\u00e6\u00bd\u009c\u00e5\u009c\u00a8\u00e7\u009a\u0084\u00e3\u0081\u00aaMIDI\u00e8\u00a8\u00ad\u00e5\u00ae\u009a\u00e3\u0081\u00ae\u00e5\u0095\u008f\u00e9\u00a1\u008c\u00e3\u0081\u008c\u00e6\u00a4\u009c\u00e5\u0087\u00ba\u00e3\u0081\u0095\u00e3\u0082\u008c\u00e3\u0081\u00be\u00e3\u0081\u0097\u00e3\u0081\u009f\u00e3\u0080\u0082\u00e4\u00bf\u00ae\u00e6\u00ad\u00a3\u00e3\u0081\u0097\u00e3\u0081\u00be\u00e3\u0081\u0099\u00e3\u0081\u008b\u00ef\u00bc\u009f -FixMidiMixDialog.lbl_fixInstrumentTitle.text=\u00e7\u008f\u00be\u00e5\u009c\u00a8\u00e3\u0081\u00ae\u00e5\u0087\u00ba\u00e5\u008a\u009b\u00e3\u0082\u00b7\u00e3\u0083\u00b3\u00e3\u0082\u00bb\u00e6\u00a7\u008b\u00e6\u0088\u0090\u00e3\u0081\u00ab\u00e5\u0090\u0088\u00e3\u0082\u008f\u00e3\u0081\u009b\u00e3\u0081\u00a6\u00e3\u0080\u0081\u00e4\u00bb\u00a5\u00e4\u00b8\u008b\u00e3\u0081\u00ae\u00e6\u00a5\u00bd\u00e5\u0099\u00a8\u00e3\u0082\u0092\u00e7\u00bd\u00ae\u00e3\u0081\u008d\u00e6\u008f\u009b\u00e3\u0081\u0088\u00e3\u0082\u008b\u00e5\u00bf\u0085\u00e8\u00a6\u0081\u00e3\u0081\u008c\u00e3\u0081\u0082\u00e3\u0082\u008a\u00e3\u0081\u00be\u00e3\u0081\u0099\u00e3\u0080\u0082 -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=\u00e6\u00ac\u00a1\u00e3\u0081\u00ae\u00e3\u0083\u0089\u00e3\u0083\u00a9\u00e3\u0083\u00a0\u00e3\u0083\u0081\u00e3\u0083\u00a3\u00e3\u0083\u00b3\u00e3\u0083\u008d\u00e3\u0083\u00ab\u00e3\u0082\u0092\u00e3\u0083\u0081\u00e3\u0083\u00a3\u00e3\u0083\u00b3\u00e3\u0083\u008d\u00e3\u0083\u00ab10\u00e3\u0081\u00ab\u00e5\u0086\u008d\u00e3\u0083\u00ab\u00e3\u0083\u00bc\u00e3\u0083\u0086\u00e3\u0082\u00a3\u00e3\u0083\u00b3\u00e3\u0082\u00b0\u00e3\u0081\u0097\u00e3\u0081\u00be\u00e3\u0081\u0099\u00e3\u0080\u0082 -MIDI_CONFIGURATION_PROBLEMS=MIDI\u00e6\u00a7\u008b\u00e6\u0088\u0090\u00e3\u0081\u00ae\u00e5\u0095\u008f\u00e9\u00a1\u008c -TransposeDisplayDialog.btn_Cancel.text=\u00e3\u0082\u00ad\u00e3\u0083\u00a3\u00e3\u0083\u00b3\u00e3\u0082\u00bb\u00e3\u0083\u00ab +FixMidiMixDialog.btn_Cancel.text=キャンセル +FixMidiMixDialog.btn_fix.text=修正 +FixMidiMixDialog.btn_skip.text=無視 +FixMidiMixDialog.cb_rememberMyChoice.text=このセッションの間は選択内容を保持する +FixMidiMixDialog.lbl_firstLine.text=潜在的なMIDI設定の問題が検出されました。修正しますか? +FixMidiMixDialog.lbl_fixInstrumentTitle.text=現在の出力シンセ構成に合わせて、以下の楽器を置き換える必要があります。 +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=次のドラムチャンネルをチャンネル10に再ルーティングします。 +MIDI_CONFIGURATION_PROBLEMS=MIDI構成の問題 +TransposeDisplayDialog.btn_Cancel.text=キャンセル TransposeDisplayDialog.btn_Ok.text=OK -TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. TransposeDisplayDialog.cb_enableTransposition.text=Enable key transposition during playback +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ko_KR.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ko_KR.properties index a9ad10969f..95263f6861 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ko_KR.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ko_KR.properties @@ -3,7 +3,7 @@ AutoUpdateONtooltip=Auto update is ON\: playing music is updated in real time wi CTL_Click=Click CTL_ClickTooltip=Click during playback CTL_ControlToolbarAction=Music Control Toolbar -CTL_CurrentPlaybackTransposition=Current playback key transposition\: {0} +CTL_CurrentDisplayTransposition=Current playback key transposition\: {0} CTL_DecreaseTempo=Decrease Tempo CTL_IncreaseTempo=Increase Tempo CTL_Loop=Loop @@ -19,7 +19,7 @@ CTL_PlaybackToNextSongPartTooltip=Play next song part (F2) CTL_PlaybackToPreviousSongPart=Previous song part CTL_PlaybackToPreviousSongPartTooltip=Play previous song part (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=\u00ec\u0098\u0088\u00eb\u00b9\u0084\u00eb\u00b0\u0095 +CTL_Precount=예비박 CTL_Precount1Bar=Precount 1 bar - Use shift-click to change precount mode CTL_Precount2Bar=Precount 2 bars - Use shift-click to change precount mode CTL_PrecountBarAuto=Precount Auto mode - Use shift-click to change precount mode @@ -30,7 +30,7 @@ CTL_ShowPlaybackPoint=Show playback point CTL_ShowPlaybackTooltip=Highlight the bar being played CTL_Stop=Stop CTL_StopTooltip=Stop playback (shift space) -CTL_TransposePlaybackKey=Transpose playback key +CTL_TransposeDisplay=Transpose playback key ControlToolbarPanel.fbtn_Active.toolTipText=If ON, song is active and Midi messages are enabled. Only one song can be active at a time. ControlToolbarPanel.fbtn_Click.toolTipText=Click ControlToolbarPanel.fbtn_Pause.toolTipText=Pause the playback @@ -42,7 +42,7 @@ ERR_CantPlayFromHere=Can''''t play from here. Select first on a valid bar in the ERR_InvalidPlayableSelection=Can''t play this selection\: {0} ERR_NeedContiguousSelection=Selected bars/songs parts need to be contiguous. ERR_NotActive=Can't play from here\: song is not active -FixMidiMixDialog.btn_Cancel.text=\u00ec\u00b7\u00a8\u00ec\u0086\u008c +FixMidiMixDialog.btn_Cancel.text=취소 FixMidiMixDialog.btn_fix.text=Fix FixMidiMixDialog.btn_skip.text=Ignore FixMidiMixDialog.cb_rememberMyChoice.text=Remember my choice during this session @@ -50,7 +50,7 @@ FixMidiMixDialog.lbl_firstLine.text=Potential Midi configuration problems detect FixMidiMixDialog.lbl_fixInstrumentTitle.text=The following instruments should be replaced to fit the current output synth configuration\: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=The following drums channels should be rerouted to channel 10\: MIDI_CONFIGURATION_PROBLEMS=Midi Configuration Problems -TransposeDisplayDialog.btn_Cancel.text=\u00ec\u00b7\u00a8\u00ec\u0086\u008c -TransposeDisplayDialog.btn_Ok.text=\u00ed\u0099\u0095\u00ec\u009d\u00b8 -TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. +TransposeDisplayDialog.btn_Cancel.text=취소 +TransposeDisplayDialog.btn_Ok.text=확인 TransposeDisplayDialog.cb_enableTransposition.text=Enable key transposition during playback +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_no_NO.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_no_NO.properties index 47a44f222c..74fa4f387c 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_no_NO.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_no_NO.properties @@ -3,7 +3,7 @@ AutoUpdateONtooltip=Auto update is ON\: playing music is updated in real time wi CTL_Click=Click CTL_ClickTooltip=Click during playback CTL_ControlToolbarAction=Music Control Toolbar -CTL_CurrentPlaybackTransposition=Current playback key transposition\: {0} +CTL_CurrentDisplayTransposition=Current playback key transposition\: {0} CTL_DecreaseTempo=Decrease Tempo CTL_IncreaseTempo=Increase Tempo CTL_Loop=Loop @@ -30,7 +30,7 @@ CTL_ShowPlaybackPoint=Show playback point CTL_ShowPlaybackTooltip=Highlight the bar being played CTL_Stop=Stop CTL_StopTooltip=Stop playback (shift space) -CTL_TransposePlaybackKey=Transpose playback key +CTL_TransposeDisplay=Transpose playback key ControlToolbarPanel.fbtn_Active.toolTipText=If ON, song is active and Midi messages are enabled. Only one song can be active at a time. ControlToolbarPanel.fbtn_Click.toolTipText=Click ControlToolbarPanel.fbtn_Pause.toolTipText=Pause the playback @@ -52,5 +52,5 @@ FixMidiMixDialog.lbl_reroutedChannelsTitle.text=The following drums channels sho MIDI_CONFIGURATION_PROBLEMS=Midi Configuration Problems TransposeDisplayDialog.btn_Cancel.text=Cancel TransposeDisplayDialog.btn_Ok.text=OK -TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. TransposeDisplayDialog.cb_enableTransposition.text=Enable key transposition during playback +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_pt_BR.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_pt_BR.properties index ebc14b2193..102151a203 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_pt_BR.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_pt_BR.properties @@ -1,56 +1,56 @@ -AutoUpdateOFFtooltip=Atualiza\u00c3\u00a7\u00c3\u00a3o Autom\u00c3\u00a1tica Est\u00c3\u00a1 DESABILITADA\: Ocorreu Uma Altera\u00c3\u00a7\u00c3\u00a3o Estrutural na M\u00c3\u00basica, a Reprodu\u00c3\u00a7\u00c3\u00a3o da M\u00c3\u00basica N\u00c3\u00a3o Ser\u00c3\u00a1 Mais Atualizada em Tempo Real. Parar a Reprodu\u00c3\u00a7\u00c3\u00a3o da M\u00c3\u00basica Para Reabilitar o Modo de Atualiza\u00c3\u00a7\u00c3\u00a3o Autom\u00c3\u00a1tica. -AutoUpdateONtooltip=Atualiza\u00c3\u00a7\u00c3\u00a3o Autom\u00c3\u00a1tica Est\u00c3\u00a1 HABILITADA\: A Reprodu\u00c3\u00a7\u00c3\u00a3o da M\u00c3\u00basica \u00c3\u00a9 Atualizada em Tempo Real Com as Altera\u00c3\u00a7\u00c3\u00b5es da M\u00c3\u00basica (Exceto Altera\u00c3\u00a7\u00c3\u00b5es Estruturais) +AutoUpdateOFFtooltip=Atualização Automática Está DESABILITADA\: Ocorreu Uma Alteração Estrutural na Música, a Reprodução da Música Não Será Mais Atualizada em Tempo Real. Parar a Reprodução da Música Para Reabilitar o Modo de Atualização Automática. +AutoUpdateONtooltip=Atualização Automática Está HABILITADA\: A Reprodução da Música é Atualizada em Tempo Real Com as Alterações da Música (Exceto Alterações Estruturais) CTL_Click=Clique -CTL_ClickTooltip=Clique durante a reprodu\u00c3\u00a7\u00c3\u00a3o -CTL_ControlToolbarAction=Barra de Controle da M\u00c3\u00basica -CTL_CurrentPlaybackTransposition=Tom atual da reprodu\u00c3\u00a7\u00c3\u00a3o\: {0} +CTL_ClickTooltip=Clique durante a reprodução +CTL_ControlToolbarAction=Barra de Controle da Música +CTL_CurrentDisplayTransposition=Tom atual da reprodução\: {0} CTL_DecreaseTempo=Reduzir Andamento CTL_IncreaseTempo=Aumentar Andamento CTL_Loop=Loop -CTL_LoopTooltip=Reprodu\u00c3\u00a7\u00c3\u00a3o em loop (L) +CTL_LoopTooltip=Reprodução em loop (L) CTL_Pause=Pausar -CTL_PauseTooltip=Pausar reprodu\u00c3\u00a7\u00c3\u00a3o (espa\u00c3\u00a7o) +CTL_PauseTooltip=Pausar reprodução (espaço) CTL_Play=Reproduzir CTL_PlayFromHere=Reproduzir a partir daqui -CTL_PlaySelection=Reproduzir sele\u00c3\u00a7\u00c3\u00a3o -CTL_PlayToolTip=Iniciar/Pausar reprodu\u00c3\u00a7\u00c3\u00a3o (espa\u00c3\u00a7o) -CTL_PlaybackToNextSongPart=Pr\u00c3\u00b3xima parte da m\u00c3\u00basica -CTL_PlaybackToNextSongPartTooltip=Tocar pr\u00c3\u00b3xima parte da m\u00c3\u00basica (F2) -CTL_PlaybackToPreviousSongPart=Parte anterior da m\u00c3\u00basica -CTL_PlaybackToPreviousSongPartTooltip=Tocar parte anterior da m\u00c3\u00basica (F1) +CTL_PlaySelection=Reproduzir seleção +CTL_PlayToolTip=Iniciar/Pausar reprodução (espaço) +CTL_PlaybackToNextSongPart=Próxima parte da música +CTL_PlaybackToNextSongPartTooltip=Tocar próxima parte da música (F2) +CTL_PlaybackToPreviousSongPart=Parte anterior da música +CTL_PlaybackToPreviousSongPartTooltip=Tocar parte anterior da música (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=Pr\u00c3\u00a9-contagem -CTL_Precount1Bar=Pr\u00c3\u00a9-contar 1 compasso - Use shift-clique para alterar o modo de pr\u00c3\u00a9-contagem -CTL_Precount2Bar=Pr\u00c3\u00a9-contar 2 compassos - Use shift-clique para alterar o modo de pr\u00c3\u00a9-contagem -CTL_PrecountBarAuto=Pr\u00c3\u00a9-contagem autom\u00c3\u00a1tica - Use shift-clique para alterar o modo de pr\u00c3\u00a9-contagem +CTL_Precount=Pré-contagem +CTL_Precount1Bar=Pré-contar 1 compasso - Use shift-clique para alterar o modo de pré-contagem +CTL_Precount2Bar=Pré-contar 2 compassos - Use shift-clique para alterar o modo de pré-contagem +CTL_PrecountBarAuto=Pré-contagem automática - Use shift-clique para alterar o modo de pré-contagem CTL_SetActive=Ativar/ Desativar (ON/OFF) CTL_SetActivePopupAction=Ativar/ Desativar (ON/OFF) -CTL_SetActiveToolTip=Especificar a m\u00c3\u00basica para a qual as mensagens Midi est\u00c3\u00a3o ativadas [O] -CTL_ShowPlaybackPoint=Exibir ponto da reprodu\u00c3\u00a7\u00c3\u00a3o +CTL_SetActiveToolTip=Especificar a música para a qual as mensagens Midi estão ativadas [O] +CTL_ShowPlaybackPoint=Exibir ponto da reprodução CTL_ShowPlaybackTooltip=Destacar o compasso sendo tocado CTL_Stop=Parar -CTL_StopTooltip=Parar reprodu\u00c3\u00a7\u00c3\u00a3o (shift + espa\u00c3\u00a7o) -CTL_TransposePlaybackKey=Transpor tom da reprodu\u00c3\u00a7\u00c3\u00a3o -ControlToolbarPanel.fbtn_Active.toolTipText=Se LIGADO, a m\u00c3\u00basica e as mensagens Midi estar\u00c3\u00a3o ativas. Apenas uma m\u00c3\u00basica pode estar ativa por vez. +CTL_StopTooltip=Parar reprodução (shift + espaço) +CTL_TransposeDisplay=Transpor tom da reprodução +ControlToolbarPanel.fbtn_Active.toolTipText=Se LIGADO, a música e as mensagens Midi estarão ativas. Apenas uma música pode estar ativa por vez. ControlToolbarPanel.fbtn_Click.toolTipText=Clique -ControlToolbarPanel.fbtn_Pause.toolTipText=Pausar a reprodu\u00c3\u00a7\u00c3\u00a3o -ControlToolbarPanel.fbtn_Precount.toolTipText=pr\u00c3\u00a9-contagem antes de iniciar a reprodu\u00c3\u00a7\u00c3\u00a3o -ControlToolbarPanel.posViewer.toolTipText=Posi\u00c3\u00a7\u00c3\u00a3o atual (compasso\:tempo) -ControlToolbarPanel.spn_Tempo.toolTipText=Tempo de andamento da reprodu\u00c3\u00a7\u00c3\u00a3o. Use J ou - para diminuir, K ou + para aumentar. -ERR_BadSelection=O primeiro e o \u00c3\u00baltimo compassos selecionados n\u00c3\u00a3o combinam corretamente com partes da m\u00c3\u00basica. -ERR_CantPlayFromHere=N\u00c3\u00a3o \u00c3\u00a9 poss\u00c3\u00advel reproduzir a partir daqui. Selecione primeiro um compasso v\u00c3\u00a1lido no editor da folha de acordes ou em uma parte da m\u00c3\u00basica no editor de estrutura da m\u00c3\u00basica. -ERR_InvalidPlayableSelection=N\u00c3\u00a3o \u00c3\u00a9 poss\u00c3\u00advel reproduzir esta sele\u00c3\u00a7\u00c3\u00a3o\: {0} -ERR_NeedContiguousSelection=Os compassos/partes da m\u00c3\u00basica selecionados precisam estar adjacentes. -ERR_NotActive=N\u00c3\u00a3o \u00c3\u00a9 poss\u00c3\u00advel reproduzir daqui\: a m\u00c3\u00basica n\u00c3\u00a3o est\u00c3\u00a1 ativa +ControlToolbarPanel.fbtn_Pause.toolTipText=Pausar a reprodução +ControlToolbarPanel.fbtn_Precount.toolTipText=pré-contagem antes de iniciar a reprodução +ControlToolbarPanel.posViewer.toolTipText=Posição atual (compasso\:tempo) +ControlToolbarPanel.spn_Tempo.toolTipText=Tempo de andamento da reprodução. Use J ou - para diminuir, K ou + para aumentar. +ERR_BadSelection=O primeiro e o último compassos selecionados não combinam corretamente com partes da música. +ERR_CantPlayFromHere=Não é possível reproduzir a partir daqui. Selecione primeiro um compasso válido no editor da folha de acordes ou em uma parte da música no editor de estrutura da música. +ERR_InvalidPlayableSelection=Não é possível reproduzir esta seleção\: {0} +ERR_NeedContiguousSelection=Os compassos/partes da música selecionados precisam estar adjacentes. +ERR_NotActive=Não é possível reproduzir daqui\: a música não está ativa FixMidiMixDialog.btn_Cancel.text=Cancelar FixMidiMixDialog.btn_fix.text=Corrigir FixMidiMixDialog.btn_skip.text=Ignorar -FixMidiMixDialog.cb_rememberMyChoice.text=Lembrar minha escolha durante esta sess\u00c3\u00a3o -FixMidiMixDialog.lbl_firstLine.text=Poss\u00c3\u00adveis problemas de configura\u00c3\u00a7\u00c3\u00a3o Midi detectados. Deseja corrigi-los? -FixMidiMixDialog.lbl_fixInstrumentTitle.text=Os seguintes instrumentos devem ser substitu\u00c3\u00addos para se adequarem \u00c3\u00a0 configura\u00c3\u00a7\u00c3\u00a3o atual de sintetizador de sa\u00c3\u00adda\: +FixMidiMixDialog.cb_rememberMyChoice.text=Lembrar minha escolha durante esta sessão +FixMidiMixDialog.lbl_firstLine.text=Possíveis problemas de configuração Midi detectados. Deseja corrigi-los? +FixMidiMixDialog.lbl_fixInstrumentTitle.text=Os seguintes instrumentos devem ser substituídos para se adequarem à configuração atual de sintetizador de saída\: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Os seguintes canais de tambores devem ser reencaminhados para o canal 10\: -MIDI_CONFIGURATION_PROBLEMS=Problemas de Configura\u00c3\u00a7\u00c3\u00a3o Midi +MIDI_CONFIGURATION_PROBLEMS=Problemas de Configuração Midi TransposeDisplayDialog.btn_Cancel.text=Cancelar TransposeDisplayDialog.btn_Ok.text=OK -TransposeDisplayDialog.helpTextArea1.text=Alterar tom (transpor cifras de acorde) ao tocar uma m\u00c3\u00basica. -TransposeDisplayDialog.cb_enableTransposition.text=Habilitar a transposi\u00c3\u00a7\u00c3\u00a3o de tom durante a reprodu\u00c3\u00a7\u00c3\u00a3o +TransposeDisplayDialog.cb_enableTransposition.text=Habilitar a transposição de tom durante a reprodução +TransposeDisplayDialog.helpTextArea1.text=Alterar tom (transpor cifras de acorde) ao tocar uma música. \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ru_RU.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ru_RU.properties index 327cca593d..14ef3483e1 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ru_RU.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_ru_RU.properties @@ -3,7 +3,7 @@ AutoUpdateONtooltip=Auto update is ON\: playing music is updated in real time wi CTL_Click=Click CTL_ClickTooltip=Click during playback CTL_ControlToolbarAction=Music Control Toolbar -CTL_CurrentPlaybackTransposition=Current playback key transposition\: {0} +CTL_CurrentDisplayTransposition=Current playback key transposition\: {0} CTL_DecreaseTempo=Decrease Tempo CTL_IncreaseTempo=Increase Tempo CTL_Loop=Loop @@ -19,7 +19,7 @@ CTL_PlaybackToNextSongPartTooltip=Play next song part (F2) CTL_PlaybackToPreviousSongPart=Previous song part CTL_PlaybackToPreviousSongPartTooltip=Play previous song part (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=\u00d0\u009f\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00b2\u00d0\u00b0\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b5\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d1\u008b\u00d0\u00b9 \u00d0\u00be\u00d1\u0082\u00d1\u0081\u00d1\u0087\u00d1\u0091\u00d1\u0082 +CTL_Precount=Предварительный отсчёт CTL_Precount1Bar=Precount 1 bar - Use shift-click to change precount mode CTL_Precount2Bar=Precount 2 bars - Use shift-click to change precount mode CTL_PrecountBarAuto=Precount Auto mode - Use shift-click to change precount mode @@ -30,7 +30,7 @@ CTL_ShowPlaybackPoint=Show playback point CTL_ShowPlaybackTooltip=Highlight the bar being played CTL_Stop=Stop CTL_StopTooltip=Stop playback (shift space) -CTL_TransposePlaybackKey=Transpose playback key +CTL_TransposeDisplay=Transpose playback key ControlToolbarPanel.fbtn_Active.toolTipText=If ON, song is active and Midi messages are enabled. Only one song can be active at a time. ControlToolbarPanel.fbtn_Click.toolTipText=Click ControlToolbarPanel.fbtn_Pause.toolTipText=Pause the playback @@ -42,7 +42,7 @@ ERR_CantPlayFromHere=Can''''t play from here. Select first on a valid bar in the ERR_InvalidPlayableSelection=Can''t play this selection\: {0} ERR_NeedContiguousSelection=Selected bars/songs parts need to be contiguous. ERR_NotActive=Can't play from here\: song is not active -FixMidiMixDialog.btn_Cancel.text=\u00d0\u00a1\u00d0\u00b1\u00d1\u0080\u00d0\u00be\u00d1\u0081 +FixMidiMixDialog.btn_Cancel.text=Сброс FixMidiMixDialog.btn_fix.text=Fix FixMidiMixDialog.btn_skip.text=Ignore FixMidiMixDialog.cb_rememberMyChoice.text=Remember my choice during this session @@ -50,7 +50,7 @@ FixMidiMixDialog.lbl_firstLine.text=Potential Midi configuration problems detect FixMidiMixDialog.lbl_fixInstrumentTitle.text=The following instruments should be replaced to fit the current output synth configuration\: FixMidiMixDialog.lbl_reroutedChannelsTitle.text=The following drums channels should be rerouted to channel 10\: MIDI_CONFIGURATION_PROBLEMS=Midi Configuration Problems -TransposeDisplayDialog.btn_Cancel.text=\u00d0\u00a1\u00d0\u00b1\u00d1\u0080\u00d0\u00be\u00d1\u0081 +TransposeDisplayDialog.btn_Cancel.text=Сброс TransposeDisplayDialog.btn_Ok.text=OK -TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. TransposeDisplayDialog.cb_enableTransposition.text=Enable key transposition during playback +TransposeDisplayDialog.helpTextArea1.text=Change key (transpose chord symbols) when playing a song. \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_uk_UA.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_uk_UA.properties index c67df4a749..8430043362 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_uk_UA.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_uk_UA.properties @@ -1,56 +1,56 @@ -AutoUpdateOFFtooltip=\u00d0\u0090\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d0\u00bc\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0087\u00d0\u00bd\u00d0\u00b5 \u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f \u00d0\u0092\u00d0\u0098\u00d0\u009c\u00d0\u009a\u00d0\u009d\u00d0\u0095\u00d0\u009d\u00d0\u009e\: \u00d1\u0081\u00d1\u0082\u00d1\u0080\u00d1\u0083\u00d0\u00ba\u00d1\u0082\u00d1\u0083\u00d1\u0080\u00d1\u0083 \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096 \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00be. \u00d0\u009c\u00d1\u0083\u00d0\u00b7\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0, \u00d1\u0089\u00d0\u00be \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d1\u008e\u00d1\u0094\u00d1\u0082\u00d1\u008c\u00d1\u0081\u00d1\u008f, \u00d0\u00b1\u00d1\u0096\u00d0\u00bb\u00d1\u008c\u00d1\u0088\u00d0\u00b5 \u00d0\u00bd\u00d0\u00b5 \u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d1\u008e\u00d1\u0094\u00d1\u0082\u00d1\u008c\u00d1\u0081\u00d1\u008f \u00d0\u00b2 \u00d1\u0080\u00d0\u00b5\u00d0\u00b0\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be\u00d0\u00bc\u00d1\u0083 \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0096. \u00d0\u0097\u00d1\u0083\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d1\u0096\u00d1\u0082\u00d1\u008c \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f \u00d0\u00bc\u00d1\u0083\u00d0\u00b7\u00d0\u00b8\u00d0\u00ba\u00d0\u00b8, \u00d1\u0089\u00d0\u00be\u00d0\u00b1 \u00d0\u00b7\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d1\u0083 \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d1\u0080\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc \u00d0\u00b0\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d0\u00bc\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0087\u00d0\u00bd\u00d0\u00be\u00d0\u00b3\u00d0\u00be \u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f. -AutoUpdateONtooltip=\u00d0\u00a3\u00d0\u00b2\u00d1\u0096\u00d0\u00bc\u00d0\u00ba\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00be \u00d0\u00b0\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d0\u00bc\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0087\u00d0\u00bd\u00d0\u00b5 \u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f\: \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00b0 \u00d0\u00bc\u00d1\u0083\u00d0\u00b7\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0 \u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00bb\u00d1\u008e\u00d1\u0094\u00d1\u0082\u00d1\u008c\u00d1\u0081\u00d1\u008f \u00d0\u00b2 \u00d1\u0080\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc\u00d1\u0096 \u00d1\u0080\u00d0\u00b5\u00d0\u00b0\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be\u00d0\u00b3\u00d0\u00be \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0083, \u00d0\u00ba\u00d0\u00be\u00d0\u00bb\u00d0\u00b8 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00b1\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u008e\u00d1\u0082\u00d1\u008c\u00d1\u0081\u00d1\u008f \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b8 (\u00d0\u00b7\u00d0\u00b0 \u00d0\u00b2\u00d0\u00b8\u00d0\u00bd\u00d1\u008f\u00d1\u0082\u00d0\u00ba\u00d0\u00be\u00d0\u00bc \u00d1\u0081\u00d1\u0082\u00d1\u0080\u00d1\u0083\u00d0\u00ba\u00d1\u0082\u00d1\u0083\u00d1\u0080\u00d0\u00bd\u00d0\u00b8\u00d1\u0085 \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd) -CTL_Click=\u00d0\u009c\u00d0\u00b5\u00d1\u0082\u00d1\u0080\u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00bc -CTL_ClickTooltip=\u00d0\u009d\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0081\u00d0\u00bd\u00d1\u0096\u00d1\u0082\u00d1\u008c \u00d0\u00bf\u00d1\u0096\u00d0\u00b4 \u00d1\u0087\u00d0\u00b0\u00d1\u0081 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f -CTL_ControlToolbarAction=\u00d0\u009f\u00d0\u00b0\u00d0\u00bd\u00d0\u00b5\u00d0\u00bb\u00d1\u008c \u00d0\u00ba\u00d0\u00b5\u00d1\u0080\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008f \u00d0\u00bc\u00d1\u0083\u00d0\u00b7\u00d0\u00b8\u00d0\u00ba\u00d0\u00be\u00d1\u008e -CTL_CurrentPlaybackTransposition=\u00d0\u00a2\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u008f \u00d0\u00bf\u00d0\u00be\u00d1\u0082\u00d0\u00be\u00d1\u0087\u00d0\u00bd\u00d0\u00be\u00d0\u00b3\u00d0\u00be \u00d0\u00ba\u00d0\u00bb\u00d1\u008e\u00d1\u0087\u00d0\u00b0 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f\: {0} -CTL_DecreaseTempo=\u00d0\u0097\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d1\u0088\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00a2\u00d0\u00b5\u00d0\u00bc\u00d0\u00bf -CTL_IncreaseTempo=\u00d0\u0097\u00d0\u00b1\u00d1\u0096\u00d0\u00bb\u00d1\u008c\u00d1\u0088\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00a2\u00d0\u00b5\u00d0\u00bc\u00d0\u00bf -CTL_Loop=\u00d0\u0097\u00d0\u00b0\u00d1\u0086\u00d0\u00b8\u00d0\u00ba\u00d0\u00bb\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 -CTL_LoopTooltip=\u00d0\u00a6\u00d0\u00b8\u00d0\u00ba\u00d0\u00bb\u00d1\u0096\u00d1\u0087\u00d0\u00bd\u00d0\u00b5 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f (L) -CTL_Pause=\u00d0\u009f\u00d0\u00b0\u00d1\u0083\u00d0\u00b7\u00d0\u00b0 -CTL_PauseTooltip=\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00b7\u00d1\u0083\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f (\u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d1\u0096\u00d0\u00bb) -CTL_Play=\u00d0\u0093\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 -CTL_PlayFromHere=\u00d0\u0092\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0081\u00d0\u00b8 -CTL_PlaySelection=\u00d0\u0093\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00b2\u00d0\u00b8\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d0\u00b5 -CTL_PlayToolTip=\u00d0\u00a1\u00d1\u0082\u00d0\u00b0\u00d1\u0080\u00d1\u0082/\u00d0\u009f\u00d0\u00b0\u00d1\u0083\u00d0\u00b7\u00d0\u00b0 (\u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d1\u0096\u00d0\u00bb) -CTL_PlaybackToNextSongPart=\u00d0\u009d\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d1\u0083\u00d0\u00bf\u00d0\u00bd\u00d0\u00b0 \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d0\u00b0 \u00d0\u00ba\u00d0\u00be\u00d0\u00bc\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097 -CTL_PlaybackToNextSongPartTooltip=\u00d0\u0093\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00bd\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d1\u0083\u00d0\u00bf\u00d0\u00bd\u00d1\u0083 \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d1\u0083 \u00d0\u00ba\u00d0\u00be\u00d0\u00bc\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097 (F2) -CTL_PlaybackToPreviousSongPart=\u00d0\u009f\u00d0\u00be\u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d1\u008f \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d0\u00b0 \u00d0\u00ba\u00d0\u00be\u00d0\u00bc\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097 -CTL_PlaybackToPreviousSongPartTooltip=\u00d0\u0093\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00bf\u00d0\u00be\u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d1\u008e \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d1\u0083 \u00d0\u00ba\u00d0\u00be\u00d0\u00bc\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097(F1) +AutoUpdateOFFtooltip=Автоматичне оновлення ВИМКНЕНО\: структуру пісні змінено. Музика, що відтворюється, більше не оновлюється в реальному часі. Зупиніть відтворення музики, щоб знову активувати режим автоматичного оновлення. +AutoUpdateONtooltip=Увімкнено автоматичне оновлення\: відтворена музика оновлюється в режимі реального часу, коли відбуваються зміни (за винятком структурних змін) +CTL_Click=Метроном +CTL_ClickTooltip=Натисніть під час відтворення +CTL_ControlToolbarAction=Панель керування музикою +CTL_CurrentDisplayTransposition=Транспозиція поточного ключа відтворення\: {0} +CTL_DecreaseTempo=Зменшити Темп +CTL_IncreaseTempo=Збільшити Темп +CTL_Loop=Зациклити +CTL_LoopTooltip=Циклічне відтворення (L) +CTL_Pause=Пауза +CTL_PauseTooltip=Призупинити відтворення (пробіл) +CTL_Play=Грати +CTL_PlayFromHere=Відтворити звідси +CTL_PlaySelection=Грати вибране +CTL_PlayToolTip=Старт/Пауза (пробіл) +CTL_PlaybackToNextSongPart=Наступна частина композиції +CTL_PlaybackToNextSongPartTooltip=Грати наступну частину композиції (F2) +CTL_PlaybackToPreviousSongPart=Попередня частина композиції +CTL_PlaybackToPreviousSongPartTooltip=Грати попередню частину композиції(F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=\u00d0\u009f\u00d0\u00be\u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d1\u0096\u00d0\u00b9 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00bb\u00d1\u0096\u00d0\u00ba -CTL_Precount1Bar=\u00d0\u009f\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00be\u00d0\u00ba \u00d0\u00b2 1 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d1\u0096 - \u00d0\u00a0\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc \u00d0\u00bf\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00ba\u00d1\u0083 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b0 \u00d0\u00b4\u00d0\u00be\u00d0\u00bf\u00d0\u00be\u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00be\u00d1\u008e Shift-Click -CTL_Precount2Bar=\u00d0\u009f\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00be\u00d0\u00ba \u00d1\u0083 2 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d1\u0096 - \u00d0\u00a0\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc \u00d0\u00bf\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00ba\u00d1\u0083 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b0 \u00d0\u00b4\u00d0\u00be\u00d0\u00bf\u00d0\u00be\u00d0\u00bc\u00d0\u00be\u00d0\u00b3\u00d0\u00be\u00d1\u008e Shift-Click -CTL_PrecountBarAuto=\u00d0\u0090\u00d0\u00b2\u00d1\u0082\u00d0\u00be\u00d0\u00bc\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0087\u00d0\u00bd\u00d0\u00b8\u00d0\u00b9 \u00d0\u00bf\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00be\u00d0\u00ba - \u00d1\u0080\u00d0\u00b5\u00d0\u00b6\u00d0\u00b8\u00d0\u00bc \u00d0\u00bf\u00d1\u0096\u00d0\u00b4\u00d1\u0080\u00d0\u00b0\u00d1\u0085\u00d1\u0083\u00d0\u00bd\u00d0\u00ba\u00d1\u0083 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b7\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8, \u00d0\u00bd\u00d0\u00b0\u00d1\u0082\u00d0\u00b8\u00d1\u0081\u00d0\u00bd\u00d1\u0083\u00d0\u00b2\u00d1\u0088\u00d0\u00b8 Shift -CTL_SetActive=\u00d0\u0090\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00b5 \u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00bc\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008f (ON/OFF) -CTL_SetActivePopupAction=\u00d0\u0090\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00b5 \u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00bc\u00d0\u00b8\u00d0\u00ba\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008f (ON/OFF) -CTL_SetActiveToolTip=\u00d0\u00a3\u00d1\u0081\u00d1\u0082\u00d0\u00b0\u00d0\u00bd\u00d0\u00be\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d1\u0094\u00d0\u00b4\u00d0\u00b8\u00d0\u00bd\u00d1\u0083 \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d1\u0083 \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u008e, \u00d0\u00b4\u00d0\u00bb\u00d1\u008f \u00d1\u008f\u00d0\u00ba\u00d0\u00be\u00d1\u0097 \u00d0\u00b2\u00d0\u00b2\u00d1\u0096\u00d0\u00bc\u00d0\u00ba\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00be Midi \u00d0\u00bf\u00d0\u00be\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00be\u00d0\u00bc\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f [O] -CTL_ShowPlaybackPoint=\u00d0\u009f\u00d0\u00be\u00d0\u00ba\u00d0\u00b0\u00d0\u00b7\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d1\u0082\u00d0\u00be\u00d1\u0087\u00d0\u00ba\u00d1\u0083 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f -CTL_ShowPlaybackTooltip=\u00d0\u009f\u00d1\u0096\u00d0\u00b4\u00d1\u0081\u00d0\u00b2\u00d1\u0096\u00d1\u0087\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00bf\u00d0\u00b0\u00d0\u00bd\u00d0\u00b5\u00d0\u00bb\u00d1\u008c \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f -CTL_Stop=\u00d0\u00a1\u00d1\u0082\u00d0\u00be\u00d0\u00bf -CTL_StopTooltip=\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00b7\u00d1\u0083\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f (shift space) -CTL_TransposePlaybackKey=\u00d0\u009a\u00d0\u00bb\u00d1\u008e\u00d1\u0087 \u00d1\u0082\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f -ControlToolbarPanel.fbtn_Active.toolTipText=\u00d0\u00af\u00d0\u00ba\u00d1\u0089\u00d0\u00be \u00d1\u0083\u00d0\u00b2\u00d1\u0096\u00d0\u00bc\u00d0\u00ba\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00be, \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u008f \u00d1\u0083\u00d0\u00b2\u00d1\u0096\u00d0\u00bc\u00d0\u00ba\u00d0\u00bd\u00d0\u00b5\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b0\u00d0\u00b1\u00d0\u00be \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00b0. \u00d0\u00a2\u00d1\u0096\u00d0\u00bb\u00d1\u008c\u00d0\u00ba\u00d0\u00b8 \u00d0\u00be\u00d0\u00b4\u00d0\u00bd\u00d0\u00b0 \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u008f \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00b5 \u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d0\u00b8 \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00be\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b7\u00d0\u00b0 \u00d1\u0080\u00d0\u00b0\u00d0\u00b7. -ControlToolbarPanel.fbtn_Click.toolTipText=\u00d0\u009c\u00d0\u00b5\u00d1\u0082\u00d1\u0080\u00d0\u00be\u00d0\u00bd\u00d0\u00be\u00d0\u00bc -ControlToolbarPanel.fbtn_Pause.toolTipText=\u00d0\u009f\u00d1\u0080\u00d0\u00b8\u00d0\u00b7\u00d1\u0083\u00d0\u00bf\u00d0\u00b8\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f -ControlToolbarPanel.fbtn_Precount.toolTipText=\u00d0\u00bf\u00d0\u00be\u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00bd\u00d1\u0096\u00d0\u00b9 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00bb\u00d1\u0096\u00d0\u00ba \u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00b4 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f\u00d0\u00bc -ControlToolbarPanel.posViewer.toolTipText=\u00d0\u009f\u00d0\u00be\u00d1\u0082\u00d0\u00be\u00d1\u0087\u00d0\u00bd\u00d0\u00b0 \u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u008f (\u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\:\u00d0\u00b4\u00d0\u00be\u00d0\u00bb\u00d1\u008f) +CTL_Precount=Попередній відлік +CTL_Precount1Bar=Підрахунок в 1 такті - Режим підрахунку можна змінити за допомогою Shift-Click +CTL_Precount2Bar=Підрахунок у 2 такті - Режим підрахунку можна змінити за допомогою Shift-Click +CTL_PrecountBarAuto=Автоматичний підрахунок - режим підрахунку можна змінити, натиснувши Shift +CTL_SetActive=Активне перемикання (ON/OFF) +CTL_SetActivePopupAction=Активне перемикання (ON/OFF) +CTL_SetActiveToolTip=Установити єдину активну пісню, для якої ввімкнено Midi повідомлення [O] +CTL_ShowPlaybackPoint=Показувати точку відтворення +CTL_ShowPlaybackTooltip=Підсвічувати панель відтворення +CTL_Stop=Стоп +CTL_StopTooltip=Призупинити відтворення (shift space) +CTL_TransposeDisplay=Ключ транспозиції відтворення +ControlToolbarPanel.fbtn_Active.toolTipText=Якщо увімкнено, пісня увімкнена або активна. Тільки одна пісня може бути активована за раз. +ControlToolbarPanel.fbtn_Click.toolTipText=Метроном +ControlToolbarPanel.fbtn_Pause.toolTipText=Призупинити відтворення +ControlToolbarPanel.fbtn_Precount.toolTipText=попередній відлік перед відтворенням +ControlToolbarPanel.posViewer.toolTipText=Поточна позиція (такт\:доля) ControlToolbarPanel.spn_Tempo.toolTipText=Playback tempo. Use J or - to decrease tempo, K or + to increase. -ERR_BadSelection=\u00d0\u009f\u00d0\u00b5\u00d1\u0080\u00d1\u0088\u00d0\u00b8\u00d0\u00b9 \u00d1\u0096 \u00d0\u00be\u00d1\u0081\u00d1\u0082\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u0096\u00d0\u00b9 \u00d0\u00b2\u00d0\u00b8\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0096 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8 \u00d0\u00bd\u00d0\u00b5\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00be \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00bf\u00d0\u00be\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00b0\u00d1\u008e\u00d1\u0082\u00d1\u008c \u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d0\u00b0\u00d0\u00bc \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096. -ERR_CantPlayFromHere=\u00d0\u009d\u00d0\u00b5 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b3\u00d1\u0080\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0081\u00d0\u00b8. \u00d0\u00a1\u00d0\u00bf\u00d0\u00be\u00d1\u0087\u00d0\u00b0\u00d1\u0082\u00d0\u00ba\u00d1\u0083 \u00d0\u00b2\u00d0\u00b8\u00d0\u00b1\u00d0\u00b5\u00d1\u0080\u00d1\u0096\u00d1\u0082\u00d1\u008c \u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d0\u00bb\u00d1\u008c\u00d0\u00bd\u00d0\u00b8\u00d0\u00b9 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082 \u00d0\u00bd\u00d0\u00b0 \u00d0\u00b0\u00d1\u0080\u00d0\u00ba\u00d1\u0083\u00d1\u0088\u00d1\u0096 \u00d0\u00b0\u00d0\u00ba\u00d0\u00be\u00d1\u0080\u00d0\u00b4\u00d1\u0096\u00d0\u00b2 \u00d0\u00b0\u00d0\u00b1\u00d0\u00be \u00d0\u00bf\u00d0\u00b0\u00d1\u0080\u00d1\u0082\u00d1\u0096\u00d1\u008e \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096 \u00d0\u00b2 \u00d1\u0080\u00d0\u00b5\u00d0\u00b4\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00be\u00d1\u0080\u00d1\u0096 \u00d1\u0081\u00d1\u0082\u00d1\u0080\u00d1\u0083\u00d0\u00ba\u00d1\u0082\u00d1\u0083\u00d1\u0080\u00d0\u00b8 \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096. -ERR_InvalidPlayableSelection=\u00d0\u009d\u00d0\u00b5 \u00d0\u00b2\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00be\u00d1\u0081\u00d1\u008f \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d1\u0086\u00d0\u00b5\u00d0\u00b9 \u00d0\u00b2\u00d0\u00b8\u00d0\u00b1\u00d1\u0096\u00d1\u0080\: {0} -ERR_NeedContiguousSelection=\u00d0\u0092\u00d0\u00b8\u00d0\u00b1\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0096 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8/\u00d1\u0087\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d0\u00b8\u00d0\u00bd\u00d0\u00b8 \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096 \u00d0\u00bc\u00d0\u00b0\u00d1\u008e\u00d1\u0082\u00d1\u008c \u00d0\u00b1\u00d1\u0083\u00d1\u0082\u00d0\u00b8 \u00d0\u00be\u00d0\u00b4\u00d0\u00bd\u00d0\u00b0 \u00d0\u00b7\u00d0\u00b0 \u00d0\u00be\u00d0\u00b4\u00d0\u00bd\u00d0\u00be\u00d1\u008e. -ERR_NotActive=\u00d0\u009d\u00d0\u00b5 \u00d0\u00bc\u00d0\u00be\u00d0\u00b6\u00d0\u00bb\u00d0\u00b8\u00d0\u00b2\u00d0\u00be \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00b7\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0081\u00d0\u00b8\: \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u008f \u00d0\u00bd\u00d0\u00b5 \u00d0\u00b0\u00d0\u00ba\u00d1\u0082\u00d0\u00b8\u00d0\u00b2\u00d0\u00bd\u00d0\u00b0 -FixMidiMixDialog.btn_Cancel.text=\u00d0\u00a1\u00d0\u00ba\u00d0\u00b0\u00d1\u0081\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 -FixMidiMixDialog.btn_fix.text=\u00d0\u0092\u00d0\u00b8\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f -FixMidiMixDialog.btn_skip.text=\u00d0\u0086\u00d0\u00b3\u00d0\u00bd\u00d0\u00be\u00d1\u0080\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 -FixMidiMixDialog.cb_rememberMyChoice.text=\u00d0\u0097\u00d0\u00b0\u00d0\u00bf\u00d0\u00b0\u00d0\u00bc'\u00d1\u008f\u00d1\u0082\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00bc\u00d1\u0096\u00d0\u00b9 \u00d0\u00b2\u00d0\u00b8\u00d0\u00b1\u00d1\u0096\u00d1\u0080 \u00d0\u00bf\u00d1\u0096\u00d0\u00b4 \u00d1\u0087\u00d0\u00b0\u00d1\u0081 \u00d1\u0086\u00d1\u008c\u00d0\u00be\u00d0\u00b3\u00d0\u00be \u00d1\u0081\u00d0\u00b5\u00d0\u00b0\u00d0\u00bd\u00d1\u0081\u00d1\u0083 -FixMidiMixDialog.lbl_firstLine.text=\u00d0\u0092\u00d0\u00b8\u00d1\u008f\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00be \u00d0\u00bf\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d0\u00bb\u00d0\u00b5\u00d0\u00bc\u00d0\u00b8 \u00d0\u00b7 MIDI \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d1\u0084\u00d1\u0096\u00d0\u00b3\u00d1\u0083\u00d1\u0080\u00d0\u00b0\u00d1\u0086\u00d1\u0096\u00d1\u0094\u00d1\u008e. \u00d0\u009f\u00d0\u00be\u00d0\u00b3\u00d0\u00be\u00d0\u00b4\u00d0\u00b6\u00d1\u0083\u00d1\u0094\u00d1\u0082\u00d0\u00b5\u00d1\u0081\u00d1\u008c \u00d0\u00bd\u00d0\u00b0 \u00d1\u0097\u00d1\u0085 \u00d0\u00b2\u00d0\u00b8\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00bb\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f? -FixMidiMixDialog.lbl_fixInstrumentTitle.text=\u00d0\u00a1\u00d0\u00bb\u00d1\u0096\u00d0\u00b4 \u00d0\u00b7\u00d0\u00b0\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d1\u0082\u00d0\u00b0\u00d0\u00ba\u00d1\u0096 \u00d1\u0096\u00d0\u00bd\u00d1\u0081\u00d1\u0082\u00d1\u0080\u00d1\u0083\u00d0\u00bc\u00d0\u00b5\u00d0\u00bd\u00d1\u0082\u00d0\u00b8, \u00d1\u0089\u00d0\u00be\u00d0\u00b1 \u00d0\u00b2\u00d0\u00be\u00d0\u00bd\u00d0\u00b8 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00bf\u00d0\u00be\u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8 \u00d0\u00bf\u00d0\u00be\u00d1\u0082\u00d0\u00be\u00d1\u0087\u00d0\u00bd\u00d1\u0096\u00d0\u00b9 \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d1\u0084\u00d1\u0096\u00d0\u00b3\u00d1\u0083\u00d1\u0080\u00d0\u00b0\u00d1\u0086\u00d1\u0096\u00d1\u0097 \u00d0\u00b2\u00d0\u00b8\u00d1\u0085\u00d1\u0096\u00d0\u00b4\u00d0\u00bd\u00d0\u00be\u00d0\u00b3\u00d0\u00be \u00d1\u0081\u00d0\u00b8\u00d0\u00bd\u00d1\u0082\u00d0\u00b5\u00d0\u00b7\u00d0\u00b0\u00d1\u0082\u00d0\u00be\u00d1\u0080\u00d0\u00b0\: -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=\u00d0\u009d\u00d0\u00b0\u00d1\u0081\u00d1\u0082\u00d1\u0083\u00d0\u00bf\u00d0\u00bd\u00d1\u0096 \u00d0\u00ba\u00d0\u00b0\u00d0\u00bd\u00d0\u00b0\u00d0\u00bb\u00d0\u00b8 \u00d0\u00b1\u00d0\u00b0\u00d1\u0080\u00d0\u00b0\u00d0\u00b1\u00d0\u00b0\u00d0\u00bd\u00d1\u0096\u00d0\u00b2 \u00d1\u0081\u00d0\u00bb\u00d1\u0096\u00d0\u00b4 \u00d0\u00bf\u00d0\u00b5\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00b0\u00d0\u00bf\u00d1\u0080\u00d0\u00b0\u00d0\u00b2\u00d0\u00b8\u00d1\u0082\u00d0\u00b8 \u00d0\u00bd\u00d0\u00b0 \u00d0\u00ba\u00d0\u00b0\u00d0\u00bd\u00d0\u00b0\u00d0\u00bb 10\: -MIDI_CONFIGURATION_PROBLEMS=\u00d0\u009f\u00d1\u0080\u00d0\u00be\u00d0\u00b1\u00d0\u00bb\u00d0\u00b5\u00d0\u00bc\u00d0\u00b8 \u00d0\u00b7 \u00d0\u00ba\u00d0\u00be\u00d0\u00bd\u00d1\u0084\u00d1\u0096\u00d0\u00b3\u00d1\u0083\u00d1\u0080\u00d0\u00b0\u00d1\u0086\u00d1\u0096\u00d1\u0094\u00d1\u008e Midi -TransposeDisplayDialog.btn_Cancel.text=\u00d0\u00a1\u00d0\u00ba\u00d0\u00b0\u00d1\u0081\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 -TransposeDisplayDialog.btn_Ok.text=\u00d0\u0093\u00d0\u00b0\u00d1\u0080\u00d0\u00b0\u00d0\u00b7\u00d0\u00b4 -TransposeDisplayDialog.helpTextArea1.text=\u00d0\u0097\u00d0\u00bc\u00d1\u0096\u00d0\u00bd\u00d1\u008e\u00d0\u00b2\u00d0\u00b0\u00d1\u0082\u00d0\u00b8 \u00d0\u00ba\u00d0\u00bb\u00d1\u008e\u00d1\u0087 (\u00d1\u0082\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00b7\u00d0\u00b8\u00d1\u0086\u00d1\u0096\u00d1\u0097 \u00d1\u0081\u00d0\u00b8\u00d0\u00bc\u00d0\u00b2\u00d0\u00be\u00d0\u00bb\u00d1\u0096\u00d0\u00b2 \u00d0\u00b0\u00d0\u00ba\u00d0\u00be\u00d1\u0080\u00d0\u00b4\u00d1\u0096\u00d0\u00b2) \u00d0\u00bf\u00d1\u0096\u00d0\u00b4 \u00d1\u0087\u00d0\u00b0\u00d1\u0081 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f \u00d0\u00bf\u00d1\u0096\u00d1\u0081\u00d0\u00bd\u00d1\u0096. -TransposeDisplayDialog.cb_enableTransposition.text=\u00d0\u00a3\u00d0\u00b2\u00d1\u0096\u00d0\u00bc\u00d0\u00ba\u00d0\u00bd\u00d1\u0083\u00d1\u0082\u00d0\u00b8 \u00d1\u0082\u00d1\u0080\u00d0\u00b0\u00d0\u00bd\u00d1\u0081\u00d0\u00bf\u00d0\u00be\u00d0\u00bd\u00d1\u0083\u00d0\u00b2\u00d0\u00b0\u00d0\u00bd\u00d0\u00bd\u00d1\u008f \u00d0\u00ba\u00d0\u00bb\u00d0\u00b0\u00d0\u00b2\u00d1\u0096\u00d1\u0088 \u00d0\u00bf\u00d1\u0096\u00d0\u00b4 \u00d1\u0087\u00d0\u00b0\u00d1\u0081 \u00d0\u00b2\u00d1\u0096\u00d0\u00b4\u00d1\u0082\u00d0\u00b2\u00d0\u00be\u00d1\u0080\u00d0\u00b5\u00d0\u00bd\u00d0\u00bd\u00d1\u008f +ERR_BadSelection=Перший і останній вибрані такти неправильно відповідають частинам пісні. +ERR_CantPlayFromHere=Не можна грати звідси. Спочатку виберіть правильний такт на аркуші акордів або партію пісні в редакторі структури пісні. +ERR_InvalidPlayableSelection=Не вдалося відтворити цей вибір\: {0} +ERR_NeedContiguousSelection=Вибрані такти/частини пісні мають бути одна за одною. +ERR_NotActive=Не можливо відтворити звідси\: пісня не активна +FixMidiMixDialog.btn_Cancel.text=Скасувати +FixMidiMixDialog.btn_fix.text=Виправлення +FixMidiMixDialog.btn_skip.text=Ігнорувати +FixMidiMixDialog.cb_rememberMyChoice.text=Запам'ятати мій вибір під час цього сеансу +FixMidiMixDialog.lbl_firstLine.text=Виявлено проблеми з MIDI конфігурацією. Погоджуєтесь на їх виправлення? +FixMidiMixDialog.lbl_fixInstrumentTitle.text=Слід замінити такі інструменти, щоб вони відповідали поточній конфігурації вихідного синтезатора\: +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=Наступні канали барабанів слід перенаправити на канал 10\: +MIDI_CONFIGURATION_PROBLEMS=Проблеми з конфігурацією Midi +TransposeDisplayDialog.btn_Cancel.text=Скасувати +TransposeDisplayDialog.btn_Ok.text=Гаразд +TransposeDisplayDialog.cb_enableTransposition.text=Увімкнути транспонування клавіш під час відтворення +TransposeDisplayDialog.helpTextArea1.text=Змінювати ключ (транспозиції символів акордів) під час відтворення пісні. \ No newline at end of file diff --git a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_zh_CN.properties b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_zh_CN.properties index 41ab47b1ef..501d85367d 100644 --- a/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_zh_CN.properties +++ b/app/MusicControlActions/src/main/resources/org/jjazz/musiccontrolactions/Bundle_zh_CN.properties @@ -1,56 +1,56 @@ -AutoUpdateOFFtooltip=\u00e8\u0087\u00aa\u00e5\u008a\u00a8\u00e6\u009b\u00b4\u00e6\u0096\u00b0\u00e5\u0085\u00b3\u00e9\u0097\u00ad\u00ef\u00bc\u009a\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e7\u00bb\u0093\u00e6\u009e\u0084\u00e5\u008f\u0091\u00e7\u0094\u009f\u00e5\u008f\u0098\u00e5\u008c\u0096\u00ef\u00bc\u008c\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e9\u009f\u00b3\u00e4\u00b9\u0090\u00e4\u00b8\u008d\u00e5\u0086\u008d\u00e5\u00ae\u009e\u00e6\u0097\u00b6\u00e6\u009b\u00b4\u00e6\u0096\u00b0\u00e3\u0080\u0082 \u00e5\u0081\u009c\u00e6\u00ad\u00a2\u00e9\u009f\u00b3\u00e4\u00b9\u0090\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e4\u00bb\u00a5\u00e9\u0087\u008d\u00e6\u0096\u00b0\u00e6\u00bf\u0080\u00e6\u00b4\u00bb\u00e8\u0087\u00aa\u00e5\u008a\u00a8\u00e6\u009b\u00b4\u00e6\u0096\u00b0\u00e6\u00a8\u00a1\u00e5\u00bc\u008f\u00e3\u0080\u0082 -AutoUpdateONtooltip=\u00e8\u0087\u00aa\u00e5\u008a\u00a8\u00e6\u009b\u00b4\u00e6\u0096\u00b0\u00e5\u00bc\u0080\u00e5\u0090\u00af\u00ef\u00bc\u009a\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e9\u009f\u00b3\u00e4\u00b9\u0090\u00e9\u009a\u008f\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e5\u008f\u0098\u00e5\u008c\u0096\u00e5\u00ae\u009e\u00e6\u0097\u00b6\u00e6\u009b\u00b4\u00e6\u0096\u00b0\u00ef\u00bc\u0088\u00e7\u00bb\u0093\u00e6\u009e\u0084\u00e5\u008f\u0098\u00e5\u008c\u0096\u00e9\u0099\u00a4\u00e5\u00a4\u0096\u00ef\u00bc\u0089 -CTL_Click=\u00e8\u008a\u0082\u00e6\u008b\u008d\u00e5\u0099\u00a8 -CTL_ClickTooltip=\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e6\u0097\u00b6\u00e6\u0089\u0093\u00e5\u00bc\u0080\u00e8\u008a\u0082\u00e6\u008b\u008d\u00e5\u0099\u00a8 -CTL_ControlToolbarAction=\u00e9\u009f\u00b3\u00e4\u00b9\u0090\u00e6\u008e\u00a7\u00e5\u0088\u00b6\u00e5\u00b7\u00a5\u00e5\u0085\u00b7\u00e6\u00a0\u008f -CTL_CurrentPlaybackTransposition=\u00e5\u00bd\u0093\u00e5\u0089\u008d\u00e5\u009b\u009e\u00e6\u0094\u00be\u00e8\u00bd\u00ac\u00e6\u008d\u00a2\u00e9\u0094\u00ae\u00ef\u00bc\u009a {0} -CTL_DecreaseTempo=\u00e9\u0099\u008d\u00e4\u00bd\u008e\u00e9\u0080\u009f\u00e5\u00ba\u00a6 -CTL_IncreaseTempo=\u00e5\u00a2\u009e\u00e5\u008a\u00a0\u00e9\u0080\u009f\u00e5\u00ba\u00a6 -CTL_Loop=\u00e5\u00be\u00aa\u00e7\u008e\u00af -CTL_LoopTooltip=\u00e5\u00be\u00aa\u00e7\u008e\u00af\u00e5\u009b\u009e\u00e6\u0094\u00be(L) -CTL_Pause=\u00e6\u009a\u0082\u00e5\u0081\u009c -CTL_PauseTooltip=\u00e6\u009a\u0082\u00e5\u0081\u009c\u00e6\u0092\u00ad\u00e6\u0094\u00be(\u00e7\u00a9\u00ba\u00e6\u00a0\u00bc) -CTL_Play=\u00e6\u0092\u00ad\u00e6\u0094\u00be -CTL_PlayFromHere=\u00e4\u00bb\u008e\u00e8\u00bf\u0099\u00e9\u0087\u008c\u00e5\u00bc\u0080\u00e5\u00a7\u008b -CTL_PlaySelection=\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e9\u0080\u0089\u00e6\u008b\u00a9 -CTL_PlayToolTip=\u00e5\u00bc\u0080\u00e5\u00a7\u008b/\u00e6\u009a\u0082\u00e5\u0081\u009c\u00e6\u0092\u00ad\u00e6\u0094\u00be(\u00e7\u00a9\u00ba\u00e6\u00a0\u00bc) -CTL_PlaybackToNextSongPart=\u00e4\u00b8\u008b\u00e4\u00b8\u0080\u00e6\u009b\u00b2 -CTL_PlaybackToNextSongPartTooltip=\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e4\u00b8\u008b\u00e4\u00b8\u0080\u00e9\u00a6\u0096\u00e6\u00ad\u008c\u00e7\u0089\u0087\u00e6\u00ae\u00b5 (F2) -CTL_PlaybackToPreviousSongPart=\u00e4\u00b8\u008a\u00e4\u00b8\u0080\u00e9\u00a6\u0096\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e7\u0089\u0087\u00e6\u00ae\u00b5 -CTL_PlaybackToPreviousSongPartTooltip=\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e4\u00b8\u008a\u00e4\u00b8\u0080\u00e9\u00a6\u0096\u00e6\u009b\u00b2\u00e7\u009b\u00ae\u00e9\u0083\u00a8\u00e5\u0088\u0086 (F1) +AutoUpdateOFFtooltip=自动更新关闭:歌曲结构发生变化,播放音乐不再实时更新。 停止音乐播放以重新激活自动更新模式。 +AutoUpdateONtooltip=自动更新开启:播放音乐随歌曲变化实时更新(结构变化除外) +CTL_Click=节拍器 +CTL_ClickTooltip=播放时打开节拍器 +CTL_ControlToolbarAction=音乐控制工具栏 +CTL_CurrentDisplayTransposition=当前回放转换键: {0} +CTL_DecreaseTempo=降低速度 +CTL_IncreaseTempo=增加速度 +CTL_Loop=循环 +CTL_LoopTooltip=循环回放(L) +CTL_Pause=暂停 +CTL_PauseTooltip=暂停播放(空格) +CTL_Play=播放 +CTL_PlayFromHere=从这里开始 +CTL_PlaySelection=播放选择 +CTL_PlayToolTip=开始/暂停播放(空格) +CTL_PlaybackToNextSongPart=下一曲 +CTL_PlaybackToNextSongPartTooltip=播放下一首歌片段 (F2) +CTL_PlaybackToPreviousSongPart=上一首歌曲片段 +CTL_PlaybackToPreviousSongPartTooltip=播放上一首曲目部分 (F1) CTL_RestartPlayback=Restart playback (F3) -CTL_Precount=\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6 -CTL_Precount1Bar=\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b61\u00e5\u00b0\u008f\u00e8\u008a\u0082-\u00e4\u00bd\u00bf\u00e7\u0094\u00a8shift-click\u00e6\u009b\u00b4\u00e6\u0094\u00b9\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6\u00e6\u00a8\u00a1\u00e5\u00bc\u008f -CTL_Precount2Bar=\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b62\u00e5\u00b0\u008f\u00e8\u008a\u0082-\u00e4\u00bd\u00bf\u00e7\u0094\u00a8shift-click\u00e6\u009b\u00b4\u00e6\u0094\u00b9\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6\u00e6\u00a8\u00a1\u00e5\u00bc\u008f -CTL_PrecountBarAuto=\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6\u00e8\u0087\u00aa\u00e5\u008a\u00a8\u00e6\u00a8\u00a1\u00e5\u00bc\u008f-\u00e4\u00bd\u00bf\u00e7\u0094\u00a8shift-click\u00e6\u009b\u00b4\u00e6\u0094\u00b9\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6\u00e6\u00a8\u00a1\u00e5\u00bc\u008f -CTL_SetActive=\u00e5\u0088\u0087\u00e6\u008d\u00a2\u00e6\u00bf\u0080\u00e6\u00b4\u00bb (\u00e5\u00bc\u0080\u00e5\u0090\u00af/\u00e5\u0085\u00b3\u00e9\u0097\u00ad) -CTL_SetActivePopupAction=\u00e5\u0088\u0087\u00e6\u008d\u00a2\u00e6\u00bf\u0080\u00e6\u00b4\u00bb (\u00e5\u00bc\u0080\u00e5\u0090\u00af/\u00e5\u0085\u00b3\u00e9\u0097\u00ad) -CTL_SetActiveToolTip=\u00e8\u00ae\u00be\u00e7\u00bd\u00ae\u00e5\u0090\u00af\u00e7\u0094\u00a8 Midi \u00e6\u00b6\u0088\u00e6\u0081\u00af\u00e7\u009a\u0084\u00e5\u0094\u00af\u00e4\u00b8\u0080\u00e6\u00b4\u00bb\u00e5\u008a\u00a8\u00e6\u00ad\u008c\u00e6\u009b\u00b2 [O] -CTL_ShowPlaybackPoint=\u00e6\u0098\u00be\u00e7\u00a4\u00ba\u00e5\u009b\u009e\u00e6\u0094\u00be\u00e7\u0082\u00b9 -CTL_ShowPlaybackTooltip=\u00e7\u00aa\u0081\u00e5\u0087\u00ba\u00e6\u0098\u00be\u00e7\u00a4\u00ba\u00e6\u00ad\u00a3\u00e5\u009c\u00a8\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e7\u009a\u0084\u00e5\u00b0\u008f\u00e8\u008a\u0082 -CTL_Stop=\u00e5\u0081\u009c\u00e6\u00ad\u00a2 -CTL_StopTooltip=\u00e5\u0081\u009c\u00e6\u00ad\u00a2\u00e6\u0092\u00ad\u00e6\u0094\u00be (Shift+\u00e7\u00a9\u00ba\u00e6\u00a0\u00bc) -CTL_TransposePlaybackKey=\u00e5\u009b\u009e\u00e6\u0094\u00be\u00e8\u00bd\u00ac\u00e6\u008d\u00a2\u00e9\u0094\u00ae -ControlToolbarPanel.fbtn_Active.toolTipText=\u00e5\u00a6\u0082\u00e6\u009e\u009c\u00e6\u0089\u0093\u00e5\u00bc\u0080\u00ef\u00bc\u008c\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e5\u00a4\u0084\u00e4\u00ba\u008e\u00e6\u00b4\u00bb\u00e5\u008a\u00a8\u00e7\u008a\u00b6\u00e6\u0080\u0081\u00ef\u00bc\u008cMidi\u00e6\u00b6\u0088\u00e6\u0081\u00af\u00e8\u00a2\u00ab\u00e5\u0090\u00af\u00e7\u0094\u00a8\u00e3\u0080\u0082\u00e4\u00b8\u0080\u00e6\u00ac\u00a1\u00e5\u008f\u00aa\u00e8\u0083\u00bd\u00e6\u00bf\u0080\u00e6\u00b4\u00bb\u00e4\u00b8\u0080\u00e9\u00a6\u0096\u00e6\u00ad\u008c\u00e3\u0080\u0082 -ControlToolbarPanel.fbtn_Click.toolTipText=\u00e8\u008a\u0082\u00e6\u008b\u008d\u00e5\u0099\u00a8 -ControlToolbarPanel.fbtn_Pause.toolTipText=\u00e6\u009a\u0082\u00e5\u0081\u009c\u00e6\u0092\u00ad\u00e6\u0094\u00be -ControlToolbarPanel.fbtn_Precount.toolTipText=\u00e5\u00bc\u0080\u00e5\u00a7\u008b\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e5\u0089\u008d\u00e5\u0080\u0092\u00e8\u00ae\u00a1\u00e6\u0097\u00b6 -ControlToolbarPanel.posViewer.toolTipText=\u00e5\u00bd\u0093\u00e5\u0089\u008d\u00e4\u00bd\u008d\u00e7\u00bd\u00ae(\u00e5\u00b0\u008f\u00e8\u008a\u0082\:\u00e8\u008a\u0082\u00e6\u008b\u008d) -ControlToolbarPanel.spn_Tempo.toolTipText=\u00e5\u009b\u009e\u00e6\u0094\u00be\u00e9\u0080\u009f\u00e5\u00ba\u00a6\u00e3\u0080\u0082\u00e4\u00bd\u00bf\u00e7\u0094\u00a8J\u00e6\u0088\u0096-\u00e9\u0099\u008d\u00e4\u00bd\u008e\u00e9\u0080\u009f\u00e5\u00ba\u00a6\u00ef\u00bc\u008cK\u00e6\u0088\u0096+\u00e5\u00a2\u009e\u00e5\u008a\u00a0\u00e9\u0080\u009f\u00e5\u00ba\u00a6\u00e3\u0080\u0082 -ERR_BadSelection=\u00e7\u00ac\u00ac\u00e4\u00b8\u0080\u00e4\u00b8\u00aa\u00e5\u0092\u008c\u00e6\u009c\u0080\u00e5\u0090\u008e\u00e4\u00b8\u0080\u00e4\u00b8\u00aa\u00e9\u0080\u0089\u00e5\u00ae\u009a\u00e7\u009a\u0084\u00e5\u00b0\u008f\u00e8\u008a\u0082\u00e4\u00b8\u008e\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e9\u0083\u00a8\u00e5\u0088\u0086\u00e4\u00b8\u008d\u00e5\u008c\u00b9\u00e9\u0085\u008d\u00e3\u0080\u0082 -ERR_CantPlayFromHere=\u00e6\u0097\u00a0\u00e6\u00b3\u0095\u00e4\u00bb\u008e\u00e6\u00ad\u00a4\u00e5\u00a4\u0084\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e3\u0080\u0082\u00e8\u00af\u00b7\u00e5\u009c\u00a8\u00e5\u0092\u008c\u00e5\u00bc\u00a6\u00e5\u00bc\u0095\u00e5\u00af\u00bc\u00e8\u00a1\u00a8\u00e7\u00bc\u0096\u00e8\u00be\u0091\u00e5\u0099\u00a8\u00e4\u00b8\u00ad\u00e7\u009a\u0084\u00e6\u009c\u0089\u00e6\u0095\u0088\u00e6\u00a0\u008f\u00e4\u00b8\u008a\u00e9\u0080\u0089\u00e6\u008b\u00a9\u00e7\u00ac\u00ac\u00e4\u00b8\u0080\u00e4\u00b8\u00aa\u00ef\u00bc\u008c\u00e6\u0088\u0096\u00e5\u009c\u00a8\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e7\u00bb\u0093\u00e6\u009e\u0084\u00e7\u00bc\u0096\u00e8\u00be\u0091\u00e5\u0099\u00a8\u00e4\u00b8\u00ad\u00e9\u0080\u0089\u00e6\u008b\u00a9\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e9\u0083\u00a8\u00e5\u0088\u0086\u00e3\u0080\u0082 -ERR_InvalidPlayableSelection=\u00e6\u0097\u00a0\u00e6\u00b3\u0095\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e6\u00ad\u00a4\u00e9\u0080\u0089\u00e6\u008b\u00a9\u00ef\u00bc\u009a {0} -ERR_NeedContiguousSelection=\u00e9\u0080\u0089\u00e5\u00ae\u009a\u00e7\u009a\u0084\u00e5\u00b0\u008f\u00e8\u008a\u0082/\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e9\u0083\u00a8\u00e5\u0088\u0086\u00e9\u009c\u0080\u00e8\u00a6\u0081\u00e8\u00bf\u009e\u00e7\u00bb\u00ad -ERR_NotActive=\u00e6\u0097\u00a0\u00e6\u00b3\u0095\u00e4\u00bb\u008e\u00e8\u00bf\u0099\u00e9\u0087\u008c\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00ef\u00bc\u009a\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e6\u009c\u00aa\u00e6\u00bf\u0080\u00e6\u00b4\u00bb -FixMidiMixDialog.btn_Cancel.text=\u00e5\u008f\u0096\u00e6\u00b6\u0088 -FixMidiMixDialog.btn_fix.text=\u00e4\u00bf\u00ae\u00e5\u00a4\u008d -FixMidiMixDialog.btn_skip.text=\u00e5\u00bf\u00bd\u00e7\u0095\u00a5 -FixMidiMixDialog.cb_rememberMyChoice.text=\u00e8\u00ae\u00b0\u00e4\u00bd\u008f\u00e6\u0088\u0091\u00e7\u009a\u0084\u00e9\u0080\u0089\u00e6\u008b\u00a9 -FixMidiMixDialog.lbl_firstLine.text=\u00e6\u00a3\u0080\u00e6\u00b5\u008b\u00e5\u0088\u00b0\u00e6\u00bd\u009c\u00e5\u009c\u00a8\u00e7\u009a\u0084 Midi \u00e9\u0085\u008d\u00e7\u00bd\u00ae\u00e9\u0097\u00ae\u00e9\u00a2\u0098\u00e3\u0080\u0082\u00e7\u00a1\u00ae\u00e5\u00ae\u009a\u00e4\u00bf\u00ae\u00e5\u00a4\u008d\u00ef\u00bc\u009f -FixMidiMixDialog.lbl_fixInstrumentTitle.text=\u00e5\u00ba\u0094\u00e6\u009b\u00b4\u00e6\u008d\u00a2\u00e4\u00bb\u00a5\u00e4\u00b8\u008b\u00e9\u009f\u00b3\u00e8\u0089\u00b2\u00ef\u00bc\u008c\u00e4\u00bb\u00a5\u00e9\u0080\u0082\u00e5\u00ba\u0094\u00e5\u00bd\u0093\u00e5\u0089\u008d\u00e7\u009a\u0084\u00e8\u00be\u0093\u00e5\u0087\u00ba\u00e5\u0090\u0088\u00e6\u0088\u0090\u00e5\u0099\u00a8\u00e9\u0085\u008d\u00e7\u00bd\u00ae\: -FixMidiMixDialog.lbl_reroutedChannelsTitle.text=\u00e4\u00bb\u00a5\u00e4\u00b8\u008b\u00e9\u00bc\u0093\u00e9\u0080\u009a\u00e9\u0081\u0093\u00e5\u00ba\u0094\u00e9\u0087\u008d\u00e6\u0096\u00b0\u00e9\u0093\u00be\u00e6\u008e\u00a5\u00e8\u0087\u00b3\u00e9\u0080\u009a\u00e9\u0081\u009310\: -MIDI_CONFIGURATION_PROBLEMS=Midi \u00e9\u0085\u008d\u00e7\u00bd\u00ae\u00e9\u0097\u00ae\u00e9\u00a2\u0098 -TransposeDisplayDialog.btn_Cancel.text=\u00e5\u008f\u0096\u00e6\u00b6\u0088 -TransposeDisplayDialog.btn_Ok.text=\u00e7\u00a1\u00ae\u00e5\u00ae\u009a -TransposeDisplayDialog.helpTextArea1.text=\u00e6\u0092\u00ad\u00e6\u0094\u00be\u00e6\u00ad\u008c\u00e6\u009b\u00b2\u00e6\u0097\u00b6\u00e6\u009b\u00b4\u00e6\u0094\u00b9\u00e8\u00b0\u0083\u00ef\u00bc\u0088\u00e7\u00a7\u00bb\u00e8\u00b0\u0083\u00e5\u0092\u008c\u00e5\u00bc\u00a6\u00e7\u00ac\u00a6\u00e5\u008f\u00b7\u00ef\u00bc\u0089\u00e3\u0080\u0082 -TransposeDisplayDialog.cb_enableTransposition.text=\u00e5\u0090\u00af\u00e7\u0094\u00a8\u00e5\u009b\u009e\u00e6\u0094\u00be\u00e5\u0088\u0087\u00e6\u008d\u00a2\u00e9\u0094\u00ae +CTL_Precount=倒计时 +CTL_Precount1Bar=倒计时1小节-使用shift-click更改倒计时模式 +CTL_Precount2Bar=倒计时2小节-使用shift-click更改倒计时模式 +CTL_PrecountBarAuto=倒计时自动模式-使用shift-click更改倒计时模式 +CTL_SetActive=切换激活 (开启/关闭) +CTL_SetActivePopupAction=切换激活 (开启/关闭) +CTL_SetActiveToolTip=设置启用 Midi 消息的唯一活动歌曲 [O] +CTL_ShowPlaybackPoint=显示回放点 +CTL_ShowPlaybackTooltip=突出显示正在播放的小节 +CTL_Stop=停止 +CTL_StopTooltip=停止播放 (Shift+空格) +CTL_TransposeDisplay=回放转换键 +ControlToolbarPanel.fbtn_Active.toolTipText=如果打开,歌曲处于活动状态,Midi消息被启用。一次只能激活一首歌。 +ControlToolbarPanel.fbtn_Click.toolTipText=节拍器 +ControlToolbarPanel.fbtn_Pause.toolTipText=暂停播放 +ControlToolbarPanel.fbtn_Precount.toolTipText=开始播放前倒计时 +ControlToolbarPanel.posViewer.toolTipText=当前位置(小节\:节拍) +ControlToolbarPanel.spn_Tempo.toolTipText=回放速度。使用J或-降低速度,K或+增加速度。 +ERR_BadSelection=第一个和最后一个选定的小节与歌曲部分不匹配。 +ERR_CantPlayFromHere=无法从此处播放。请在和弦引导表编辑器中的有效栏上选择第一个,或在歌曲结构编辑器中选择歌曲部分。 +ERR_InvalidPlayableSelection=无法播放此选择: {0} +ERR_NeedContiguousSelection=选定的小节/歌曲部分需要连续 +ERR_NotActive=无法从这里播放:歌曲未激活 +FixMidiMixDialog.btn_Cancel.text=取消 +FixMidiMixDialog.btn_fix.text=修复 +FixMidiMixDialog.btn_skip.text=忽略 +FixMidiMixDialog.cb_rememberMyChoice.text=记住我的选择 +FixMidiMixDialog.lbl_firstLine.text=检测到潜在的 Midi 配置问题。确定修复? +FixMidiMixDialog.lbl_fixInstrumentTitle.text=应更换以下音色,以适应当前的输出合成器配置\: +FixMidiMixDialog.lbl_reroutedChannelsTitle.text=以下鼓通道应重新链接至通道10\: +MIDI_CONFIGURATION_PROBLEMS=Midi 配置问题 +TransposeDisplayDialog.btn_Cancel.text=取消 +TransposeDisplayDialog.btn_Ok.text=确定 +TransposeDisplayDialog.cb_enableTransposition.text=启用回放切换键 +TransposeDisplayDialog.helpTextArea1.text=播放歌曲时更改调(移调和弦符号)。 \ No newline at end of file From 7e89b65226f33bc3eb725801ea5ecb5777dc5172 Mon Sep 17 00:00:00 2001 From: Juan Ottonello Date: Mon, 6 Oct 2025 17:54:14 +1300 Subject: [PATCH 5/7] Remove lost comment added as part of #534 --- core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java b/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java index d377704e1d..8e8fef2003 100644 --- a/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java +++ b/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java @@ -136,7 +136,7 @@ public class MidiMix implements SgsChangeListener, PropertyChangeListener, Vetoa /** * oldValue=InstumentMix, newValue=transposition value. */ - public static final String PROP_INSTRUMENT_TRANSPOSITION = "InstrumentTransposition"; // ? + public static final String PROP_INSTRUMENT_TRANSPOSITION = "InstrumentTransposition"; /** * oldValue=InstumentMix, newValue=velocity shift value. */ From 3e3338c9f91ed649208e3da10fc68982353292c3 Mon Sep 17 00:00:00 2001 From: Juan Ottonello Date: Tue, 7 Oct 2025 07:10:24 +1300 Subject: [PATCH 6/7] Small cleanup for #534 --- .../java/org/jjazz/chordleadsheet/api/ClsUtilities.java | 3 --- .../main/java/org/jjazz/midi/api/InstrumentSettings.java | 2 +- .../api/playbacksession/UpdateProviderSongSession.java | 7 +------ 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/core/ChordLeadSheet/src/main/java/org/jjazz/chordleadsheet/api/ClsUtilities.java b/core/ChordLeadSheet/src/main/java/org/jjazz/chordleadsheet/api/ClsUtilities.java index d550f2cad5..acc89237cc 100644 --- a/core/ChordLeadSheet/src/main/java/org/jjazz/chordleadsheet/api/ClsUtilities.java +++ b/core/ChordLeadSheet/src/main/java/org/jjazz/chordleadsheet/api/ClsUtilities.java @@ -40,9 +40,6 @@ public class ClsUtilities * @param cls * @param transposition */ - /* TODO #534 Check if used bu other code than the playback transposition. - * It may be reused by passing transposition to all CLI_ChordSymbol. - * Just not called frrom SongSequenceBuilder */ static public void transpose(ChordLeadSheet cls, int transposition) { if (transposition == 0) diff --git a/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java b/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java index 329884805d..b14039a52e 100644 --- a/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java +++ b/core/Midi/src/main/java/org/jjazz/midi/api/InstrumentSettings.java @@ -47,7 +47,7 @@ public class InstrumentSettings implements Serializable { - public final static String PROPERTY_TRANSPOSITION = "Transposition"; // ? + public final static String PROPERTY_TRANSPOSITION = "Transposition"; public final static String PROPERTY_VELOCITY_SHIFT = "VelocityShift"; public final static String PROPERTY_VOLUME = "Volume"; public final static String PROPERTY_PANORAMIC = "Panoramic"; diff --git a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java index 7e083b8b86..f41f8fe924 100644 --- a/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java +++ b/core/MusicControl/src/main/java/org/jjazz/musiccontrol/api/playbacksession/UpdateProviderSongSession.java @@ -63,7 +63,7 @@ * - chord symbol changes (add/remove/change/moveAll)
* - rhythm parameter value changes
* - existing user phrase content changes (but not for add/remove user phrase events)
- * - MidiMix instrument velocity changes, plus drum keymap and drum rerouting changes
+ * - MidiMix instrument transposition/velocity changes, plus drum keymap and drum rerouting changes
*

* If change can't be handled as an update (eg a song part tempo factor change or a click setting), session is marked dirty (ie needs regeneration). If session * is dirty, editors can still show the playback point using the control track but the "dirty" changes are not heard. @@ -405,11 +405,6 @@ public void propertyChange(PropertyChangeEvent e) { doUpdate = true; } - case PlaybackSettings.PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION -> - { - // TODO #534 This should probably not be sent here in the first place, stop it up the chain. - // NO-OP - } // // Song property events From 43c7468b633a8629ec633309817d012c3325c119 Mon Sep 17 00:00:00 2001 From: Juan Ottonello Date: Wed, 8 Oct 2025 12:57:40 +1300 Subject: [PATCH 7/7] Transposed the CLS for #534 --- .../itemrenderer/api/IR_Copiable.java | 2 - app/CL_EditorImpl/pom.xml | 13 +- .../itemrenderer/IR_ChordSymbol.java | 53 +++++- app/ChordInspector/pom.xml | 19 +- .../java/org/jjazz/midimix/api/MidiMix.java | 3 +- core/MusicControl/pom.xml | 180 +++++++++--------- 6 files changed, 161 insertions(+), 109 deletions(-) diff --git a/app/CL_Editor/src/main/java/org/jjazz/cl_editor/itemrenderer/api/IR_Copiable.java b/app/CL_Editor/src/main/java/org/jjazz/cl_editor/itemrenderer/api/IR_Copiable.java index e0e85676a7..2735a0b276 100644 --- a/app/CL_Editor/src/main/java/org/jjazz/cl_editor/itemrenderer/api/IR_Copiable.java +++ b/app/CL_Editor/src/main/java/org/jjazz/cl_editor/itemrenderer/api/IR_Copiable.java @@ -32,7 +32,6 @@ */ public interface IR_Copiable { - /** * If true, ItemRenderer should represent the copy mode, possibly using the provided CopyIndicator. * @@ -45,7 +44,6 @@ public interface IR_Copiable */ static public class CopyIndicator { - private static final CrossShape crossShape = new CrossShape(3, 2); static public void drawCopyIndicator(Graphics2D g2) diff --git a/app/CL_EditorImpl/pom.xml b/app/CL_EditorImpl/pom.xml index 9dc5e4490f..3befe1a84d 100644 --- a/app/CL_EditorImpl/pom.xml +++ b/app/CL_EditorImpl/pom.xml @@ -7,10 +7,12 @@ 4.1.3-SNAPSHOT ../../pom.xml + org.jjazzlab.app cl_editorimpl CL_EditorImpl nbm + @@ -20,6 +22,7 @@ + org.jjazzlab.core @@ -105,7 +108,15 @@ org.jjazzlab.core utilities ${project.version} - + + + + org.jjazzlab.core + musiccontrol + ${project.version} + + org.netbeans.api org-openide-util-lookup diff --git a/app/CL_EditorImpl/src/main/java/org/jjazz/cl_editorimpl/itemrenderer/IR_ChordSymbol.java b/app/CL_EditorImpl/src/main/java/org/jjazz/cl_editorimpl/itemrenderer/IR_ChordSymbol.java index 1d66d017ce..c093dd03dd 100644 --- a/app/CL_EditorImpl/src/main/java/org/jjazz/cl_editorimpl/itemrenderer/IR_ChordSymbol.java +++ b/app/CL_EditorImpl/src/main/java/org/jjazz/cl_editorimpl/itemrenderer/IR_ChordSymbol.java @@ -29,6 +29,7 @@ import java.awt.font.TextAttribute; import java.awt.font.TextLayout; import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.text.AttributedString; import java.util.Objects; import java.util.logging.Level; @@ -49,6 +50,7 @@ import org.jjazz.cl_editor.itemrenderer.api.IR_Type; import org.jjazz.cl_editor.itemrenderer.api.ItemRenderer; import org.jjazz.cl_editor.itemrenderer.api.ItemRendererSettings; +import org.jjazz.musiccontrol.api.PlaybackSettings; import org.jjazz.uiutilities.api.TextLayoutUtils; import org.jjazz.utilities.api.ResUtil; @@ -56,12 +58,14 @@ * An ItemRenderer for ChordSymbols. *

*/ -public class IR_ChordSymbol extends ItemRenderer implements IR_Copiable +public class IR_ChordSymbol extends ItemRenderer implements IR_Copiable, PropertyChangeListener { - private final static int OPTION_LINE_V_PADDING = 1; // Additional space for the option line private final static int OPTION_LINE_THICKNESS = 1; // Additional space for the option line + private static final Logger LOGGER = Logger.getLogger(IR_ChordSymbol.class.getSimpleName()); + private AttributedString attChordString; + private int transposition; private boolean copyMode; private final IR_ChordSymbolSettings settings; private int zoomFactor = 50; @@ -76,7 +80,7 @@ public class IR_ChordSymbol extends ItemRenderer implements IR_Copiable private ChordRenderingInfo cri; private Timer timer; private Color optionLineColor; - private static final Logger LOGGER = Logger.getLogger(IR_ChordSymbol.class.getSimpleName()); + private final PlaybackSettings playbackSettings; @SuppressWarnings("LeakingThisInConstructor") public IR_ChordSymbol(CLI_ChordSymbol item, ItemRendererSettings irSettings) @@ -84,24 +88,54 @@ public IR_ChordSymbol(CLI_ChordSymbol item, ItemRendererSettings irSettings) super(item, IR_Type.ChordSymbol); LOGGER.log(Level.FINE, "IR_ChordSymbol() item={0}", item); - // Apply settings and listen to their changes settings = irSettings.getIR_ChordSymbolSettings(); settings.addPropertyChangeListener(this); setFont(settings.getFont()); + // Listen to transposition option changes + playbackSettings = PlaybackSettings.getInstance(); + playbackSettings.addPropertyChangeListener(PlaybackSettings.PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, this); + setTransposition(playbackSettings.getChordSymbolsDisplayTransposition()); // Listen to color change getModel().getClientProperties().addPropertyChangeListener(this); updateForegroundColor(); - modelChanged(); + modelChanged(); // Shown chord changes + } + /** + * Sets a transposition to be applied before rendering the chord. + * + * @param newTransposition + */ + private void setTransposition(int newTransposition) + { + transposition = newTransposition; + var chord = getModel().getData(); + if (chord != null) + { + ExtChordSymbol modelChord = (ExtChordSymbol) chord; + ExtChordSymbol newChord = modelChord.getTransposedChordSymbol(transposition, null); + updateRendering(newChord); + } } @Override public void modelChanged() + { + var chord = getModel().getData(); + if (chord != null) + { + ExtChordSymbol modelChord = (ExtChordSymbol) getModel().getData(); + ExtChordSymbol newChord = modelChord.getTransposedChordSymbol(transposition, null); + updateRendering(newChord); + } + } + + private void updateRendering(ExtChordSymbol newChord) { // Save previous state ExtChordSymbol oldEcs = ecs; @@ -109,9 +143,7 @@ public void modelChanged() String oldChordSymbolString = chordSymbolString; ChordSymbol oldAltChordSymbol = altChordSymbol; - - // Update our state - ecs = (ExtChordSymbol) getModel().getData(); + ecs = newChord; cri = ecs.getRenderingInfo(); chordSymbolString = ecs.getOriginalName(); altChordSymbol = ecs.getAlternateChordSymbol(); @@ -262,6 +294,7 @@ public void cleanup() super.cleanup(); getModel().getClientProperties().removePropertyChangeListener(this); settings.removePropertyChangeListener(this); + playbackSettings.removePropertyChangeListener(PlaybackSettings.PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION, this); } private void updateToolTipText() @@ -451,6 +484,9 @@ public void propertyChange(PropertyChangeEvent e) { updateForegroundColor(); } + } else if (PlaybackSettings.PROP_CHORD_SYMBOLS_DISPLAY_TRANSPOSITION.equals(e.getPropertyName())) + { + setTransposition((int) e.getNewValue()); } } @@ -484,5 +520,4 @@ private void updateForegroundColor() optionLineColor = c; setForeground(c); } - } diff --git a/app/ChordInspector/pom.xml b/app/ChordInspector/pom.xml index 6134fa3689..2a009af2d4 100644 --- a/app/ChordInspector/pom.xml +++ b/app/ChordInspector/pom.xml @@ -7,10 +7,12 @@ 4.1.3-SNAPSHOT ../../pom.xml + org.jjazzlab.app chordinspector ChordInspector nbm + @@ -25,7 +27,8 @@ - + + org.jjazzlab.app analytics @@ -67,6 +70,8 @@ ${project.version} + org.jjazzlab.core musiccontrol ${project.version} @@ -96,6 +101,12 @@ utilities ${project.version} + + org.jjazzlab.core + guava + ${project.version} + + org.netbeans.api org-openide-awt @@ -121,17 +132,13 @@ org-openide-windows ${netbeans.version} - - org.jjazzlab.core - guava - ${project.version} - org.netbeans.api org-netbeans-modules-settings ${netbeans.version} + UTF-8 diff --git a/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java b/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java index 8e8fef2003..424fc07683 100644 --- a/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java +++ b/core/MidiMix/src/main/java/org/jjazz/midimix/api/MidiMix.java @@ -108,7 +108,6 @@ * also fired. *

*/ - public class MidiMix implements SgsChangeListener, PropertyChangeListener, VetoableChangeListener, Serializable { @@ -1081,7 +1080,7 @@ public boolean needSave() * * @param f * @param isCopy - * @return False if a problem occured + * @return False if a problem occurred */ public boolean saveToFileNotify(File f, boolean isCopy) { diff --git a/core/MusicControl/pom.xml b/core/MusicControl/pom.xml index 973c1fdb99..4a239b6260 100644 --- a/core/MusicControl/pom.xml +++ b/core/MusicControl/pom.xml @@ -1,4 +1,3 @@ - 4.0.0 @@ -8,10 +7,12 @@ 4.1.3-SNAPSHOT ../../pom.xml + org.jjazzlab.core musiccontrol MusicControl nbm + @@ -29,100 +30,101 @@ - - + + + org.jjazzlab.core guava ${project.version} - - - org.jjazzlab.core - harmony - ${project.version} - - - org.jjazzlab.core - chordleadsheet - ${project.version} - - - org.jjazzlab.core - midi - ${project.version} - - - org.jjazzlab.core - midimix - ${project.version} - - - org.jjazzlab.core - outputsynth - ${project.version} - - - org.jjazzlab.core - phrase - ${project.version} - - - org.jjazzlab.core - rhythm - ${project.version} - - - org.jjazzlab.core - rhythmmusicgeneration - ${project.version} - - - org.jjazzlab.core - song - ${project.version} - - - org.jjazzlab.core - songcontext - ${project.version} - - - org.jjazzlab.core - songstructure - ${project.version} - - - org.jjazzlab.core - testplayerservice - ${project.version} - - - org.jjazzlab.core - utilities - ${project.version} - - - org.netbeans.api - org-openide-awt - ${netbeans.version} - - - org.netbeans.api - org-openide-dialogs - ${netbeans.version} - - - org.netbeans.api - org-openide-util - ${netbeans.version} - - - org.netbeans.api - org-openide-util-lookup - ${netbeans.version} + + + org.jjazzlab.core + harmony + ${project.version} + + + org.jjazzlab.core + chordleadsheet + ${project.version} + + + org.jjazzlab.core + midi + ${project.version} + + + org.jjazzlab.core + midimix + ${project.version} + + + org.jjazzlab.core + outputsynth + ${project.version} + + + org.jjazzlab.core + phrase + ${project.version} + + + org.jjazzlab.core + rhythm + ${project.version} + + + org.jjazzlab.core + rhythmmusicgeneration + ${project.version} + + + org.jjazzlab.core + song + ${project.version} + + + org.jjazzlab.core + songcontext + ${project.version} + + + org.jjazzlab.core + songstructure + ${project.version} + + + org.jjazzlab.core + testplayerservice + ${project.version} + + + org.jjazzlab.core + utilities + ${project.version} + + + org.netbeans.api + org-openide-awt + ${netbeans.version} + + + org.netbeans.api + org-openide-dialogs + ${netbeans.version} + + + org.netbeans.api + org-openide-util + ${netbeans.version} + + + org.netbeans.api + org-openide-util-lookup + ${netbeans.version} + UTF-8 -