Example #1
0
        /// <summary>
        /// Starts to build a waveform of the morse code of 'word'
        /// </summary>
        /// <param name="word">A string to convert to a morse code WAV</param>
        /// <param name="callback">A callback that is called when the WAV is ready</param>
        /// <returns></returns>
        public IAsyncResult StartBuildAsync(String word, AsyncCallback callback)
        {
            BuildWaverformAsync asyncResult = new BuildWaverformAsync(word, callback);
            WaitCallback        cb          = new WaitCallback(MakeWaveform);

            if (System.Threading.ThreadPool.QueueUserWorkItem(cb, asyncResult))
            {
            }
            return(asyncResult);
        }
Example #2
0
        private void MakeWaveform(object state)
        {
            BuildWaverformAsync buildInfo  = (BuildWaverformAsync)state;
            List <Int16[]>      soundsList = new List <short[]>();

            _toneGenerator.Update();
            foreach (Char c in buildInfo.Word)
            {
                String morse = MorseInfo.ToMorse(c);
                bool   first = true;
                foreach (Char d in morse)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        soundsList.Add(_toneGenerator.DotSpaceWaveform);
                    }
                    switch (d)
                    {
                    case '.':
                        soundsList.Add(_toneGenerator.DotToneWaveform);
                        break;

                    case '-':
                        soundsList.Add(_toneGenerator.DashToneWaveform);
                        break;

                    case ' ':
                        soundsList.Add(_toneGenerator.WordSpaceWaveform);
                        break;
                    }
                }

                soundsList.Add(_toneGenerator.LetterSpaceWaveform);

                // Farnsworth timing
                if (_toneGenerator.FarnsworthWPM < _toneGenerator.WPM)
                {
                    soundsList.Add(_toneGenerator.FarnsworthSpacingWaveform(c));
                }
            }
            soundsList.Add(_toneGenerator.WordSpaceWaveform);
            WaveStream stream = new WaveStream(buildInfo.Word, soundsList, ToneGenerator.SAMPLES_PER_SECOND, _toneGenerator.SamplesPerCycle);

            buildInfo.SetWaveform(stream);
            buildInfo.Callback();
            buildInfo.TriggerWaitHandle();
        }