/// <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); }
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(); }