mirror of
https://github.com/JvanKatwijk/qt-dab.git
synced 2025-10-06 00:02:40 +02:00
xxx
This commit is contained in:
202
README.md
202
README.md
@@ -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
|
||||
|
||||
============================================================================
|
||||
|
||||
|
@@ -65,7 +65,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Push this button for saving the audio output into a file. First push will show a menu for file selection. ></p>><p>Push again to stop recording.</p></body></html></string>
|
||||
<string><html><head/><body><p>Push this button for saving the audio output into a file. First push will show a menu for file selection. </p><p>Push again to stop recording.</p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>audio</string>
|
||||
@@ -81,7 +81,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Push this button for saving the raw input. Pushing will cause a menu to appear where a filename can be selected. ></p>><p>Push again to stop recording.</p></body></html></string>
|
||||
<string><html><head/><body><p>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!</p><p>Push again to stop recording. You can reload it by using the file input (*.sdr) option. </p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>dump</string>
|
||||
@@ -319,7 +319,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>Copyright (C) 2016, 2017 Jan van Katwijk (J.vanKatwijk@gmail.com), Lazy Chair Programming</p><p><br/></p><p>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.</p><p><br/></p></body></html></string>
|
||||
<string><html><head/><body><p>Copyright (C) 2016, 2017 Jan van Katwijk (J.vanKatwijk@gmail.com), Lazy Chair Programming</p><p></p><p>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.</p><p><br/></p></body></html></string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
@@ -335,7 +335,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>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.</p></body></html></string>
|
||||
<string><html><head/><body><p>Indicator for time synchronization</p><p>Green means that the software recognizes that there are DAB frames, not necessarily that the software is able to decode the DAB stream.</p></body></html></string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
@@ -354,7 +354,7 @@
|
||||
</rect>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string><html><head/><body><p>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.</p></body></html></string>
|
||||
<string><html><head/><body><p>A signal Noise indicator</p><p>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.</p></body></html></string>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
|
30
radio.cpp
30
radio.cpp
@@ -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;
|
||||
|
Reference in New Issue
Block a user