Changeset 8400


Ignore:
Timestamp:
Sep 30, 2019, 11:04:37 AM (2 years ago)
Author:
kopal
Message:
  • MorseCode:

added time calculation in play-mode to show progress during playback
added frequency to settings

Location:
trunk/CrypPlugins/MorseCode
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/MorseCode/MorseCode.cs

    r8386 r8400  
    3939        const int DIT_DAH_BREAK = 100 / 2;
    4040        const int LETTER_BREAK = 300 / 2;
    41         const int WORD_BREAK = 700 / 2;
     41        const int WORD_BREAK = 700 / 2;       
    4242
    4343        /// <summary>
     
    175175                switch (_settings.Action)
    176176                {
    177                     case 0:
     177                    case MorseCodeSettings.ActionType.Encode:
    178178                        Encode();
    179179                        break;
    180                     case 1:
     180                    case MorseCodeSettings.ActionType.Decode:
    181181                        Decode();
    182182                        break;
    183                     case 2:
     183                    case MorseCodeSettings.ActionType.Play:
    184184                        Play();
    185185                        break;
     
    199199                {                   
    200200                    var dit = new Tone();
    201                     dit.GenerateSound(128, 600, DIT_TIME);
     201                    dit.GenerateSound(128, _settings.Frequency, DIT_TIME);
    202202
    203203                    var dah = new Tone();
    204                     dah.GenerateSound(128, 600, DAH_TIME);
     204                    dah.GenerateSound(128, _settings.Frequency, DAH_TIME);
    205205
    206206                    var dit_dah_break = new Tone();
     
    254254                    soundPlayer.Play();
    255255
     256                    DateTime start = DateTime.Now;
    256257                    while (DateTime.Now < end && !_stopped)
    257258                    {
     259                        double percentage = (double)(DateTime.Now.Ticks - start.Ticks) / (double)(end.Ticks - start.Ticks);
     260                        ProgressChanged(percentage, 1);
    258261                        Thread.Sleep(5);
    259262                    }
    260263                    soundPlayer.Stop();
     264                    ProgressChanged(1, 1);
    261265                }
    262266            }
  • trunk/CrypPlugins/MorseCode/MorseCodeSettings.cs

    r5787 r8400  
    1616
    1717using System.ComponentModel;
     18using System.Windows;
    1819using Cryptool.PluginBase;
    1920using Cryptool.PluginBase.Miscellaneous;
     
    2223{
    2324    public class MorseCodeSettings : ISettings
    24     {
     25    {       
     26        public enum ActionType
     27        {
     28            Encode = 0,
     29            Decode = 1,
     30            Play = 2
     31        }
     32        public event PropertyChangedEventHandler PropertyChanged;
     33
    2534        #region Private Variables
    2635
    27         private int _action;
    28 
     36        private ActionType _action;
     37        private int _frequency = 600;
     38       
    2939        #endregion
    3040
    3141        #region TaskPane Settings
    3242
    33         [TaskPane("ActionCaption", "ActionTooltip", null, 2, false, ControlType.ComboBox, new string[] { "Encode", "Decode", "Play" })]
    34         public int Action
     43        [TaskPane("ActionCaption", "ActionTooltip", null, 0, false, ControlType.ComboBox, new string[] { "Encode", "Decode", "Play" })]
     44        public ActionType Action
    3545        {
    3646            get { return _action; }
     
    3848            {
    3949                if (value != _action)
     50                {                   
     51                     _action = value;
     52                    OnPropertyChanged("Action");
     53                    Initialize(); // we call this to show and hide settings
     54                }
     55            }
     56        }
     57
     58        [TaskPane("FrequencyCaption", "FrequencyTooltip", null, 1, false, ControlType.NumericUpDown, ValidationType.RangeInteger, 300, 1200)]
     59        public int Frequency
     60        {
     61            get { return _frequency; }
     62            set
     63            {
     64                if (value != _frequency)
    4065                {
    41                     _action = value;
    42                     OnPropertyChanged("Action");
     66                    _frequency = value;
     67                    OnPropertyChanged("Frequency");
    4368                }
    4469            }
     
    4974        #region Events
    5075
    51         public event PropertyChangedEventHandler PropertyChanged;
    5276        public void Initialize()
    5377        {
    54            
     78            if (Action == ActionType.Play)
     79            {
     80                //only show frequency and volume settings for play-mode
     81                showSettingsElement("Frequency");
     82            }
     83            else
     84            {
     85                hideSettingsElement("Frequency");
     86            }
    5587        }
    5688
     
    6092        }
    6193
     94        /// <summary>
     95        /// This event is needed in order to render settings elements visible/invisible
     96        /// </summary>
     97        public event TaskPaneAttributeChangedHandler TaskPaneAttributeChanged;
     98
     99        private void showSettingsElement(string element)
     100        {
     101            if (TaskPaneAttributeChanged != null)
     102            {
     103                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer(element, Visibility.Visible)));
     104            }
     105        }
     106
     107        private void hideSettingsElement(string element)
     108        {
     109            if (TaskPaneAttributeChanged != null)
     110            {
     111                TaskPaneAttributeChanged(this, new TaskPaneAttributeChangedEventArgs(new TaskPaneAttribteContainer(element, Visibility.Collapsed)));
     112            }
     113        }
     114
    62115        #endregion
    63116    }
  • trunk/CrypPlugins/MorseCode/Properties/Resources.Designer.cs

    r8072 r8400  
    2020    // Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
    2121    // mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
    22     [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
     22    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
    2323    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
    2424    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
     
    9898       
    9999        /// <summary>
     100        ///   Sucht eine lokalisierte Zeichenfolge, die Frequency ähnelt.
     101        /// </summary>
     102        internal static string FrequencyCaption {
     103            get {
     104                return ResourceManager.GetString("FrequencyCaption", resourceCulture);
     105            }
     106        }
     107       
     108        /// <summary>
     109        ///   Sucht eine lokalisierte Zeichenfolge, die Sets the frequency of the morse tones. ähnelt.
     110        /// </summary>
     111        internal static string FrequencyTooltip {
     112            get {
     113                return ResourceManager.GetString("FrequencyTooltip", resourceCulture);
     114            }
     115        }
     116       
     117        /// <summary>
    100118        ///   Sucht eine lokalisierte Zeichenfolge, die Text input ähnelt.
    101119        /// </summary>
  • trunk/CrypPlugins/MorseCode/Properties/Resources.de.resx

    r5743 r8400  
    130130    <value>Encodieren</value>
    131131  </data>
     132  <data name="FrequencyCaption" xml:space="preserve">
     133    <value>Frequenz</value>
     134  </data>
     135  <data name="FrequencyTooltip" xml:space="preserve">
     136    <value>Legt die Frequenz der Morse-Töne fest.</value>
     137  </data>
    132138  <data name="InputTextCaption" xml:space="preserve">
    133139    <value>Eingabetext</value>
  • trunk/CrypPlugins/MorseCode/Properties/Resources.resx

    r6779 r8400  
    130130    <value>Encode</value>
    131131  </data>
     132  <data name="FrequencyCaption" xml:space="preserve">
     133    <value>Frequency</value>
     134  </data>
     135  <data name="FrequencyTooltip" xml:space="preserve">
     136    <value>Sets the frequency of the morse tones.</value>
     137  </data>
    132138  <data name="InputTextCaption" xml:space="preserve">
    133139    <value>Text input</value>
  • trunk/CrypPlugins/MorseCode/Properties/Resources.ru.resx

    r7480 r8400  
    130130    <value>шифровать</value>
    131131  </data>
     132  <data name="FrequencyCaption" xml:space="preserve">
     133    <value>частота</value>
     134  </data>
     135  <data name="FrequencyTooltip" xml:space="preserve">
     136    <value>Устанавливает частоту тонов Морзе.</value>
     137  </data>
    132138  <data name="InputTextCaption" xml:space="preserve">
    133139    <value>Ввод текста</value>
  • trunk/CrypPlugins/MorseCode/WaveGenerator.cs

    r8386 r8400  
    125125                    currentAmplitude = amplitude * ((double)percentageValue / 10);
    126126                }               
    127                 int value = (int)Math.Round(currentAmplitude * Math.Sin(2.0 * Math.PI * (((double)i) / 88200.0 * frequency)));
     127                int value = (int)Math.Sign(currentAmplitude * Math.Sin(2.0 * Math.PI * (((double)i) / 88200.0 * frequency)));
    128128                data[i] = (byte)(value);
    129129                data[i + 1] = (byte)(value);
Note: See TracChangeset for help on using the changeset viewer.