From bef9758f1b030f934ec2edf94208d4a80034ad04 Mon Sep 17 00:00:00 2001 From: Jose Damico Date: Mon, 4 Dec 2023 19:36:40 -0300 Subject: [PATCH] added a gui to decode ax25 audio --- dist/icon.ico | Bin 0 -> 42437 bytes dist/icon.png | Bin 0 -> 37342 bytes pom.xml | 2 +- src/main/java/org/jdamico/javax25/App.java | 12 +- src/main/java/org/jdamico/javax25/GuiApp.java | 130 +++++++++ .../org/jdamico/javax25/GuiDecoderThread.java | 63 +++++ .../jdamico/javax25/PacketHandlerImpl.java | 14 +- .../javax25/ax25/Afsk1200Demodulator.java | 9 +- .../jdamico/javax25/soundcard/Soundcard.java | 246 +++++++++++------- 9 files changed, 362 insertions(+), 114 deletions(-) create mode 100644 dist/icon.ico create mode 100644 dist/icon.png create mode 100644 src/main/java/org/jdamico/javax25/GuiApp.java create mode 100644 src/main/java/org/jdamico/javax25/GuiDecoderThread.java diff --git a/dist/icon.ico b/dist/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cc4812c7ae011d62d3e628c4efa0a9e1ed4c582b GIT binary patch literal 42437 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 - org.jdamico.javax25.App + org.jdamico.javax25.GuiApp diff --git a/src/main/java/org/jdamico/javax25/App.java b/src/main/java/org/jdamico/javax25/App.java index 18cdda2..e0d359b 100644 --- a/src/main/java/org/jdamico/javax25/App.java +++ b/src/main/java/org/jdamico/javax25/App.java @@ -5,15 +5,9 @@ import org.jdamico.javax25.ax25.Afsk1200Modulator; import org.jdamico.javax25.ax25.Afsk1200MultiDemodulator; import org.jdamico.javax25.ax25.PacketDemodulator; -import org.jdamico.javax25.radiocontrol.SerialTransmitController; import org.jdamico.javax25.soundcard.Soundcard; -/** - * Hello world! - * - */ -public class App -{ +public class App { public static void main( String[] args) { Soundcard.enumerate(); @@ -48,9 +42,9 @@ public static void main( String[] args) { Soundcard sc = new Soundcard(rate,input,output,buffer_size,multi,mod); - if (p.containsKey("audio-level")) { + sc.displayAudioLevel(); - } + /*** listen for incoming packets ***/ diff --git a/src/main/java/org/jdamico/javax25/GuiApp.java b/src/main/java/org/jdamico/javax25/GuiApp.java new file mode 100644 index 0000000..d9dfa44 --- /dev/null +++ b/src/main/java/org/jdamico/javax25/GuiApp.java @@ -0,0 +1,130 @@ +package org.jdamico.javax25; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.List; + +import javax.swing.BorderFactory; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.text.DefaultCaret; + +import org.jdamico.javax25.soundcard.Soundcard; + +public class GuiApp extends JPanel implements ActionListener { + + private JTextArea textArea = new JTextArea(40, 80); + private JComboBox devicesComboBox = null; + private JButton decodeBtn = null; + private JButton resetBtn = null; + private JLabel audioLevelLabel = null; + private JLabel audioLevelValue = null; + private Thread guiDecoderThread; + + public static void main(String[] args) { + javax.swing.SwingUtilities.invokeLater(new Runnable() { + public void run() { + createAndShowGUI(); + } + }); + } + + public GuiApp() { + super(new BorderLayout()); + + JPanel northPanel = new JPanel(); // **** to hold buttons + + List lst = Soundcard.getInputDevicesLst(); + String[] deviceArray = new String[lst.size()]; + for (int i = 0; i < deviceArray.length; i++) { + deviceArray[i] = lst.get(i); + } + devicesComboBox = new JComboBox(deviceArray); + northPanel.add(devicesComboBox); + + decodeBtn = new JButton("Decode Audio"); + decodeBtn.addActionListener(this); + northPanel.add(decodeBtn); + + resetBtn = new JButton("Reset"); + + + resetBtn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + Soundcard.running = false; + guiDecoderThread.interrupt(); + devicesComboBox.setEnabled(true); + decodeBtn.setEnabled(true); + resetBtn.setEnabled(false); + } + }); + + resetBtn.setEnabled(false); + + northPanel.add(resetBtn); + + audioLevelLabel = new JLabel("Audio Level: "); + northPanel.add(audioLevelLabel); + + audioLevelValue = new JLabel("000"); + audioLevelValue.setForeground(Color.red); + northPanel.add(audioLevelValue); + + add(northPanel, BorderLayout.PAGE_START); + + DefaultCaret caret = (DefaultCaret) textArea.getCaret(); + caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE); + + JScrollPane scrollPane = new JScrollPane(textArea); + + add(scrollPane, BorderLayout.CENTER); + + setBorder(BorderFactory.createEmptyBorder(20,20,20,20)); + } + + private static void createAndShowGUI() { + //Create and set up the window. + JFrame frame = new JFrame("JavaX25 Decoder v.0.0.1"); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + ImageIcon img = new ImageIcon("dist/icon.png"); + frame.setIconImage(img.getImage()); + + //Create and set up the content pane. + JComponent newContentPane = new GuiApp(); + newContentPane.setOpaque(true); //content panes must be opaque + frame.setContentPane(newContentPane); + + //Display the window. + frame.pack(); + frame.setVisible(true); + } + + @Override + public void actionPerformed(ActionEvent arg0) { + decode(); + + } + + private void decode() { + decodeBtn.setEnabled(false); + devicesComboBox.setEnabled(false); + resetBtn.setEnabled(true); + String input = (String) devicesComboBox.getSelectedItem(); + Soundcard.jTextArea = textArea; + Soundcard.audioLevelValue = audioLevelValue; + guiDecoderThread = new GuiDecoderThread(input); + guiDecoderThread.start(); + } + +} diff --git a/src/main/java/org/jdamico/javax25/GuiDecoderThread.java b/src/main/java/org/jdamico/javax25/GuiDecoderThread.java new file mode 100644 index 0000000..3dcd6b5 --- /dev/null +++ b/src/main/java/org/jdamico/javax25/GuiDecoderThread.java @@ -0,0 +1,63 @@ +package org.jdamico.javax25; + +import java.util.Properties; + +import org.jdamico.javax25.ax25.Afsk1200Modulator; +import org.jdamico.javax25.ax25.Afsk1200MultiDemodulator; +import org.jdamico.javax25.ax25.PacketDemodulator; +import org.jdamico.javax25.soundcard.Soundcard; + +public class GuiDecoderThread extends Thread { + private String input; + public GuiDecoderThread(String input) { + this.input = input; + } + + public void run() { + Properties p = System.getProperties(); + + int rate = 48000; + + PacketHandlerImpl t = new PacketHandlerImpl(); + Afsk1200Modulator mod = null; + PacketDemodulator multi = null; + try { + multi = new Afsk1200MultiDemodulator(rate,t); + mod = new Afsk1200Modulator(rate); + } catch (Exception e) { + System.out.println("Exception trying to create an Afsk1200 object: "+e.getMessage()); + } + + + /*** preparing to generate or capture audio packets ***/ + + //String input = p.getProperty("input", null); + String output = null; + + int buffer_size = -1; + try { + // our default is 100ms + buffer_size = Integer.parseInt(p.getProperty("latency", "100").trim()); + } catch (Exception e){ + System.err.println("Exception parsing buffersize "+e.toString()); + } + + Soundcard sc = new Soundcard(rate,input,output,buffer_size,multi,mod); + + + + sc.displayAudioLevel(); + + + /*** listen for incoming packets ***/ + + if (input != null) { + System.out.printf("Listening for packets\n"); + //sc.openSoundInput(input); + sc.receive(); + }else { + System.err.println("Input is null!"); + } + } + +} diff --git a/src/main/java/org/jdamico/javax25/PacketHandlerImpl.java b/src/main/java/org/jdamico/javax25/PacketHandlerImpl.java index 06a6596..1a9ce5e 100644 --- a/src/main/java/org/jdamico/javax25/PacketHandlerImpl.java +++ b/src/main/java/org/jdamico/javax25/PacketHandlerImpl.java @@ -22,11 +22,23 @@ import org.jdamico.javax25.ax25.Packet; import org.jdamico.javax25.ax25.PacketHandler; +import org.jdamico.javax25.soundcard.Soundcard; public class PacketHandlerImpl implements PacketHandler { public void handlePacket(byte[] bytes) { - System.out.println(Packet.format(bytes)); + + + if(Soundcard.jTextArea == null) { + System.out.println("Packet ====>>>>" +Packet.format(bytes)); + + }else { + + String lines = Soundcard.jTextArea.getText(); + if(lines.length() > 80000) lines = "Cleaning log...\n"; + Soundcard.jTextArea.setText(lines+Packet.format(bytes)+"\n"); + } + return; /* if (last!=null && Arrays.equals(last, bytes) && sample_count <= last_sample_count + 100) { diff --git a/src/main/java/org/jdamico/javax25/ax25/Afsk1200Demodulator.java b/src/main/java/org/jdamico/javax25/ax25/Afsk1200Demodulator.java index 64e3cc5..f1ef3f5 100644 --- a/src/main/java/org/jdamico/javax25/ax25/Afsk1200Demodulator.java +++ b/src/main/java/org/jdamico/javax25/ax25/Afsk1200Demodulator.java @@ -21,6 +21,10 @@ import java.util.Arrays; +import javax.swing.JTextArea; + +import org.jdamico.javax25.soundcard.Soundcard; + public class Afsk1200Demodulator extends PacketDemodulator //implements HalfduplexSoundcardClient @@ -379,8 +383,9 @@ protected void addSamplesPrivate(float[] s, int n) { // emphasis,f0_max/-f1_min,max_period_error)); if (handler!=null) handler.handlePacket(packet.bytesWithoutCRC()); - else - System.out.println(""+(++decode_count)+": "+packet); + else { + System.out.println((++decode_count)+": "+packet); + } } packet = null; state=State.JUST_SEEN_FLAG; diff --git a/src/main/java/org/jdamico/javax25/soundcard/Soundcard.java b/src/main/java/org/jdamico/javax25/soundcard/Soundcard.java index fb9b0f0..ae280ee 100644 --- a/src/main/java/org/jdamico/javax25/soundcard/Soundcard.java +++ b/src/main/java/org/jdamico/javax25/soundcard/Soundcard.java @@ -25,32 +25,48 @@ //import java.io.PrintStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; +import java.util.ArrayList; //import java.util.Arrays; //import java.util.Properties; +import java.util.List; -import javax.sound.sampled.*; +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.Line; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.Mixer; +import javax.sound.sampled.SourceDataLine; +import javax.sound.sampled.TargetDataLine; +import javax.swing.JLabel; +import javax.swing.JTextArea; public class Soundcard { + + public static JTextArea jTextArea = null; + public static JLabel audioLevelValue = null; + + public static boolean running = true; + private int rate; //private final int channels = 2; //private final int samplebytes = 4; private final int channels = 1; private final int samplebytes = 2; - + private TargetDataLine tdl = null; private SourceDataLine sdl = null; private byte[] capture_buffer; - + private boolean display_audio_level = false; - + //private Afsk1200 afsk; //private HalfduplexSoundcardClient afsk; private SoundcardConsumer consumer; private SoundcardProducer producer; - + private int latency_ms; - + public Soundcard(int rate, String input_device, String output_device, @@ -59,6 +75,8 @@ public Soundcard(int rate, SoundcardConsumer consumer, SoundcardProducer producer ) { + + Soundcard.running = true; this.rate = rate; //this.afsk = afsk; this.producer = producer; @@ -66,65 +84,88 @@ public Soundcard(int rate, this.latency_ms = latency_ms; if (input_device != null) openSoundInput (input_device); if (output_device != null) openSoundOutput(output_device); - } + } + public void transmit() { sdl.flush(); sdl.start(); int n; - float[] samples = producer.getTxSamplesBuffer(); - byte[] buffer = new byte[2*samples.length]; - ByteBuffer bb = ByteBuffer.wrap(buffer).order(ByteOrder.LITTLE_ENDIAN); - - while ((n = producer.getSamples()) > 0){ - bb.rewind(); - for (int i=0; i 0){ + bb.rewind(); + for (int i=0; i max) max = f[i]; - //if (f[i] < min) min = f[i]; - if (j == rate) { - //System.err.printf("Audio in range [%f, %f]\n",min,max); - System.err.printf("Audio level %d\n",consumer.peak()); - j = 0; - //min = 1.0f; - //max = -1.0f; - } - } - consumer.addSamples(f,rv/2); - } + while (Soundcard.running ) { + int rv; + rv = tdl.read(capture_buffer, 0, capture_buffer.length); + bb.rewind(); + //System.out.printf("read %d bytes of audio\n",rv); + for (int i=0; i max) max = f[i]; + //if (f[i] < min) min = f[i]; + if (j == rate) { + //System.err.printf("Audio in range [%f, %f]\n",min,max); + if(audioLevelValue == null) System.err.printf("Audio level %d\n",consumer.peak()); + else { + audioLevelValue.setText(String.valueOf(consumer.peak())); + } + j = 0; + //min = 1.0f; + //max = -1.0f; + } + } + consumer.addSamples(f,rv/2); + } } private void openSoundInput(String mixer) { AudioFormat fmt; fmt = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, rate, - 16, /* bits per value */ - channels, /* stereo */ - samplebytes, /* sample size */ - rate, - false /* false=little endian */); + 16, /* bits per value */ + channels, /* stereo */ + samplebytes, /* sample size */ + rate, + false /* false=little endian */); Mixer.Info[] mis = AudioSystem.getMixerInfo(); //TargetDataLine tdl = null; for (Mixer.Info mi: mis) { if (mi.getName().equalsIgnoreCase(mixer)) { - try { - tdl = AudioSystem.getTargetDataLine(fmt, mi); - System.err.println("Opened an input sound device (target line): "+mixer); - } catch (LineUnavailableException lue) { - System.err.println("Sound input device not available: "+mixer); - } - catch (IllegalArgumentException iae) { - System.err.println("Failed to open an input sound device: "+iae.getMessage()); - } + try { + tdl = AudioSystem.getTargetDataLine(fmt, mi); + System.err.println("Opened an input sound device (target line): "+mixer); + } catch (LineUnavailableException lue) { + System.err.println("Sound input device not available: "+mixer); + } + catch (IllegalArgumentException iae) { + System.err.println("Failed to open an input sound device: "+iae.getMessage()); + } } } - + if (tdl == null) { System.err.println("Sound device not found (or is not an input device): "+mixer); return; } - + //Control[] controls = tdl.getControls(); //for (Control c: controls) { // System.out.println(" Control: +"+c.getType().getClass()); //} - + int buffer_size_in_samples = (int) Math.round(latency_ms * ((double) rate / 1000.0)); try { tdl.open(fmt,2*buffer_size_in_samples); tdl.start(); - } catch (LineUnavailableException lue) { - tdl=null; - System.err.println("Cannot open input sound device"); - } + } catch (LineUnavailableException lue) { + tdl=null; + System.err.println("Cannot open input sound device"); + } } - + private void openSoundOutput(String mixer) { //System.out.println("Playback"); AudioFormat fmt; fmt = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, rate, - 16, /* bits per value */ - channels, /* stereo */ - samplebytes, /* sample size */ - rate, - false /* false=little endian */); + 16, /* bits per value */ + channels, /* stereo */ + samplebytes, /* sample size */ + rate, + false /* false=little endian */); Mixer.Info[] mis = AudioSystem.getMixerInfo(); @@ -229,31 +273,31 @@ private void openSoundOutput(String mixer) { for (Mixer.Info mi: mis) { if (mi.getName().equalsIgnoreCase(mixer)) { //System.out.println("@@@"); - try { - sdl = AudioSystem.getSourceDataLine(fmt, mi); - System.err.println("Opened a sound output device (source data line): "+mixer); - } catch (LineUnavailableException lue) { - System.err.println("Sound output device not available: "+mixer); - } catch (IllegalArgumentException iae) { - System.err.println("Failed to open a sound output device: "+iae.getMessage()); - } + try { + sdl = AudioSystem.getSourceDataLine(fmt, mi); + System.err.println("Opened a sound output device (source data line): "+mixer); + } catch (LineUnavailableException lue) { + System.err.println("Sound output device not available: "+mixer); + } catch (IllegalArgumentException iae) { + System.err.println("Failed to open a sound output device: "+iae.getMessage()); + } } } - + if (sdl == null) { System.err.println("Sound output device not found (or is not a playback device): "+mixer); return; } - + int buffer_size_in_samples = (int) Math.round(latency_ms * ((double) rate / 1000.0)); try { sdl.open(fmt,2*buffer_size_in_samples); //sdl.start(); - } catch (LineUnavailableException lue) { - sdl=null; - System.err.println("Cannot open sound output device device"); - } - } - + } catch (LineUnavailableException lue) { + sdl=null; + System.err.println("Cannot open sound output device device"); + } + } + }