# welle.io
**Repository Path**: talent518/welle.io
## Basic Information
- **Project Name**: welle.io
- **Description**: welle.io is an open source DAB and DAB+ software defined radio (SDR) with support for rtl-sdr (RTL2832U) and airspy.
- **Primary Language**: Unknown
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-05-16
- **Last Updated**: 2025-05-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[welle.io](https://www.welle.io)
=====================
This repository contains the implementation of an SDR DAB/DAB+ receiver.
Please see the project website https://www.welle.io for a user oriented documentation.
**Build status**
- Linux (Flatpak x86_64 and arm64): [](https://github.com/AlbrechtL/welle.io/actions/workflows/linux.yml)
- Windows (Installer x86_64): [](https://github.com/AlbrechtL/welle.io/actions/workflows/windows.yml)
- Android (APK): build workflow is currently disabled because a new, skilled maintainer for Android package is required to fix bug https://github.com/AlbrechtL/welle.io/issues/814# in the workflow.
## Table of contents
* [Download](#download)
* [Usage](#usage)
* [Supported Hardware](#supported-hardware)
* [Building](#building)
* [General Information](#general-information)
* [Debian / Ubuntu Linux](#debian--ubuntu-linux)
* [Windows 11](#windows-11)
* [macOS, Android and FreeBSD](#macos-android-and-freebsd)
* [CMake](#cmake)
* [welle-cli](#welle-cli)
* [Usage](#usage-of-welle-cli)
* [Backend options](#backend-options)
* [Examples](#examples)
* [Limitations](#limitations)
* [Development](#development)
* [Acknowledgement](#acknowledgement)
* [Sponsors](#sponsors)
## Download
#### Stable binaries
* [**Windows**](http://github.com/AlbrechtL/welle.io/releases)
* **Linux** (flatpak version is recommend because Linux distribution packages welle.io can be outdated.
- [Flatpak](https://flathub.org/apps/io.welle.welle-gui)
- [Full list of supported Linux distributions](https://repology.org/project/welle.io/versions)
- Debian or Ubuntu 19.04+:
```
$ apt install welle.io`
```
- Fedora 35+ (uses the [RPM Fusion](https://rpmfusion.org) package sources)
```
# Enable the RPM Fusion sources
$ sudo dnf install -y https://mirrors.rpmfusion.org/free/fedora/rpmfusion-free-release-$(rpm -E %fedora).noarch.rpm https://mirrors.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-$(rpm -E %fedora).noarch.rpm`
# Install welle.io
$ sudo dnf install --refresh welle-io
```
* **macOS**
Unfortunately the macOS welle.io is unmaintained, currently. You still can use the 2.4 version (only Intel processor support).
- [Installer](https://github.com/AlbrechtL/welle.io/releases/tag/v2.4)
- MacPorts
```
$ sudo port install welle.io
```
* **[Android](https://github.com/AlbrechtL/welle.io/releases/tag/v2.4)** (Unfortunately unmaintained, currently. You still can use the 2.4 version)
* **FreeBSD**
```
$ pkg install welle.io
```
If you discovered an issue please open a new [issue](https://github.com/AlbrechtL/welle.io/issues).
#### Developer version
welle.io is under development. You can also try the latest developer builds. But PLEASE BE WARNED the builds are automatically created and untested.
* [welle.io nightly builds](https://welle-io-nightlies.albrechtloh.de/) (Windows, Linux)
* Build artifacts in [Actions](https://github.com/AlbrechtL/welle.io/actions) runs
## Usage
Since welle.io is a GUI program simply start it.
#### Command-line parameters
Parameter | Description
------ | ----------
-h, --help | Show help
-v, --version | Show version
--dump-file | Records DAB frames (*.mp2) or DAB+ superframes with RS coding (*.dab). This file can be used to analyse X-PAD data with XPADxpert (https://www.basicmaster.de/xpadxpert).
--log-file | Log file name. Redirects all log output texts to a file.
#### Keyboard shortcuts & hotkeys
Keystroke | Action
------ | ----------
F1-F12, 1-9, 0, Ctrl+1-9, Ctrl+0 | Play the station no. 'x' in the stations list:
`1` for station no. `1`,
`0` for station no. `10`,
`Ctrl+1` for station no. `11`...
S, Media Play, Media Stop, Media Pause, Media Play/Pause | Start playback/Stop
N, Media next | play next station in list
P, Media Previous | play previous station
M, Volume Mute | mute/unmute
Ctrl+Up, Volume Up | Volume Up
Ctrl+Down, Volume Down | Volume Down
## Supported Hardware
The following SDR devices are supported
* RTL2832U
- [rtl-sdr](http://osmocom.org/projects/sdr/wiki/rtl-sdr)
- [rtl_tcp](http://osmocom.org/projects/sdr/wiki/rtl-sdr#rtl_tcp)
* [Airspy R2 and Airspy Mini ](http://airspy.com/)
- Limitation: Airspy HF+ is not supported due to limited bandwidth
* [I/Q RAW file](https://www.welle.io/devices/rawfile)
* [SoapySDR](https://github.com/pothosware/SoapySDR/): All SDR-devices that are supported by SoapySDR, gr-osmosdr and uhd. These are too many devices to list them all. To see if your SDR is supported, have a look at the lists at [SoapySDR](https://github.com/pothosware/SoapySDR/wiki) and [SoapyOsmo](https://github.com/pothosware/SoapyOsmo/wiki).
* Devices supported by gr-osmosdr are supported via [SoapyOsmo](https://github.com/pothosware/SoapyOsmo/wiki)
* Devices supported by uhd are supported via [SoapyUHD](https://github.com/pothosware/SoapyUHD/wiki)
* Notes
- LimeSDR: Connect the antenna to the RX1_W port and configured SoapySDR antenna option to `LNAW`. `SoapySDRUtil --probe=driver=lime` may show other possible options.
- USRP: Configured SoapySDR driver arguments option to `driver=uhd`. Configure also antenna and clock source option. To list possible values for antenna and clock source use the command `SoapySDRUtil --probe=driver=uhd`.
- One limitation is of course that the SDR devices must be tunable to the DAB+ frequencies.
## Building
#### General Information
The following libraries and their development files are needed.
* Qt 6.8 or above
* libfftw3
* libfaad
* librtlsdr
* libusb
* libmpg123
* libairspy
* libmp3lame
* libsoapysdr
#### Debian / Ubuntu Linux
This section shows how to compile welle.io on Debian or Ubuntu (tested with Ubuntu 24.04).
1. Install the base requirements
```
sudo apt install git build-essential
```
2. Install the following non-Qt packages
```
sudo apt install libfaad-dev libmpg123-dev libfftw3-dev librtlsdr-dev libusb-1.0-0-dev mesa-common-dev libglu1-mesa-dev libpulse-dev libsoapysdr-dev libairspy-dev libmp3lame-dev libflac++-dev xxd
```
3. Install the Qt via the [Qt online installer](https://www.qt.io/download-qt-installer-oss). It is recommend to use the newest Qt version. Besids Qt you need the additional Qt libraries:
* Qt 5 Compatibility Module
* Qt Charts
* Qt Multimedia
4. Clone welle.io
```
git clone https://github.com/AlbrechtL/welle.io.git
```
5. Start Qt Creator and open the project file `welle.io.pro` inside the folder "welle.io".
6. Build welle.io
7. Run welle.io and enjoy it
#### Windows 11
This section shows how to compile welle.io on Windows 11. Windows 10 and 7 should also be possible but is not tested.
1. Install the Qt via the [Qt online installer](https://www.qt.io/download-qt-installer-oss). It is recommend to use the newest Qt version. Besids Qt you need the additional Qt libraries:
* Qt 5 Compatibility Module
* Qt Charts
* Qt Multimedia
2. Clone welle.io https://github.com/AlbrechtL/welle.io.git e.g. by using [TortoiseGit](https://tortoisegit.org).
3. Clone the welle.io Windows libraries https://github.com/AlbrechtL/welle.io-win-libs.git.
4. Start Qt Creator and open the project file `welle.io.pro` inside the folder "welle.io".
5. Build welle.io
6. Run welle.io and enjoy it
#### macOS, Android and FreeBSD
These operating systems are not maintain, currently. You can find the original compiling insturections in the old [README.md](https://github.com/AlbrechtL/welle.io/blob/fdcd3c588a6e592b9640aad71648dcf6228fa98f/README.md).
#### CMake
As an alternative to Qt Creator, CMake can be used for building welle.io after installing dependencies and cloning the repository. On Linux, you can also use CMake to build [**welle-cli**](#welle-cli), the command-line backend testing tool that does not require Qt.
1. Create a build directory inside the repository and change into it
```
mkdir build
cd build
```
2. Run CMake. To enable support for RTL-SDR add the flag `-DRTLSDR=1` (requires librtlsdr) and for SoapySDR add `-DSOAPYSDR=1` (requires SoapySDR compiled with support for each desired hardware, e.g. UHD for Ettus USRP, LimeSDR, Airspy or HackRF). By default, CMake will build both welle-io and welle-cli. Use `-DBUILD_WELLE_IO=OFF` or `-DBUILD_WELLE_CLI=OFF` to compile only the one you need.
```
cmake ..
```
or to enable support for both RTL-SDR and Soapy-SDR:
```
cmake .. -DRTLSDR=1 -DSOAPYSDR=1
```
If you wish to use KISS FFT instead of FFTW (e.g. to compare performance), use `-DKISS_FFT=ON`.
3. Run make (or use the created project file depending on the selected generator)
```
make
```
4. Install it (as super-user)
```
make install
```
5. Run welle.io and enjoy it
## welle-cli
If you compile welle-io with [`cmake`](#cmake-instead-of-qt-creator-windows-linux-macos) you will also get an executable called **welle-cli** which stands for welle-io **c**ommand **l**ine **i**nterface.
#### Usage of welle-cli
Receive using RTLSDR, and play with ALSA:
`welle-cli -c channel -p programme`
Read an IQ file and play with ALSA: (IQ file format is u8, unless the file ends with FORMAT.iq)
`welle-cli -f file -p programme`
Use -D to dump FIC and all programmes to files:
`welle-cli -c channel -D`
Use -w to enable webserver, decode a programme on demand:
`welle-cli -c channel -w port`
Use -Dw to enable webserver, decode all programmes:
`welle-cli -c channel -Dw port`
Use `-C 1 -w` to enable webserver, decode programmes one by one in a carousel.
Use `-C N -w` to enable webserver, decode programmes N by N in a carousel.
This is useful if your machine cannot decode all programmes simultaneously, but you still want to get an overview of the ensemble.
By default, welle-cli will switch every 10 seconds.
With the `-P` option, welle-cli will switch once DLS and a slide were decoded, staying at most for 80 seconds on a given programme.
welle-cli -c channel -C 1 -w port
welle-cli -c channel -PC 1 -w port
Example: `welle-cli -c 12A -C 1 -w 7979` enables the webserver on channel 12A, please then go to http://localhost:7979/ where you can observe all necessary details for every service ID in the ensemble, see the slideshows, stream the audio (by clicking on the Play-Button), check spectrum, constellation, TII information and CIR peak diagramme.
#### Streaming output options
By default, `welle-cli` will output in mp3 if in webserver mode.
With the `-O` option, you can choose between mp3 and flac (lossless) if FLAC support is enabled at build time.
#### Backend options
`-u` disable coarse corrector, for receivers who have a low frequency offset.
Use `-t [test_number]` to run a test. To understand what the tests do, please see source code.
#### Driver options
By default, `welle-cli` tries all enabled drivers in turn and uses the first device it can successfully open.
Use `-F [driver][,driver_args]` to select a specific driver and optionally pass arguments to the driver.
This allows to select the `rtl_tcp` driver (which is not auto-detected) and pass the hostname or IP address and port of the rtl_tcp server to it:
welle-cli -C 10B -p GRRIF -F rtl_tcp,192.168.12.34:1234
welle-cli -C 10B -P GRRIF -F rtl_tcp,my.rtl-tcp.local:9876
Right now, `rtl_tcp` is the only driver that accepts options from the command line.
**Examples**:
welle-cli -c 10B -p GRRIF
welle-cli -f ./ofdm.iq -p GRRIF
welle-cli -f ./ofdm.iq -t 1
## Limitations
* Windows 10 and older are not officially supported.
## Development
You can join the welle.io development. Please visit the [wiki](https://github.com/AlbrechtL/welle.io/wiki) to find more information.
## Profiling
If you build with cmake and add `-DPROFILING=ON`, welle-io will generate a few `.csv` files and a graphviz `.dot` file that can be used
to analyse and understand which parts of the backend use CPU resources. Use `dot -Tpdf profiling.dot > profiling.pdf` to generate a graph
visualisation. Search source code for the `PROFILE()` macro to see where the profiling marks are placed.
## Acknowledgement
I would like to thanks to following open source projects. Without these great works this program would not be possible
* [qt-dab](https://github.com/JvanKatwijk/qt-dab) (In 2017 we forked welle.io from qt-dab)
* [dablin](https://github.com/Opendigitalradio/dablin)
* [Opendigitalradio](https://www.opendigitalradio.org/)
* FFTW
* Qt
## Sponsors
| Free code signing on Windows provided by SignPath.io, certificate by SignPath Foundation |