qsorder.exe - a console app for audio recordig of N1MM contest QSOs.

v2.3b - Dec 14, 2012

this is an external "plug-in" for N1MM which adds a QSO audio recording function. qsorder maintains a buffer in memory and listens for "Contact" UDP broadcasts sent by the logging program. The broadcasts trigger a dump of the audio buffer to a file after a specified delay time (default is 20 secs). The delay helps with capturing a tail-end after a QSO was entered into the log.

Basic usage

  1. Download and unpack both the qsorder executable and lame.exe to the directory which will contain the contest audio (e.g. c:\contest-qsos\). If prefer to save uncompressed WAV files instead of mp3's then simply delete lame.exe. ('Lame' is a very fast, free MP3 encoder)

  2. Find the [ExternalBroadcast] section in your N1MM Logger.ini and include the lines below. This enables local QSO info UDP broadcast. For more info see N1MM UDP documentation. Restart N1MM after making changes.

    [ExternalBroadcast]

    DestinationIPs=127.0.0.1

    DestinationPort=12060

    IsBroadcastContact=True

  3. Start qsorder.exe. If prompted by the Windows Firewall software make sure you allow local network communication. qsorder should tell you which audio input was selected. If it's not the right one, go to windows audio settings and change the "Default Recording Device" to the one you like. (note: rec input selection flag is not yet implemented)

  4. Make QSOs in N1MM. in the qsorder window you should see output similar to this:..

    --------------------------------

    v2.2b QSO Recorder for N1MM, 2012 K3IT

    --------------------------------

    Listening on UDP port 12060

    Input Device : Line In (Realtek High Definitio

    * recording 2 ch, 46 secs audio buffer, Delay: 20.0 secs

    Output directory M:\temp\<contest_YEAR>

    --------------------------------

    QSO: 12-06 01:46:17 C6AUM 14

    QSO: 12-06 01:46:19 UT4UWB 14

    QSO: 12-06 01:46:28 UT0UM 14

    QSO: 12-06 01:46:34 W3TS 14

    WAV: 12-06 01:46:37 C6AUM_de_K3IT-VP9_DX..14Mhz.mp3 ReplayGain: +11.2dB

    WAV: 12-06 01:46:39 UT4UWB_de_K3IT-VP9_D..14Mhz.mp3 ReplayGain: +11.2dB

    WAV: 12-06 01:46:48 UT0UM_de_K3IT-VP9_DX..14Mhz.mp3 ReplayGain: +11.4dB

    QSO: 12-06 01:46:49 PJ2T 14

    WAV: 12-06 01:46:54 W3TS_de_K3IT-VP9_DX_..14Mhz.mp3 ReplayGain: +11.3dB

    WAV: 12-06 01:47:09 PJ2T_de_K3IT-VP9_DX_..14Mhz.mp3 ReplayGain: +11.9dB

  5. Pressing a HOTKEY (CTRL+ALT+R or specified with --hot-key option) will save the current audio buffer to a file in AUDIO_YYYY directory. The hotkey should be recognized even when qsorder window is not in focus. Use this key whenever you hear something interesting, outside of a normal QSO (even when N1MM is not running!)
  6. the audio files are saved to a subdirectory <contest>-<year>. Note that only a parital file name is printed to save screen space.

  7. ReplayGain indicates the perceived loudness of the recording as reported by lame. You can use this value to estimate and adjust the recording level (for example in Windows audio mixer). Replaygain info is also embedded to mp3 files so that they are played back at a relatively constant volume (keep in mind that not all players honor the replaygain tag).
  8. to stop qsorder either close the command window or Ctrl-Break. (the window may not react to a Ctrl-C right away - this is normal;)

  9. This is it. For any feedback please post a comment at the SF or email k3it

Advanced usage

qsorder supports optional command line flags:

Usage: qsorder.py [options]

Options:

-h, --help show this help message and exit

-l BUFFER_LENGTH, --buffer-length=BUFFER_LENGTH

Audio buffer length in secs [default=45]

-d DELAY, --delay=DELAY

Capture x seconds after QSO log entry [default=20]

-p PATH, --path=PATH Base directory for audio files [default=none]

-P PORT, --port=PORT UDP Port [default=12060]

-s STATION_NR, --station-nr=STATION_NR

Network Station Number [default=none]

-k HOT_KEY, --hot-key=HOT_KEY

Hotkey for manual recording Ctrl-Alt-<hot_key>

[default=r]

In multi-computer networking environment each N1MM Logger.ini file

Station 0 should be DestinationPort=12060

Station 1 should be DestinationPort=12061

Station 2 should be DestinationPort=12062

And use --port option

Alternatively set staion number using --station-nr option

(tnx ve2ebk)

Additional info

written in python 2.7, using threading and pyaudio libraries:

Main Thread - listens for UDP broadcasts from N1MM on port 12060

Sound card I/O thread - maintains a double ended FIFO audio buffer of the specified length (default: 45 secs)

File I/O thread(s) - dump_audio function saves the buffer to a wav file and (optionally) converts to mp3 using lame encoder. This function uses threading.timer module for scheduling

Hot key thread - monitors windows hot key events

python script is repackaged into a windows executable with pyinstaller.

Tips for audio input: when possible use an isolation transformer (salvage from an old modem). For Mic In recordings use an attenuator to prevent hiss and clipping.

Change history

v2.3b

v2.1b - Dec 5, 2012

v2.1a - Dec 2, 2012

Future plans

Audio input selection

Integration with N1MM log GUI (if N1MM team's time permits)

Integration with iTunes (just kidding)

73!

Vasiliy k3it