1
0
mirror of https://github.com/JvanKatwijk/qt-dab.git synced 2025-10-06 00:02:40 +02:00
This commit is contained in:
JvanKatwijk
2017-02-12 20:14:45 +01:00
3 changed files with 131 additions and 111 deletions

202
README.md
View File

@@ -1,19 +1,47 @@
==================================================================
Qt-DAB
==================================================================
Qt-DAB is a Software for Windows, Linux and Raspberry Pi for Digital Audio Broadcasting (DAB and DAB+).
------------------------------------------------------------------
Table of Contents
------------------------------------------------------------------
* [Introduction](#introduction)
* [Configuring using the qt-dab.pro file](#configuring-using-the-qt-dabpro-file)
* [Configuring using CMake](#configuring-using-cmake)
* [Scanning](#scanning)
* [Raspberry PI](#raspberry-pi)
* [Qt](#qt)
* [Ubuntu Linux](#ubuntu-linux)
* [Windows](#windows)
* [Features](#features)
* Installation
* [Windows](#windows)
* [Ubuntu Linux](#ubuntu-linux)
- [Configuring using the qt-dab.pro file](#configuring-using-the-qt-dabpro-file)
- [Configuring using CMake](#configuring-using-cmake)
- [Qt](#qt)
* [Raspberry PI](#raspberry-pi)
------------------------------------------------------------------
Features
------------------------------------------------------------------
* DAB (mp2) and DAB+ (HE-AAC v1, v2 and LC-AAC) decoding
* Slideshow
* Dynamic Label (DLS)
* Both European bands supported:
* VHF Band III
* L-Band
* Spectrum view (incl. constellation diagram)
* Scanning function (scan the subsequent channels in the selected band until a channel is encountered where a DAB signal is detected)
* Detailled information for selected service (SNR, bitrate, frequency, ensemble name, ensemble ID, subchannel ID, protection level, CPU usage, language, 4 quality bars)
* Dumping of the complete DAB channel (produces large raw files!) and playing them again later
* Saving audio as wave file
* Supports various inputs from Airspy, SDR DAB sticks, SDRplay and prerecorded dump (*.raw and *.sdr)
Not implemented:
* DMB (Audio and Video)
* Other bands than used for terrestrical broadcasting
* HackRF
------------------------------------------------------------------
Introduction
@@ -50,11 +78,82 @@ Again, as the Qt-DAB version has to run on a headless RPI 2,
an option is included to configure the sound output to deliver its
samples through a TCP connection.
The constellation diagram now shows - if configured - the phase difference
of the carriers in the ofdm symbol with the corresponding carriers of the
previous symbols. The constellation of high quality signals shows 4 dots,
one in each corner of the black square.
=============================================================================
=======
------------------------------------------------------------------
Windows
------------------------------------------------------------------
There is an executable to be found under https://github.com/JvanKatwijk/qt-dab/releases
If you want to compile it yourself, please install Qt through their online installer, see https://www.qt.io/
------------------------------------------------------------------
Ubuntu Linux
------------------------------------------------------------------
For generating an executable under Ubuntu, you can put the following
commands into a script.
1. Fetch the required components
sudo apt-get update
sudo apt-get install qt4-qmake build-essential g++
sudo apt-get install libsndfile1-dev qt4-default libfftw3-dev portaudio19-dev
sudo apt-get install libfaad-dev zlib1g-dev rtl-sdr libusb-1.0-0-dev mesa-common-dev
sudo apt-get install libgl1-mesa-dev libqt4-opengl-dev libsamplerate-dev libqwt-dev
cd
2. Fetch the required libraries
a) Assuming you want to use a dabstick as device, fetch a version of the library for the dabstick
wget http://sm5bsz.com/linuxdsp/hware/rtlsdr/rtl-sdr-linrad4.tbz
tar xvfj rtl-sdr-linrad4.tbz
cd rtl-sdr-linrad4
sudo autoconf
sudo autoreconf -i
./configure --enable-driver-detach
make
sudo make install
sudo ldconfig
cd
b) Assuming you want to use an Airspy as device, fetch a version of the
library for the Airspy
sudo apt-get install build-essential cmake libusb-1.0-0-dev pkg-config
wget https://github.com/airspy/host/archive/master.zip
unzip master.zip
cd host-master
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
Clean CMake temporary files/dirs:
cd host-master/build
rm -rf *
3. Get a copy of the Qt-DAB sources
git clone https://github.com/JvanKatwijk/qt-dab.git
cd qt-dab
4. Edit the qt-dab.pro file for configuring the supported devices and other
options. Comment the respective lines out if you don't own an Airspy or an SDRplay.
5. Build and make
qmake qt-dab.pro
make
You could also use QtCreator, load the qt-dab.pro file and build the executable.
------------------------------------------------------------------
Configuring using the qt-dab.pro file
------------------------------------------------------------------
@@ -125,15 +224,6 @@ For other options, see the CMakeLists.txt file.
Note that CMake expects Qt5 to be installed.
------------------------------------------------------------------
Scanning
------------------------------------------------------------------
The Qt-DAB software provides a "scanning" facility, pushing the "scan"
button will cause the software to scan the subsequent channels in the
selected band until a channel is encountered where a DAB signal is detected.
------------------------------------------------------------------
Raspberry PI
------------------------------------------------------------------
@@ -163,78 +253,8 @@ to have the spectrum in the configuration, be aware of the binding
of the qwt library (i.e. Qt4 and a qwt that uses Qt5 does not work well)
------------------------------------------------------------------
Ubuntu Linux
------------------------------------------------------------------
For generating an executable under Ubuntu, you can put the following
commands into a script.
1. Fetch the required components
sudo apt-get update
sudo apt-get install qt4-qmake build-essential g++
sudo apt-get install libsndfile1-dev qt4-default libfftw3-dev portaudio19-dev
sudo apt-get install libfaad-dev zlib1g-dev rtl-sdr libusb-1.0-0-dev mesa-common-dev
sudo apt-get install libgl1-mesa-dev libqt4-opengl-dev libsamplerate-dev libqwt-dev
cd
2. Fetch the required libraries
a) Assuming you want to use a dabstick as device, fetch a version of the library for the dabstick
wget http://sm5bsz.com/linuxdsp/hware/rtlsdr/rtl-sdr-linrad4.tbz
tar xvfj rtl-sdr-linrad4.tbz
cd rtl-sdr-linrad4
sudo autoconf
sudo autoreconf -i
./configure --enable-driver-detach
make
sudo make install
sudo ldconfig
cd
b) Assuming you want to use an Airspy as device, fetch a version of the
library for the Airspy
sudo apt-get install build-essential cmake libusb-1.0-0-dev pkg-config
wget https://github.com/airspy/host/archive/master.zip
unzip master.zip
cd host-master
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
Clean CMake temporary files/dirs:
cd host-master/build
rm -rf *
3. Get a copy of the Qt-DAB sources
git clone https://github.com/JvanKatwijk/qt-dab.git
cd qt-dab
4. Edit the qt-dab.pro file for configuring the supported devices and other
options. Comment the respective lines out if you don't own an Airspy or an SDRplay.
5. Build and make
qmake qt-dab.pro
make
You could also use QtCreator, load the qt-dab.pro file and build the executable.
------------------------------------------------------------------
Windows
------------------------------------------------------------------
There is an executable to be found under https://github.com/JvanKatwijk/qt-dab/releases
============================================================================

View File

@@ -65,7 +65,7 @@
</rect>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Push this button for saving the audio output into a file. First push will show a menu for file selection. &gt;&lt;/p&gt;&gt;&lt;p&gt;Push again to stop recording.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Push this button for saving the audio output into a file. First push will show a menu for file selection. &lt;/p&gt;&lt;p&gt;Push again to stop recording.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>audio</string>
@@ -81,7 +81,7 @@
</rect>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Push this button for saving the raw input. Pushing will cause a menu to appear where a filename can be selected. &gt;&lt;/p&gt;&gt;&lt;p&gt;Push again to stop recording.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Push this button for saving the raw input. Pushing will cause a menu to appear where a filename can be selected. Please note the big filesizes!&lt;/p&gt;&lt;p&gt;Push again to stop recording. You can reload it by using the file input (*.sdr) option. &lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string>dump</string>
@@ -319,7 +319,7 @@
</rect>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Copyright (C) 2016, 2017 Jan van Katwijk (J.vanKatwijk@gmail.com), Lazy Chair Programming&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;QtDAB is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Copyright (C) 2016, 2017 Jan van Katwijk (J.vanKatwijk@gmail.com), Lazy Chair Programming&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Qt-DAB is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="text">
<string/>
@@ -335,7 +335,7 @@
</rect>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Indicator for time synchronization. Green means that the software recognizes that there are DAB frames, not necessarily that the software is able to decode the DAB stream.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Indicator for time synchronization&lt;/p&gt;&lt;p&gt;Green means that the software recognizes that there are DAB frames, not necessarily that the software is able to decode the DAB stream.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
@@ -354,7 +354,7 @@
</rect>
</property>
<property name="toolTip">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A signal Noise indicator. In general: higher is better, Do not take the value as a serious measure of the snr, that strongly depending on the device. and the amount of filtering applied in the device.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;A signal Noise indicator&lt;/p&gt;&lt;p&gt;In general: higher is better. But do not take the value as a serious measure of the SNR, it strongly dependson the device and the amount of filtering applied in the device.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>

View File

@@ -619,7 +619,7 @@ void RadioInterface::init_your_gui (void) {
crcErrors_2 -> hide ();
if (show_crcErrors) {
QString file = QFileDialog::getSaveFileName (this,
tr ("Save file .."),
tr ("Save file ..."),
QDir::homePath (),
tr ("Text (*.txt)"));
file = QDir::toNativeSeparators (file);
@@ -998,7 +998,7 @@ bool r = 0;
r = inputDevice -> restartReader ();
qDebug ("Starting %d\n", r);
if (!r) {
QMessageBox::warning (this, tr ("sdr"),
QMessageBox::warning (this, tr ("Warning"),
tr ("Opening input stream failed\n"));
return;
}
@@ -1276,7 +1276,7 @@ QString file;
inputDevice = new airspyHandler (dabSettings, &success);
if (!success) {
delete inputDevice;
QMessageBox::warning (this, tr ("sdr"),
QMessageBox::warning (this, tr ("Warning"),
tr ("Airspy not found\n"));
inputDevice = new virtualInput ();
resetSelector ();
@@ -1293,7 +1293,7 @@ QString file;
inputDevice = new extioHandler (dabSettings, &success);
if (!success) {
delete inputDevice;
QMessageBox::warning( this, tr ("sdr"), tr ("extio: no luck\n") );
QMessageBox::warning( this, tr ("Warning"), tr ("extio: no luck\n") );
inputDevice = new virtualInput();
resetSelector ();
}
@@ -1308,7 +1308,7 @@ QString file;
inputDevice = new rtl_tcp_client (dabSettings, &success);
if (!success) {
delete inputDevice;
QMessageBox::warning( this, tr ("sdr"), tr ("rtl_tcp: no luck\n") );
QMessageBox::warning( this, tr ("Warning"), tr ("rtl_tcp: no luck\n") );
inputDevice = new virtualInput();
resetSelector ();
}
@@ -1322,7 +1322,7 @@ QString file;
inputDevice = new sdrplay (dabSettings, &success);
if (!success) {
delete inputDevice;
QMessageBox::warning (this, tr ("sdr"),
QMessageBox::warning (this, tr ("Warning"),
tr ("SDRplay: no library\n"));
inputDevice = new virtualInput ();
resetSelector ();
@@ -1337,8 +1337,8 @@ QString file;
inputDevice = new dabStick (dabSettings, &success);
if (!success) {
delete inputDevice;
QMessageBox::warning (this, tr ("sdr"),
tr ("DAB-Stick not found\n"));
QMessageBox::warning (this, tr ("Warning"),
tr ("DAB Stick not found! Please use one with RTL2832U or similar chipset!\n"));
inputDevice = new virtualInput ();
resetSelector ();
}
@@ -1351,7 +1351,7 @@ QString file;
// We always have fileinput!!
if (s == "file input (.raw)") {
file = QFileDialog::getOpenFileName (this,
tr ("open file ..."),
tr ("Open file ..."),
QDir::homePath (),
tr ("raw data (*.raw)"));
file = QDir::toNativeSeparators (file);
@@ -1365,7 +1365,7 @@ QString file;
else
if (s == "file input (.sdr)") {
file = QFileDialog::getOpenFileName (this,
tr ("open file ..."),
tr ("Open file ..."),
QDir::homePath (),
tr ("raw data (*.sdr)"));
file = QDir::toNativeSeparators (file);
@@ -1560,8 +1560,8 @@ SF_INFO *sf_info = (SF_INFO *)alloca (sizeof (SF_INFO));
QDir::homePath (),
tr ("raw data (*.sdr)"));
file = QDir::toNativeSeparators (file);
if (!file. endsWith (".sdr", Qt::CaseInsensitive))
file. append (".sdr");
if (!file.endsWith (".sdr", Qt::CaseInsensitive))
file.append (".sdr");
sf_info -> samplerate = INPUT_RATE;
sf_info -> channels = 2;
sf_info -> format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
@@ -1591,10 +1591,10 @@ SF_INFO *sf_info = (SF_INFO *)alloca (sizeof (SF_INFO));
QString file = QFileDialog::getSaveFileName (this,
tr ("Save file ..."),
QDir::homePath (),
tr ("Sound (*.wav)"));
tr ("PCM wave file (*.wav)"));
file = QDir::toNativeSeparators (file);
if (!file. endsWith (".wav", Qt::CaseInsensitive))
file. append (".wav");
if (!file.endsWith (".wav", Qt::CaseInsensitive))
file.append (".wav");
sf_info -> samplerate = 48000;
sf_info -> channels = 2;
sf_info -> format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;