npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

morse-pro

v3.0.1

Published

Library for manipulating Morse code text and sound. Understands prosigns and Farnsworth speed. Can playback via web audio API, WAV files, vibration and light and can decode input from the microphone or audio files.

Downloads

82

Readme

Version Downloads License

Introduction

This Javascript (ES6) library is for manipulating Morse code text and sound. It is the library used in the tools on Morse Code World.

The library can:

  • Translate to and from text and Morse code (in the form of '-- --- .-. ... . / -.-. --- -.. .').
  • Understand Morse code prosigns.
  • Translate and play International, American (railroad), Arabic, Cyrillic, Cyrillic-Ukraine, Hebrew variants.
  • Generate downloadable RIFF WAVE ('.wav') files of Morse code at given frequency and speed.
  • Make use of the "Farnsworth speed" concept of extending the gaps between characters and words.
  • Generate in-browser sounds using the Web Audio API and falling back to other methods such as Flash for older browsers.
  • Take Morse code input from a web-based keyer or iambic keyer.
  • Decode to text given 'on' and 'off' timings and a fixed speed.
  • Adaptively decode to text, adjusting to the most likely speed and Farnsworth speed.
  • Decode from listening to the microphone or an audio file, adapting to the most prominent frequency.

It has been written using ES6 (ECMA Script 6).

Copyright and Licence

Two files (morse-pro-util-riffwave.js and morse-pro-util-datauri.js) are Public Domain. The others are:

Copyright: Stephen C Phillips, 2013-2017; Licensed under the EUPL v1.2, with extension of article 5 (compatibility clause) to any licence for distributing derivative works that have been produced by the normal use of the Work as a library.

Please note, this is different to the Expat (MIT) licence often found in Javascript projects and places restrictions and obligations on the user of the software.

The full text of the licence can be found in the LICENSE file in this folder. Comments below do not constitute the licence, they are just my comments on the licence.

The EUPL is an 'open source' licence: one of many options and one in the 'weak-copyleft' category. My intention in using EUPL v1.2 is primarily to ensure that any modifications to this library are made available to the community as source code. In contrast to many open source licences, the EUPL v1.2 licence makes it clear that modifications must be made available even in the case of the library being used as part of a web service and not distributed to the user, covering the 'Application Service Provider loophole' (in this case it is similar to the AGPL licence). My intention is also that this library can be used as a library by other pieces of software but that the EUPL v1.2 licence does not have to be applied to the software that links to it (this is similar to the LGPL licence). Of course, if you want to open source software that links to this library then you are free to do so.

So basically, if you use the library as-is in some piece of software then that's just fine (though an acknowledgement would be nice) and you can even keep the software closed-source should you wish to. If you modify the library and use it in some software that you provide to others, even if the library is not distributed to the users, then you must provide your modifications to the library back to the community so that everyone can benefit.

More information on the EUPL v1.2:

If you would like to access this software under a different licence then please get in touch and ask.

Documentation

Documentation on how to use the library is embedded in the source code and can be found in the esdoc folder.

Some diagrams:

Library Overview

Basics:

  • morse-pro.js: Morse class, providing basic functions to translate Morse code and manage translation dictionaries.
  • morse-pro-message.js: MorseMessage class, for conveniently translating to and from Morse code and dealing with errors.
  • dictionary: mappings from characters to dots and dashes and configuration of timing and translation

Audio:

  • morse-pro-cw.js: MorseCW class, to create the on/off timings needed by e.g. sound generators. Understands speed and Farnsworth speed concepts. Extends Morse class.
  • morse-pro-cw-wave.js: MorseCWWave class, to create sine-wave samples of standard CW Morse. Extends MorseCW.
  • morse-pro-audiocontext.js: MorseAudioContext singleton class to reliably obtain the web audio API AudioContext instance and load sound samples.
  • morse-player-waa.js: MorsePlayerWAA class, to play sounds in a web browser using the Web Audio API.
  • morse-player-waa-light.js: MorsePlayerWAALight class. Extends MorsePlayerWAA to provide callbacks when the sound goes on or off and when the sound ends. Can be used to turn a light on or off in time with the Morse sound.
  • morse-player-xas.js: MorsePlayerXAS class, to play sounds in older web browsers (e.g. IE) using XAudioJS.

Decoders:

  • morse-pro-decoder.js: MorseDecoder class which converts from timings to Morse code. Extends MorseCW.
  • morse-pro-decoder-adaptive.js: MorseDecoderAdaptive class, converts from timings to Morse code and adapts to changing speed. Extends MorseDecoder.

Keyers:

  • morse-pro-keyer.js: MorseKeyer class, tests for input (e.g. from the keyboard) using a timer, plays the appropriate tone via a MorsePlayer instance and passes the data to a MorseDecoder instance.
  • morse-pro-keyer-iambic.js: MorseKeyerIambic class extends MorseKeyer, will alternate between dit and dah if both keys are pressed together.

Listeners:

  • morse-pro-listener.js: MorseListener class, analyses audio from the microphone or a sound file to pick out Morse code timings which are passed into a MorseDecoder instance.
  • morse-pro-listener-adaptive.js: MorseListenerAdaptive class extends MorseListener, adapts to changing frequency (pitch).

Utilities:

Deprecated and compatibility: