• Stars
    star
    157
  • Rank 238,399 (Top 5 %)
  • Language
    Go
  • License
    MIT License
  • Created about 8 years ago
  • Updated 10 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Audio streaming application for Amateur Radio purposes

remoteAudio

Build Status Go Report Card MIT license GoDoc

remoteAudio is a cross plattform audio streaming application, built for Amateur Radio purposes. The most typical use case for this software is the remote operation of an amateur radio station. remoteAudio is written in Go.

remoteAudio supports multiple users and multiple audio sources (e.g. radios). This means that with a single click a user can switch between audio sources. At any time multiple clients can listen simultaneously on the same radio, although remoteAudio only allows one user to transmit.

ADVICE: This project is under development. The parameters, ICD and the behaviour is still not stable and subject to change.

Supported Codec

  • OPUS
  • extensible for other codecs (e.g. PCM)

Supported Transportation Protocols

  • NATS with go-micro on top
  • extensible for P2P protocol (UDP/TCP/ZEROMQ)

Supported Platforms

RemoteAudio has been tested on the following CPU architectures:

  • AMD64
  • i386
  • ARMv7 (e.g. Raspberry Pi 2)
  • ARMv8 (e.g. Raspberry Pi 3)

and the following operating Systems:

  • Linux (Ubuntu, Raspian, Armbian)
  • MacOS
  • Windows (7 and 10)

Users have reported performance issues with remoteAudio on single core ARMv6 SoCs, in particular the Raspberry Pi 1. Usage of the Raspberry Pi 1 is therefore not recommended.

Download

You can download a tarball / zip archive with the compiled binary for MacOS, Linux (ARM/AMD64) and Windows from the releases page. remoteAudio is just a single exectuable.

Installation / Dependencies

remoteAudio depends on some 3rd party libraries which can be installed on Linux and MacOS with the respective packet managers. On Windows the 3rd party libraries are included in the zip archive.

Linux (Ubuntu >= 14.04)

$ sudo apt-get install -y pkg-config libsamplerate0 libopus0 libopusfile0 libportaudio2

MacOS

$ brew update
$ brew install pkg-config opus opusfile portaudio libsamplerate

Requirements

In order to operate remoteAudio you need to either run your own NATS Broker which can be downloaded here for a lot of platforms & operating systems.

Getting started

List audio devices

If you are not sure about the name of your audio devices and their parameters, you can easily list the available devices:

$ remoteAudio enumerate

By default the standard input / output devices defined in your OS will be used.

You can find further tips about configuring your audio devices in the Wiki.

Configuration

Both, the server and the client provide extensive configuration possibilities, either through a configuration file (TOML|YAML|JSON), typically located in your home directory /home/your_user/.remoteAudio.toml. or through pflags.

An example configuration file named .remoteAudio.tomlis included in the repository.

All parameters can be set through pflags. The following example shows the options for

$ remoteAudio server nats --help
NATS Server for bi-directional audio streaming

Usage:
  remoteAudio server nats [flags]

Flags:
  -p, --broker-port int     Broker Port (default 4222)
  -u, --broker-url string   Broker URL (default "localhost")
  -h, --help                help for nats
  -P, --password string     NATS Password
  -Y, --radio string        radio name to which this audio server belongs (e.g. 'ts480')
  -U, --username string     NATS Username

Global Flags:
  -f, --audio-frame-length int           Amount of audio samples in one frame (default 480)
      --config string                    config file (default is $HOME/.remoteAudio.yaml)
      --input-device-channels int        Input Channels (default 1)
      --input-device-latency duration    Input latency (default 5ms)
  -i, --input-device-name string         Input device (default "default")
      --input-device-samplerate float    Input device sampling rate (default 48000)
      --opus-application string          profile for opus encoder (default "restricted_lowdelay")
      --opus-bitrate int                 Bitrate (bits/sec) generated by the opus encoder (default 32000)
      --opus-complexity int              Computational complexity of opus encoder (default 9)
      --opus-max-bandwidth string        maximum bandwidth of opus encoder (default "wideband")
      --output-device-channels int       Output Channels (default 2)
      --output-device-latency duration   Output latency (default 5ms)
  -o, --output-device-name string        Output device (default "default")
      --output-device-samplerate float   Output device sampling rate (default 48000)
  -R, --rx-buffer-length int             Buffer length (in frames) for incoming Audio packets (default 10)

Execute Audio Server

$ remoteAudio server nats

Execute Audio Client

$ remoteAudio client nats

WebUI

The Client provides a minimal Web Interface for basic control of the client and server side audio streams. Open a Webbrowser at: http://localhost:9090 to access the WebUI.

Alt text

How build remoteAudio

The Wiki contains detailed instructions on how to build remoteAudio from source code on Linux, MacOS and Windows.

Integration with 3rd party software

The remoteAudio client can be fully controlled through a REST API. Check the Wiki for more details.

Troubleshooting

remoteAudio does it's best to check if your sound hardware is compatible with the parameters you have set. However it's not entirely possible to check all the Settings.

Inexpensive (USB) Soundcards usually operate at 48kHz. They play the audio in Stereo and Record the Audio in MONO.

The Wiki contains a Troubleshooting section.

Feel free to open an issue if you encounter problems.

More Repositories

1

pyhamtools

A Library with Amateur Radio specific Functions and Methods
Python
85
star
2

streamdeck

Golang API for the Corsair / Elgato StreamDeck
Go
71
star
3

remoteRotator

remoteRotator lets you expose a local antenna rotator (azimuth / elevation) to the network
Go
42
star
4

gosamplerate

Go Bindings for libsamplerate
Go
34
star
5

gorigctl

An opinionated drop-in replacement for Hamlib's rigctl(d)
Go
25
star
6

DX-Cluster-Parser

This python library is for Amateur Radio ("Ham Radio") purpose. The library parses the messages you receive from a DX-Cluster. It will return objects for Spots, Callsigns, WWV and Comments. It can also be used just for callsigns!
Python
22
star
7

goHamlib

Hamlib bindings for Golang
Go
20
star
8

remoteAudio-xcompile

Cross Compilation Containers for remoteAudio
Dockerfile
13
star
9

streamdeck-examples

A demo example application for the golang streamdeck driver
Go
12
star
10

remoteSwitch

remoteSwitch lets you expose and control switches (e.g. GPIO relay boards) over the network
Go
12
star
11

arsctl

Amateur Radio Rotator Control - WebInterface & Win-Test Gateway
CSS
5
star
12

sdrsharp-udp-signal-exporter

SDR# Plugin for exporting signal values via UDP
C#
4
star
13

repeaterControl

Control software for an automated VHF / UHF Repeater, running on Arduino UNO and Banana Pi
C++
3
star
14

dxspider-docker

DXSpider in a docker container
Dockerfile
2
star
15

remoteRadio

Protobuf / MQTT interface for Hamlib
Go
2
star
16

go-micro-error-broken

Go
1
star
17

firmatator

Automatically exported from code.google.com/p/firmatator
C++
1
star
18

remoteSwitch-playground

Dockerized playground for remoteSwitch
Dockerfile
1
star
19

acom2000

Golang library for controlling the Acom2000 HF amplifier
Go
1
star
20

hamlib-go

Package hamlib provides Go bindings for Hamlib (radio control toolkit).
Go
1
star
21

RTI-DDS-Chat-App

C++
1
star
22

vna-testboard

A handy PCB for experimenting and prototyping with Vector Network Analyzers
1
star
23

streamdeck-buttons

My custom library of buttons for the Elgato / Corsair Stream Deck using my golang driver
Go
1
star
24

natsProxy

Proxy UDP, TCP or sockets over NATS
Go
1
star