Seguimi in Twitter Seguimi in Facebook Seguimi in Pinterest Seguimi in LinkedIn Seguimi in Google+ Seguimi  in Stumbleupon seguimi  in instagram Sottoscrivi il feed
Blender, graphic, software, open source, Linux LibreOffice, open source, openoffice Gimp, graphic, software, open source, Linux kernel, Linux, software, open source Linux, distributions, Ubuntu, Linux Mint, Fedora, Mandriva Jamin, gpl, library, open source matroska, multimedia, container, linux pcman, file manager, linux LuninuX, distribition, Linux, open source Linux, infographic, history
Home » , , » UnixCw is an umbrella project for a Linux library and for few Linux applications related to Morse code.

UnixCw is an umbrella project for a Linux library and for few Linux applications related to Morse code.

popcon-png.phpUnixCW is a package of UNIX-based programs that fit together to form a morse code tutor program similar to CP222 by VU2ZAP.

There are four programs in the package; a Morse code sounding 'engine', a curses-based front-end, a simpler command-line front end and a QT frontend .

These are implemented as separate processes so a selection of front-ends can be used without rewriting the basic Morse code software.

Unixcw can sound on your PC speaker and soundcard.

unixcw is an umbrella project for a Linux library and for few Linux applications related to Morse code.

The applications are:
  • cw - a CW sending 'engine' that reads characters from stdin, sounds them on either the sound card, or the console speaker, and echoes them to stdout.
  • cwgen - a simple random character generator that can be used as a feed for cw.
  • cwcp - a curses-based program that generates groups of characters from selected sets, words, and CW abbreviations randomly, and sounds them using libcw. It owes much to CP222.EXE, by VU2ZAP.
  • xcwcp - a CW tutor program for X Window environment. It offers the same random and keyboard sending as 'cwcp', and in addition can read CW that sent to it using the keyboard or mouse as a keyer, making it useful for sending as well as receiving practice.
The heart of the package is 'libcw'. This is a library which, when built, offers the following basic CW services to a caller program:
  • Morse code character translation tables, and lookup functions
  • Morse code low-level timing calculations
  • A 'sidetone' generation and queueing system, using either the system sound card or the console speaker
  • Optional keying control for an external device, say a transmitter, or an oscillator
  • CW character and string send routines, tied in with the character lookup
  • CW receive routines, also tied in to the character lookup
  • Adaptive speed tracking of received CW
  • An iambic keyer, with both Curtis 8044 types A and B timing
  • Straight key emulation
The library uses signals and threads to create a background task in which to do the majority of its work, leaving the main program free to handle other tasks. Sound is produced on soundcard (through PulseAudio - the default, OSS, or ALSA), or on console buzzer.

libcw is written in C for easy portability and use.

libcw, cw, and cwgen require a C compiler. cwcp requires a C compiler and a Curses library. xcwcp requires a C++ compiler and a copy of the Qt library (version 4). This library is fairly standard on Linux systems, as it is the basis of KDE, so relying on this should not be too much of a problem.



ou can get unixcw in two different ways:
  • Download it from Sourceforge download area
    Go to unixcw download page and select latest package.
  • Get your copy of development source tree from git repository, just enter
    git clone git://git.code.sf.net/p/unixcw/code unixcw-code

    in your command line.

You can also use web interface to git repository to browse source code tree.


Release of unixcw version 3.1.0

Changes since version 3.0.2:



  • Added support for PulseAudio. All applications from unixcw that produce audio output benefit from this. PulseAudio is the default audio backend on machines with installed and accessible PulseAudio server. If audio backend hasn't been specified by user, the applications try to access different sound backends in following order: PulseAudio -> OSS -> ALSA -> console buzzer. The usual restrictions for console buzzer output (root privileges required) still apply. Running application from unixcw package (cw, cwcp, xcwcp) with ALSA selected as sound backend while PulseAudio server is running will result in all kinds of different problems. User is warned about such situation by the application.

  • Added 'Null' audio system as an optional audio backend. No sound is being played if this system is selected, libcw is spending its time only on generating tones of proper length and sending then in proper moments to a pseudo-device. Pass '-s n' option to unixcw application to use this 'audio' backend.

  • Thanks to changes in libcw, unixcw doesn't 'require' ALSA or PulseAudio libraries, or PulseAudio server on target system, even if support for the two audio backends was compiled in. The two audio backends are now only recommended, thanks to linking to the libraries at run time.

  • Build system now uses libtool. 'libtool' script is in release archive, so there are no new compile-time requirements related to this (at least 'make distcheck' completes successfully with libtool package uninstalled).

  • It is possible to explicitly disable support for audio backends at compile time. Pass '--disable-{console|oss|alsa|pulseaudio}' to ./configure to do this.

  • It is possible to explicitly disable compilation of cwcp and xcwcp. Pass '--disable-{cwcp|xcwcp}' to ./configure to do this.

  • Build system now uses Makefile.am files as a basis to generate Makefile files.

  • Build system now supports and correctly builds 'make distcheck' target.

  • This version closes following Debian bugs: #237891, #567394, #567392.



  • Added support for PulseAudio. There are still some things to be improved in code implementing support for PulseAudio, but pretty solid basics are there.

  • Added support for Null pseudo audio system. Not sure if it will be useful, I just thought that someone would like to use libcw without generating any sound. Perhaps some simple platforms without audio devices, perhaps practicing sending/keying without playback. Who knows. It was easy to do, so I did it.

  • If you compare libcw.c files from this and previous release, you will notice lots of changes. This is because I've changed the algorithm that controls time periods when generating tones (generating sine wave). Until now the periods were measured with itimers. The tricky part was to keep two processed in sync: turning sine wave on and off, and sending the content of audio buffer with sine wave to audio backend. I'm calling it 'tricky' because it works fine only for small sizes of audio buffer, as was is in case of OSS (~128 samples). With larger buffer sizes forced by ALSA (~1k samples) the two processes de-synchronize. I had to come up with better design, and the side effect of the design is total rewrite of parts of libcw.c (for my own purposes I call the rewrite a 'butchering', but that is a different story). New design relies on blocking writes to audio systems, and their property of being able to play only X samples (Y milliseconds) at a time (with given sample rate).

  • This small image below shows the benefits of new design. Upper part of the screenshot is sound of two letters 'h', produced by libcw3, the lower part shows sound of the same letters produced by libcw4. (The screenshot shows wave plot in Audacity).

  • Following functions are deprecated:

    • cw_check_representation(),
    • cw_lookup_representation(),
    • cw_lookup_character().

    Use these instead:

    • cw_representation_is_valid(),
    • cw_representation_to_character(),
    • cw_character_to_representation().

  • library's soname changed from 3.0.1 to 4.0.0. Library's version becomes independent from version of unixcw.
  • Fixing small bug in user interface: till now modifying practice time didn't work correctly, any attempts to do so resulted in resetting the time to zero. Now this is fixed.

Custom Search
If you liked this article, subscribe to the feed by clicking the image below to keep informed about new contents of the blog:

1 commenti:

  1. Current version of unixcw is 3.4.2, it has been published in June 2015.


Random Posts

My Blog List

Recent Posts

Recent Posts Widget

Popular Posts




Images Photo Gallery

page counter Mi Ping en TotalPing.com
Copyright © 2014 Linuxlandit & The Conqueror Penguin