I find ARISS SSTV events very exciting. To me, nothing beats receiving signals from space. But these events also provide a nice opportunity to experiment with receivers, antennas and decoding software.
I usually record the audio and then decode it after the event. This is immensely easier than waiting for next suitable ISS pass in case I've forgotten to set up something. This is also convenient because once I've recorded audio, I can experiment with various ways to decode it.
So, the basic idea is very simple - I'll record audio and decode it later at my own leisure. Problem is many popular SSTV packages only support decoding from audio input devices and thus a virtual software audio device which "sits" in-between an application that plays received audio and an application that decodes SSTV (and behaves just like any other audio device to both applications) needs to be used.
I successfully tested this approach on several platforms:
But my preferred platform is still Linux, I've got several laptops running Fedora around plus another few Raspberry Pis running Raspbian. I started wondering how to do this on Linux. Finding a Linux open-source SSTV application was easy - there is an excellent piece of software called QSSTV, developed and maintained by Johan, ON4QZ. Unfortunately for me, even though in its Sound options it is possible to select Sound Input -> From File, I could never decode any of the recordings I'd made. Maybe I just failed to understand what this option was about, or perhaps I was just not using it correctly, I don't know. So I started wondering whether the virtual audio cable approach would work on Linux. And this is how to do it:
Software you will need
- Pulseaudio (it may have already been installed with your Linux distribution, if not simply install it from your distribution)
- Audio player that supports selecting an output device (in this example I am going to use VLC) - again, the simplest approach is to install it from your distribution
- Qsstv 9.x (lower versions do not support the audio device selection). If you can't find it in your favourite distribution, you can build it from source code, the instructions are on http://users.telenet.be/on4qz/qsstv/manual/installation.html )
Setting up a virtual audio device
Firstly, you will need to load a PulseAudio module called "module-null-sink" (if you're interested in having it included permanently, take a look at your default.pa file).
To load it manually when you need it, from your shell screen run:
$ pactl load-module module-null-sink sink_name=virtual-cable
Provided there were no errors reported, you can ignore the number printed out by pactl. Although Pulseaudio can best be tweaked from command line, I find the pavucontrol GUI very handy and a real time saver. Run it as:
If your module-null-sink loaded correctly, you should now see it in the GUI:
Start qsstv and click Options -> Configuration -> Sound. Ensure PulseAudio interface is selected:
Return to pavucontrl window. Click on the Recording button (remember: our Qsstv needs to record audio from our file!).
Click on Built-in Audio Analog Stereo (or whatever your device is called) and from the pulldown menu select the pulseaudio virtual device previously created:
Our virtual cable is now connected to Qsstv input, the only remaining step is to play our file to this virtual source. There are numerous Linux applications that can play audio to a specific device (this can be done from command line too!).
Playing audio to null-sink using VLC
VLC is one of the simplest applications to use for this purpose, from Audio -> Audio Device menu simply select your virtual device, load the file and you're good to go.
Playing audio from command line
As simple as it can possibly be:
$ paplay -d virtual-cable iss_2016-04-12_2109.wav
And proof of the pudding....
This is a screenshot of a decode in progress from a recording of an ISS pass over my QTH on 12 April 2016. The pass was somewhat unfavourable, with a 3-minute time-off period kicking in slap-bang in the middle of a pass (hence the fading and blurred lines as the pass was coming to a close).