Gstreamer "audio OVER ip" for HAM RADIO - audiointerleave/deinterleave plugin examples for QRQ CW Remote Rig Operations

this video demoS using GSTREAMER's audiointerleave and deinterleave plugins for a Gstreamer OPUS CODEC AUDIO OVER IP remote rig audio operations use...

CONCEPT:
break the 2 channel audio over ip pipelines into 2 individual pathways that can contain their own individual Gstreamer audio DSP plugins...
in this case....2 different Gstreamer CW AUDIO BANDPASS Filters...
one BPF for a PTT tone at 5555 hz that is used to trigger the RIG's VOICE VOX PTT circuit...the other BPF is for the actual CW TONE at 680 hz to be filtered at the RECEIVE site location(Raspberry PI::RIG interface) - to make as pure as possible the CW AUDIO TONE to be transmitted on HF using AFCW MODE and to minimize any packet loss or delay audio glitches from getting through into the TRANSMIT AUDIO..from poor audio over ip network conditions, routing, switches, hops etc...

the Gstreamer Transmit scripts, 2 audiointerleaved channels are used to send two different sine wave tones....one at 5555 hz as the PTT ACTIVATE TONE the other is the CW TONE at 680 hz...using the AD5DZ CW KEYING SYSTEM...

at the RECEIVE side//RIG::RASPBERRY PI Interface...the audio is PRE FILTERED before going the RIGs line input for TRANSMIT on RF... to get rid of any unwanted harmonics above or below the TONE's PITCH and to get rid of any audio artifact sounds from packet loss or delay etc.. to create the purest CW TONE spectrum as possible for transmit CW using AFCW MODE on LSB (note: the 5555 hz is rejected by the rigs brick wall transmit low pass filter and does not get transmitted)

GSTREAMER AUDIOINTERLEAVE TRANSMIT SCRIPT:
note: this script creates 2 channels, each with its own name and pathway - where you could interject any AUDIO DSP plugins that would only work on the pathway/channel - they are on...
GSTREAMER works with LADSPA, LV2 and its own plugins
***********************************************************
gst-launch-1.0 -v interleave name=i ! audioconvert ! audioresample ! queue ! opusenc bitrate=512000 frame-size=10 ! udpsink host=192.168.1.101 port=6767 jackaudiosrc name=CW ! audioconvert ! queue ! i. jackaudiosrc name=PTT ! audioconvert ! queue ! i.


GSTREAMER DEINTERLEAVE RECEIVE SCRIPT:
this script separates the 2 channels into their own pathway...so that each pathway is receiving the designated TRANSMIT TONE only...either the 5555 hz or the 680 hz...then on each tone's pathway, its own Gstreamer coding for an audio bandpass filter is added, which does an amazing job...transforming each original tone into a pure tone with symmetrical RISE/FALL times...and a very pure and clean audio spectrum...
*************************************************
gst-launch-1.0 -v udpsrc port=6767 caps="audio/x-opus, rate=(int)48000, channels=(int)2, channel-mapping-family=(int)255, stream-count=(int)2, coupled-count=(int)0, channel-mapping=(int)< 0, 1 >, streamheader=(buffer)< 4f707573486561640102380180bb00000000ff02000001, 4f707573546167731e000000456e636f6465642077697468204753747265616d6572206f707573656e630000000001 >" ! queue ! opusdec ! audioconvert ! deinterleave name=d d.src_0 ! queue ! audioconvert ! audiowsincband mode=band-pass lower-frequency=580 upper-frequency=780 length=700 window=hamming ! jackaudiosink name=CW d.src_1 ! queue ! audioconvert ! audiowsincband mode=band-pass lower-frequency=5000 upper-frequency=6000 length=700 window=hamming ! jackaudiosink name=PTT

Views: 153

Comment by Chuck aa0hw on January 23, 2020 at 1:04pm

here is a LIVE real time video example of remote QRQ CW KEYING of an ELECRAFT K3S using the gstreamer interleave/deinterlave methods from the remote OPs linux laptop's AD5DZ CW KEYBOARD

this is a follow up test of concept video from the first video
https://youtu.be/R9xWn93_3dg
introducing the AUDIOINTERLEAVE/deinterleave Gstreamer scripts for audio over ip and using different channel paths for different frequencies and their respective gstreamer bandpass filters

this video we test an actual QRQ CW keying of the rig by remote audio over ip using the RASBPERRY PI::RIG Interface and the remote OP's linux laptop and cw keyboard

GSTREAMER "PI TRANSMIT" To remote OP SCRIPT USED:

pi@raspberrypi ~ $ gst-launch-1.0 -v jackaudiosrc ! queue ! audioconvert ! "audio/x-raw,channels=1,rate=48000" ! audioconvert ! opusenc bitrate=512000 frame-size=10 ! udpsink host=192.168.1.101 port=6767

GSTREAMER "PI RECEIVE" audio from remote OP deinterleave scripts used with BPF included:

pi@raspberrypi ~ $ gst-launch-1.0 -v udpsrc port=6768 caps="audio/x-opus, rate=(int)48000, channels=(int)2, channel-mapping-family=(int)255, stream-count=(int)2, coupled-count=(int)0, channel-mapping=(int)< 0, 1 >, streamheader=(buffer)< 4f707573486561640102380180bb00000000ff02000001, 4f707573546167731e000000456e636f6465642077697468204753747265616d6572206f707573656e630000000001 >" ! queue ! opusdec ! audioconvert ! deinterleave name=d d.src_0 ! multiqueue ! audioconvert ! audiowsincband mode=band-pass lower-frequency=580 upper-frequency=780 length=700 window=hamming ! jackaudiosink transport=slave name=CW d.src_1 ! multiqueue ! audioconvert ! audiowsincband mode=band-pass lower-frequency=5000 upper-frequency=6000 length=700 window=hamming ! jackaudiosink name=PTT transport=slave

GSTREAMER REMOTE OP "receive from pi" script used:

 qrq@qrq:~$ gst-launch-1.0 -v udpsrc port=6767 caps="audio/x-opus, rate=(int)48000, channels=(int)1, channel-mapping-family=(int)0, stream-count=(int)1, coupled-count=(int)0, streamheader=(buffer)< 4f707573486561640101380180bb0000000000, 4f707573546167731e000000456e636f6465642077697468204753747265616d6572206f707573656e630000000001 >" ! queue ! opusdec ! audioconvert ! audiochebband mode=1 lower-frequency=3000 upper-frequency=9000 poles=13 ! queue ! jackaudiosink buffer-time=25000 transport=slave

GSTREAMER REMOTE OP "TRANSMIT TO PI" interleave script used:

qrq@qrq:~$ gst-launch-1.0 -v interleave name=i ! audioconvert ! audioresample ! queue ! opusenc bitrate=512000 frame-size=10 ! udpsink host=192.168.1.130 port=6768 jackaudiosrc name=CW ! audioconvert ! multiqueue use-interleave=true ! i. jackaudiosrc name=PTT ! audioconvert ! multiqueue use-interleave=true ! i.

Comment

You need to be a member of QRQcw to add comments!

Join QRQcw

© 2024   Created by Chuck aa0hw.   Powered by

Badges  |  Report an Issue  |  Terms of Service