Git Product home page Git Product logo

jvankatwijk / qt-dab Goto Github PK

View Code? Open in Web Editor NEW
289.0 29.0 63.0 469.7 MB

Qt-DAB, a general software DAB (DAB+) decoder with a (slight) focus on showing the signal

Home Page: http://www.sdr-j.tk

License: GNU General Public License v2.0

CMake 2.52% C++ 61.04% C 21.51% QMake 1.55% Shell 0.08% Makefile 12.65% HTML 0.62% OpenEdge ABL 0.02% Python 0.01%
dab-decoder dabplus sdrplay-devices airspy hackrf lime rtlsdr-dongle sdrplay sdrplay-rsp-devices adalm-pluto-sdr signal-processing aac-decoding

qt-dab's Introduction

Qt-DAB-6 Build Status


6.1



Qt-DAB-6 is software for Linux, Windows, MacOS and Raspberry Pi for listening to terrestrial Digital Audio Broadcasting (DAB and DAB+).


Recent changes

Note: It seems that the AppImage (built under U20) does not handle all recordings well.

Both a version built under U20 and one under U24 show (for some recordings) different (less good) behaviour that the version on my development Fedora Vox. I am looking into it

The newly written riff reader was updated, some int32's should be int64 (for large files)

changes august 2024

When selecting a (classic) DAB service, the RS and AAV quality indicators are hidden.

Fixed CMakeLists.txt

Fixed potentail error in xml-reader

I work a lot (testing and developing) using file input. The file selector now "remembers" the file type and the path used, and will set the selection widget accordingly

SDRplay has added the RSP1B and the RSPSx-II, these devices are supported now when selecting SDRplay-v3

changes july 2024

Writing a separate simple "wav" reader and writer, since the snd lib on Fedora does not support samplerates needed for DAB.

Adding saving the selected frequency on ".sdr" files, such that for those files and xml files the frequency in the DAB software is set to it was at recording time.

changes april/may 2024

First of, one of the problems with the implemented sound handler was that sound did not always work after restarting the program with a saved - and therefore selected - audiostream. 6.X - has now two (sub)systems for the sound handling. Next to the portaudio interface that was the default for a long time, the sound interface is provided by Qt itself. If the katter audio interface is selected, a volume slider is shown on the main widget.

As known, most DAB ensembles are transmitted by more than a single transmitter. All transmitters in a so-called Single Frequency Network transmit the same ensemble. However, each transmitter adds a little data with which the transmitter can be identified. Other than with e.g. FM or AM, where receiving signal at the same time from different transmitters, transmitting the same audio is hardly enjoyable, with digital modes, the software is able to select data from the strongest signal. In my neighbourhoodm there are (for a couple of ensembles) four transmitters within 20 Km as shown on the table below.

New is that while Qt-DAB decodes data from the strongest signal, Qt-DAB-6.X has a special mode, dxMode, in which it tries to identify as much as possible transmitters that are transmitting the same signal. The TII decoding was adapted for this purpose. All transmitters detected will be shown on the map if the map handler is activated.

Selecting the "dx mode" (with a checkbox on the configuration widget) causes the software to display all transmitters the identification of which could be extracted from the signal.

6.X

The table shows (column 1) which transmitter delivers the strongest signal.

If the dxMode is NOT selected, the transmitter's name and distance are - as always - shown on the botton line in the main widget.

In some cases, when the correlation results of the two are app the same, the oftware switches (too) frequently between two transmitters, detrimental for the detection of transmitters with lower power arrivals. To stabilize the result of thecorrelation process, a selector ("corr") is added to the configuration and control widget.

Very experimental is the journaline decoder. journaline is a kind of teletext on DAB, which is - as far as I can see - mostly transmitted through data subservices. However, since journaline is NOT transmitted in the region where I live, I have to use a (very) few recordings for testing. So, correct functioning is NOT guaranteed.

6.X

Qt-DAB-6.X seems reasonably stable, that is why - based on the latest sources - the three installers for Windows and the AppImage for x64 Linux were re-created. Furthermore, the documentation is upgraded to describe the Qt-DAB-6.X version

The manual contains now a (more or less) up-to-date version of a "build" description. Documentation (i.e. the "manual") can be found in the docs section of this repository and a copy is available in the releases section.


About Qt-DAB-6.5

Qt-DAB-6.5 is the stable version of Qt-DAB, i.e. a version with a windows installer (actually, there are two) and a Linux x64 AppImage.

6.5 6.4

Qt-DAB-6.5 has undergone some improvements that were - for a long time - on my own wishlist, while some other modifications are based on user's requests. Since when using Qt-DAB as regular radio device, I switch audio between only a few services, their names are listed in my "list of favorites". The current version therefore shows on start up the list of favorites. Of course when selecting a service, the software "knows" tall services in the ensemble of the selection, the widget therefore lets you choose between the view on the current ensemble and the view on the favorites.

In the ensembleview the services found in the currently active channel are displayed. In the list, it shows that services that are also belonging to the favorites, are marked. Clicking on the element in the right column adds or removes a service from the favorites. (Of course, in the list of favorites, clicking on the right hand column of the service in question removes the service).

In a previous version, control on the visibility of the "technical widget" was by clicking on the name of the selected service in the right hand part of the widget. Of course that is unclear, therefore a small icon is added instead.

As in the previous version, control on muting the audio is delegated to the icon of the loadspeaker. The speaker indication tells whether or not sound is "on".

Based on user's request, input can be obtained from "spy-servers", i.e. remote from over the internet. Such a spy server can handle AIRspy devices and RT2832 based dabsticks. Of course the connection should be able to handle data with a reasonable (read: high) bandwidth. For 16 bit data, i.e. a sample takes 2 x 2 bytes, one needs 10MB/s (slightly ore actually since the data is transmitted as packages with a header).

Also, the Soapy interface was rewritten and (seems to) work(s) fine.

While the possibility of saving DLS data was implemented some time ago, there is now also a possibility of putting the current DLS text on the clipboard and saving it. Just click with the right hand mouse button on the text.

Table of Contents

Introduction

Qt-DAB-XX is a rich implementation of a DAB decoder for use on Linux and Windows based PCs, including some ARM based boards, such as the Raspberry PI 2 and up. It can be used with a variety of SDR devices, including DABsticks, all models of the SDRplay, Airspy etc.

The current version is 6.5. Versions 5.5 is still available and can be built, using the same set of sources as the current one. A development version, named Qt-BAB-6X, can be found in the "qt-dab-RC" directory.

Precompiled versions for Linux-x64 (AppImage) and Windows (an installer) are, as usual, available.

Thanks to Richard Huber, Qt-DAB can be compiled on the Mac.

Features

  • DAB (mp2) and DAB+ (HE-AAC v1, HE-AAC v2 and AAC-LC) decoding
  • MOT SlideShow (SLS)
  • Dynamic Label (DLS) with the possibility of saving dynamic the Label text by right clicking with the mouse, or saving all dynamic label texts - augmented with channel and time info - in a file,
  • DAB is now transmitted by default in the VHF Band III, there are options to select the L-Band, and it is possible to receive data from user defined channels.
  • While Mode I is the mode for DAB, Qt-DAB offers an option to interpret data modelled in Mode II or Mode IV,
  • There is a focus on viewing the signal: next to showing the spectrum of the received signal and a constellation diagram of the decoded signal, a view on the correlation of the signal and the TII spectrum can be selected. Furthermore, a view on the transition from the NULL period to the first datablock, a viewe on the impact of the channel on the signal, and a view on the frequency offsets of the carriers in the decoded signal can be selected. Finally, in a separate widget, the development over time of the SNR can be made visible.
  • automatic reconfiguration of services.
  • Detailed information on reception and selected service (SNR, bitrate, frequency, ensemble name, ensemble ID, subchannel ID, used CUs, protection level, CPU usage, program type, language, alternative FM frequency if available, 4 quality bars),
  • Frequency spectrum of the resulting audio as well as "strength" meters of the audio stream are made visible,
  • The TII data is mapped upon a transmitter's name, and display of TII (Transmitter Identification Information) data when transmitted,
  • Possibility of displaying a map with position(s) of received transmitter(s),
  • Favorites for easy switching of programs in different ensembles (see section Favorites),
  • Dumping of the input data of the DAB channel (Warning: produces large raw files!) into .sdr files or .xml file formats and playing them again later (see section on xml format),
  • Saving audio as uncompressed ".wav" files (48000 two channels), and saving aac frames from DAB+ services for processing by e.g. VLC,
  • Saving the ensemble content description: audio and data streams, including almost all technical data into a text file readable by e.g LibreOfficeCalc
  • Advanced scanning function (scan the band, show the results on the screen and save a detailed description of the services found in a file),
  • ip output: when configured the ip data - if selected - is sent to a specified ip address (default: 127.0.0.1:8888),
  • TPEG output: when configured the data is sent as datagrams to port 8888;
  • EPG detection and building up a time table,
  • Supports as input device:
    • SDR DAB sticks (RTL2838U or similar),
    • HACKRF One,
    • Airspy, including Airspy mini,
    • SDRplay (RSP I, RSP 1A and 1B, RSP II, RSP Duo and RSP Dx), with separate entries for v2 and v3 library
    • limeSDR,
    • Adalm Pluto,
    • untested UHD (anyone wants to help testing?)
    • Soapy, a renewed soapy interface driver is even able to map other samplerates than the required 2048000 (limited to the range 2000000 .. 4000000);
    • input from a spyServer,
    • ExtIO (experimental, Windows only),
    • rtl_tcp servers, = spy servers.
  • Always supported input from:
    • prerecorded dump (.raw, .iq and .sdr),
    • .xml and .uff format files.
  • Scheduling the start of (channel:service) pairs or operations as frame dump or audio dump, for up to 7 days ahead.
  • background services. Since 4.351 it is possible to run an arbitrary number of DAB+ audioservices (from the current ensemble) as background service with the output sent to a file.
  • Clean device interface, easy to add other devices.

Partly implemented:

  • TPEG: when configured, TPEG messages are being sent to a TCP port; sources for a simple client are part of the source distribution.
  • Journaline (an untested Journaline implementation is part of the sources).
  • Other bands than used for terrestrial broadcasting in Europe (like DAB over cable)

ℹ️ Note: While the 2.13 support for SDRplay devices is able to handle the RSP 1, RSP II, RSP Ia and RSP duo, the 3.XX support handles all SDRplay RSP's except the original RSP 1. It is recommended to use the 3.0X support library.

Widgets and scopes

6.2

The full GUI for Qt-DAB 6.5 consists of 4 (four) larger widgets, The mainWidget (see picture) is always visible, various elements in the widget control the visibility of the other 3 (three). The main widget of Qt-DAB provides all means for selecting a channel, and selecting a service.

Transmission of most services carryone or more slides, such slides are shown, if no slide is shown a default slide is shown.

If configured, the main widget displays the name of the transmitter received, and the distance and azimuth to the (specification of the) receiving station.s Furthermore, the TII elements (i.e. the identifiction of the transmitter, here 04 05, are shown. New is the addition of the height from which the transmitter is working.

  • touching the ensemble name (NPO (8001) in the picture) makes the content table, i.e. an overview of the content of the ensemble, visible (or if it is visible, touching will hide it);
  • touching the small icon left of the name of the selected service (here left of the bold text NPO Radio 5), will show (or hide) the technical widget, a widget showing all technical details as well as strength indicators and a spectrum of the audio of the selected service;
  • touching the icon showing a speaker controls the muting of the signal, if no audio is generated, or if the signal is muted, the icon will show this;
  • touching with the right hand mouse button the text of the dynamic label (here, in italic ("ABC - Poisin Arrow") will whow a small menu to put the text on the clipboard;
  • touching the button labeled scan controls the visibility of a the scan handler widget;
  • touching the button labeled http controls the http handler with which a map on which rhe transmitters will be shown;
  • touching the button labeled spectrum controls the visibility of the spectrum widget, a widget that contains information on the DAB signal itself;
  • touching the button labeled show controls controls the visibility of the so-called configuration and control widget, a widget that contains numerous settings for this software;
  • touching the button labeled favorites will switch the visibility of the list of services shown between the ensemble view and the favorites view; touching the button labeled "scanlist shows (or hides) the scan list, i.e the list of services seen at the most recent scan.

Obviously, the colors of the buttons, as well as the font, the font size and the font color of the service list shown can be set by the user.

Selecting a service (just clicking with the left mouse button on its name) is possible in both views, i.e. both the ensemble view and the favorites view. Of course when selecting a service in the favorites view it might take some time before the software has switch over to the appropriate channel, has received the esemble information of that channel and has selected the service in that channel.

Selecting itself is simply by clicking on the service name. The effect of clicking into the right hand column depends on the viewmode. In the **ensembleview ** mode, clicking in the right column indicates adding the service to or removing it from the favorites. In the favorites column it just means removing the element from the favorites.

6.1

The technical widget shows - as the name suggests - all technical details of the selected audio service. If the service is also transmitted on FM the FM frequency - derived from additional data in the DAB data - is shown as well.

6.1

The spectrum scope shows the spectrum of the incoming DAB signal. One sees clearly that the width of the signal is app 1.5 MHz. To the right one sees the signal constellation. The latter shows the mapping from the complex signals onto their real and imaginary components.

6.1

The ideal form of the spectrum - and the signal constellation as shown in the IQScope - is not seen often.

6.1

The correlation scope shows the correlation between the incoming signal and some predefined data. Correlation is helpful in finding the precise start of the (relevant) data in the input stream. The picture shows that the signal from more than one transmitter is received. If the distance to the current transmitter is known, the display shows the estimated distances - from the receiver location - to the other peaks as well.

6.1

The NULL scope shows the samples in the transition from NULL period to the first data block of a DAB frame. The software detects (computes) the first sample following the NULL period, needed for collecing the data for decoding.

6.1

The TII scope shows the spectrum of the data in the NULL period, since that data contains the TII (Transmitter Identification Information) data in an encoded form;

6.1

The channel scope shows the channel response on the transmitted data, i.e. the deformation of the transmitted signal. The picture shows the cyan colored line, i.e. the channel response on the amplitude, and the red line, i.e. the channel effects on the phase of the samples.

6.1

The deviation scope shows the mean deviation of the carriers in the decoded signal, before mapping the carriers to bits. The Y-axis is in Hz.

8.1

The configuration and control widget contains check boxes and buttons with which the configuration of the decoding process can be influenced. The top rightshows the 3 selectors for the font with which the services in the service list are dsiplayed.

At starting up Qt-DAB for the (very) first time, the widget will show to allow selection of an input device (the combobox at the bottom line right).

Scan control

6.1

A separate widget - visibility under control of the scan button on the main widget - provides the control ob scanning.

The show button controls the visibility of the skiptable, skiptables can be load and stored in either the ".ini" file (use the "...default" buttons, or can be kept as xml file on a user defined place (the other load/store buttons).

The small table at the bottom of the widget is just for convenience, on scanning it will display the number of services found in the channels visited.

A note on showing a map

6.1

Since some time the Qt-DAB versions have a button labeled http, when touched, a small webserver starts that can show the position(s) of the transmitter(s) received on the map.

By default, on starting the server, the "standard" browser on the system will be invoked, listening to port 8080. The configuration (configuration/control) widget contains a selector for switching this off, so that one might choose his/hers own browser.

The feature will not work if

  • handling the TII database is not installed on the system, and/or
  • you did not provide your "home" coordinates.

When running a precompiled version of Qt-DAB (i.e. an AppImage or a Windows installer from this repository), installing the database is simple, just touch the button labeled "load table".

Otherwise, you have to install a small library first (for Linux x64 or the RPI), just see the manual. If that fails a precomputed database is available in this repository, just unpack the file "tiiFile.zip", copy the resulting ".txdata.tii" file to your home directory. (Due to licencing issues the code to upload a database is proprietary).

Adding the receiver coordinates is simple, touch the button "coordinates" on the configuration and control widget and a small widget appears where the data can be entered.

Documentation

An extensive user's guide - in PDF format - for the 6.4 version can be found in the "docs" section of the source tree. The documentation contains a complete description of the widgets, of the values in the .ini file, on configuring for creating an executable (Linux), and even a complete description on how to add a device to the configuration. Note that not all changes done in 6.5 are covered in the current manual.

Qt-DAB documentation

Installation on Windows

For Windows an installer can be found in the releases section, https://github.com/JvanKatwijk/qt-dab/releases. The installer will install the executable as well as required libraries.

The installer will also call the official installer for the dll implementing the 2.3 api for getting access to the SDRplay devices.

Installation on Linux-x64

For Linux-x64 systems, an appImage can be found in the releases section, https://github.com/JvanKatwijk/qt-dab/releases. The appImage contains next to the executable qt-dab program, the required libraries but not the support libraries for the configured devices

Building an executable for Qt-DAB: a few notes

Of course it is possible to generate an executable, a separate document is available that contains a complete script for Ubuntu type Linux versions.

The basis steps for generating an executable are straightforward, It is strongly advised to use qmake/make for the compilation process, the qt-dab-6.X.pro file contains (much) more configuration options than the CMakeLists.txt file does.

Note that the scheme presented below applied to "bullseye" on the RPI, i.e. a Linux variant. While for Debian derived distributions (e.g. Ubuntu) this scheme probably works more or less directly, For other distributions names of the library packahes may be different. Note that in all cases, the development versions are required.

For Windows the easiest approach is to install msys/mingw.

Step 1

  • ℹ️ In the qt-dab sourcetree, the sources for 6.5 are in the subdirectory qt-dab-6.5 and for qt-dab-5.x in the subdirectory qt-dab-s5

  • :informaation_source: Qt-DAB uses - as the name suggests - the Qt framework, for the time being still the version 5, it uses further the Qwt library and the gcc compiler suite.

For compiling and installing Qt-DAB on an old RPI3 (64 bits bullseye), I load the required libraries as given below:

  • sudo apt-get update
  • sudo apt-get install git cmake
  • sudo apt-get install qt5-qmake build-essential g++
  • sudo apt-get install pkg-config
  • sudo apt-get install libfftw3-dev portaudio19-dev
  • sudo apt-get install zlib1g-dev
  • sudo apt-get install libusb-1.0-0-dev mesa-common-dev
  • sudo apt-get install libgl1-mesa-dev libqt5opengl5-dev
  • sudo apt-get install libsamplerate0-dev libqwt-qt5-dev qtmultimedia5-dev
  • sudo apt-get install qtbase5-dev libqt5svg5-dev
  • sudo apt-get install libfdk-aac-dev libcurl4-openssl-dev

If libfdk-aac cannot be found, change the configuration to load fibfaad (and obviously, install libfaad).

  • sudo apt-get install libfaad-dev

If you want to use a physical device - e.g. a DABstick, an SDRplay, or an AIRspy you need to install the driver libraries for these devices as well. For most common devices repositories of common Linux distributions contain a driver library. Note that the rtlsdr driver in e.g. Ubuntu repositories needs the kernel module to be blacklisted, see e.g.

Ubuntu (and probably others as well) contain a driver library for the Airspy that works fine (at least for me)

for SDRplay devices one should download the - proprietary - driver software from the SDRplay site. For the AIRspy the bullseye repository provides a library.

Step 2

While there are dozens of configuration options, take note of the following ones:

ℹ️ Note that for including "soapy" in the configuration, soapy software should have been installed. Be aware that the current version is developed on an Fedora box, the soapy library used does not seem compatible with the soapy library on Ubuntu.

ℹ️ Devices like SDRplay, AIRspy, RTLSDR, Lime, and HackRf can be included in the configuration even if no support library is installed. Qt-DAB tries to read in the required library functions when the device is selected in run time.

ℹ️ chose 'CONGIG+=NO_SSE' if you NOT are compiling on/for an X86_64 based system.

One may choose between 'CONFIG += single' or 'CONFIG += double'. In the latter case, all computations in the "front end" are done with double precision arithmetic.

Note that your choice SHOULD be CONFIG += tiiLib (see step 4), the alternative option 'CONFIG+=preCompiled' will NOT work since it requires sources not available under an open source license. However, the built-in libraries allow access to a preconfigured database (see step 4).

Step 3

run qmake (variants of the name are qt5-qmake, qmake-qt5) which generates a Makefile and then run make. Compiling may take some time.

Step 4

Unpack file "tiiFile.zip", and copy the resulting file .txdata.tii from the library subdirectory in the home directory. The unpacked file contains a copy of the database for finding the transmitter's name and location. If Qt-DAB cannot find the file, decoding input will just function, without showing the names and without "maps" option of course.

ℹ️ Note: Building a version on a fresh install of "bullseye" on the RPI gave a version that wouldn't run: The Qt_PLUGIN_PATH was not set. Setting it as given below solved - for me - the problem:

	Qt_5= /usr/lib/arm-linux-gnueabihf/qt5
	export QT_PLUGIN_PATH=$Qt_5/plugins

Using user specified bands

While it is known that the DAB transmissions are now all in Band III, there are situations where it might is desirable to use other frequencies. Qt-DAB provides the opportunity to specify your own band. Specify in a file a list of channels, e.g.

jan	227360
twee	220352
drie	1294000
vier	252650

and pass the file on with the -A command line switch. The channel name is just any identifier, the channel frequency is given in kHz. Your SDR device obviously has to support the frequencies for these channels.

xml-files and support

Clemens Schmidt, author of the QiRX program (https://qirx.softsyst.com/) and me defined a format for storing and exchanging "raw" data: .xml-files. Such a file contains in the first bytes - up to 5000 - a description in xml - as source - of the data contents. This xml description describes in detail the coding of the elements.

As an example, a description of data obtained by dumping Airspy input:

   <?xml version="1.0" encoding="utf-8"?>
   <SDR>
     <Recorder Name="Qt-DAB" Version="6.5"/>
     <Device Name="AIRspy" Model="I"/>
     <Time Value="Wed Dec 18 12:39:34 2019" Unit="UTC"/>
     <!--The Sample information holds for the whole recording-->
     <Sample>
       <Samplerate Value="2500000" Unit="Hz"/>
       <Channels Bits="12" Container="int16" Ordering="LSB">
         <Channel Value="I"/>
         <Channel Value="Q"/>
       </Channels>
     </Sample>
     <!--Here follow one or more data blocks-->
     <Datablocks>
       <Datablock Number="1" Count="375783424" Unit="Channel">
         <Frequency Value="227360" Unit="KHz"/>
         <Modulation Value="DAB"/>
       </Datablock>
     </Datablocks>
   </SDR>

The device handlers in Qt-DAB support the generation of such an .xml file.

While the current implementation for reading such files is limited to a single data block, the reader contains a cont button that, when touched while playing the data, will cause continuous playing of the data in the data block.

Qt-DAB with xml input

The picture shows the reader when reading a file, generated from raw data emitted by the HackRF device.

A Note on soapy

Soapy is not configured for the AppImage. There is an incompatibility between the Soapy library on Ubuntu 20 - where the AppImages are built - and my development environment.

A Note on previous versions

The previous version V5.X is still maintained in a separate subtree and can be compiled with the recent modifications applied as well.

Copyright

Copyright (C)  2016 .. 2024
Jan van Katwijk ([email protected])
Lazy Chair Computing

The Qt-DAB software is made available under the GPL-2.0.
The SDR-J software, of which the Qt-DAB software is a part, 
is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

qt-dab's People

Contributors

andimik avatar atsampson avatar firefox2100 avatar jvankatwijk avatar michaellass avatar michalleonborsuk avatar probonopd avatar russel avatar sjlongland avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

qt-dab's Issues

make fails to compile ofdm-decoder

get this error when running make (Ubuntu 16)

src/ofdm/ofdm-decoder.cpp: In member function ‘void ofdmDecoder::decodeFICblock(int32_t)’:
src/ofdm/ofdm-decoder.cpp:253:1: warning: label ‘fftlabel’ defined but not used [-Wunused-label]
fftlabel:
^~~~~~~~
src/ofdm/ofdm-decoder.cpp:263:1: warning: label ‘toBitsLabel’ defined but not used [-Wunused-label]
toBitsLabel:
^~~~~~~~~~~
src/ofdm/ofdm-decoder.cpp:289:1: warning: label ‘handlerLabel’ defined but not used [-Wunused-label]
handlerLabel:
^~~~~~~~~~~~
src/ofdm/ofdm-decoder.cpp: In member function ‘void ofdmDecoder::decodeMscblock(int32_t)’:
src/ofdm/ofdm-decoder.cpp:317:1: warning: label ‘fftLabel’ defined but not used [-Wunused-label]
fftLabel:
^~~~~~~~
src/ofdm/ofdm-decoder.cpp:322:1: warning: label ‘toBitsLabel’ defined but not used [-Wunused-label]
toBitsLabel:
^~~~~~~~~~~
src/ofdm/ofdm-decoder.cpp:336:1: warning: label ‘handlerLabel’ defined but not used [-Wunused-label]
handlerLabel:;
^~~~~~~~~~~~
src/ofdm/ofdm-decoder.cpp: At global scope:
src/ofdm/ofdm-decoder.cpp:246:5: warning: ‘cnt’ defined but not used [-Wunused-variable]
int cnt = 0;
^~~
Makefile:603: recipe for target 'ofdm-decoder.o' failed
make: *** [ofdm-decoder.o] Error 1

fft view

Hi

I have suggestion for fft view to change end lever form -40 to -30 when dabstic is used.

Regards

Protection level +1 in console window

In fib-processor.cpp I found protlevel 0, 1, 2, and 3, but the best protection level is 1A, not 0A.

That's why an EPG or TPEG (Slovenia, Vienna, Italy) shows

data: protlevel = 2

instead of 3.

So you should add 1 for the output.

Hint: The output in the "Technical Data" window is - on the other hand - correct for all audio services.

Slideshows in appimage not working

Seems the slideshows in the appimage do not work. I only get a very small window without the slide.

grafik

instead of the slide. The console output is

going to show picture img01.jpg
going to write file /tmp/qt-pictures/img01.jpg

The same release (d293dbf) built with Qt-Creator works well.

I guess this is the same problem as under Windows:

going to show picture
setGeometry: Unable to set geometry 5x13+363+124 on QWidgetWindow/'QLabelClassWindow'.
Resulting geometry: 120x13+363+124 (frame: 8, 31, 8, 8, custom margin: 0, 0, 0, 0, minimum size:
0x0, maximum size: 16777215x16777215).

grafik

Building on Debian using CMake

Whilst the CMake build works fine on Fedora Rawhide, it fails on Debian Sid. The problem is that Sid does not have Qt5Declarative. Instead it seems to have Qt5Quick. The line:

find_package (Qt5Declarative REQUIRED)

works fine on Rawhide, but has to be replaced with:

find_package (Qt5Quick REQUIRED)

to get a build on Sid.

2nd open file dialog

I'm using Qt-DAB mainly for prerecorded files.

But it seems (obviously since some versions) that when I chose a raw/iq/sdr file at the start the same window appears again and I have again to specify the file name.

DAB stick not found with RTL2838

I get

DAB stick not found! Please use one with RTL2832U or similar chipset!

I tried running Qt-DAB as normal user and as root (to exclude the possibility of missing permissions).

This is my device:

me@host:~$ lsusb
Bus 002 Device 003: ID 0bda:2838 Realtek Semiconductor Corp. RTL2838 DVB-T
(...)

me@host:~$ lsmod
Module                  Size  Used by
ir_lirc_codec          16384  0
ir_xmp_decoder         16384  0
lirc_dev               20480  1 ir_lirc_codec
ir_sharp_decoder       16384  0
ir_mce_kbd_decoder     16384  0
ir_sanyo_decoder       16384  0
ir_sony_decoder        16384  0
ir_jvc_decoder         16384  0
ir_rc6_decoder         16384  0
ir_rc5_decoder         16384  0
ir_nec_decoder         16384  0
rtl2832_sdr            36864  0
videobuf2_vmalloc      16384  1 rtl2832_sdr
videobuf2_memops       16384  1 videobuf2_vmalloc
videobuf2_v4l2         28672  1 rtl2832_sdr
videobuf2_core         36864  2 rtl2832_sdr,videobuf2_v4l2
v4l2_common            16384  2 rtl2832_sdr,videobuf2_v4l2
videodev              176128  4 rtl2832_sdr,v4l2_common,videobuf2_core,videobuf2_v4l2
media                  24576  1 videodev
r820t                  28672  1
rtl2832                28672  1
i2c_mux                16384  1 rtl2832
dvb_usb_rtl28xxu       36864  1
dvb_usb_v2             36864  1 dvb_usb_rtl28xxu
dvb_core              122880  2 rtl2832,dvb_usb_v2
rc_core                28672  14 ir_sharp_decoder,ir_xmp_decoder,lirc_dev,ir_lirc_codec,dvb_usb_rtl28xxu,ir_rc5_decoder,ir_nec_decoder,ir_sony_decoder,ir_mce_kbd_decoder,ir_jvc_decoder,dvb_usb_v2,ir_rc6_decoder,ir_sanyo_decoder
nvram                  16384  0
msr                    16384  0
gpio_ich               16384  0
(...)

Empty service language

Hi,

I think that FIG0/5 Service Language is not correctly implemented because always shows nothing.

missing file

I can't compile from git:

CMake Error at CMakeLists.txt:506 (add_executable):
Cannot find source file:

./input/virtual-input.cpp

Regards

RTL-TCP port fixed to 1234...

Hi,

At time the RTL-TCP port is fixed to 1234... however this port can be in use in the server.

It's possible to support an user configurable port?

Thank you!

Sound

Actulal version from git has sound problems again, I have also old sdr-j .9985 and sound is ok.

Compiling on RPi3

Getting this error on make:

pi@raspberrypi:~/qt-dab $ make
g++ -c -pipe -flto -ffast-math -O2 -Wall -W -D_REENTRANT -DQT_WEBKIT -DTECHNICAL_DATA -DMOT_DATA -DMSC_DATA__ -D__QUALITY -DHAVE_SPECTRUM -DHAVE_RTLSDR -DHAVE_RTL_TCP -DTII_ATTEMPT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -Isrc -Iincludes -Iincludes/ofdm -Iincludes/backend -Iincludes/backend/audio -Iincludes/backend/data -Iincludes/backend/data/journaline -Iincludes/output -Iincludes/various -Idevices -Idevices/rawfiles -Idevices/wavfiles -I/usr/local/include -I/usr/local/include -I/usr/include/qt4/qwt -I/usr/include/qt4/qwt -I/usr/include/qwt -Iincludes/scopes-qwt6 -Iincludes/scopes-qwt6 -Ioptional-scope -Idevices/rtlsdr-handler -Idevices/rtl_tcp -I../janSpul -I. -I. -o main.o main.cpp
In file included from radio.h:40:0,
from main.cpp:33:
includes/ofdm/ofdm-processor.h:38:26: fatal error: tii_detector.h: No such file or directory
#include "tii_detector.h"
^
compilation terminated.
Makefile:583: recipe for target 'main.o' failed
make: *** [main.o] Error 1

Fedora Rawhide, Qt 5.9, and not building

Fedora Rawhide has now updated to Qt 5.9 beta 3. This introduces that it is not possible to build with the current CMakeFiles.txt. The problem appears to be the naming of the Qt5Declarative package which is no longer present. As with Debian Sid, the name is now Qt5Quick. So with:

#if(LSB_ID_SHORT STREQUAL "Debian")
	find_package(Qt5Quick REQUIRED)
#else()
#	find_package (Qt5Declarative REQUIRED)
#endif()

things built again. I am not sure what a proper solution to this is.

RPI - Amendments of 21/09/2017 - epgdec.h and qdom.h

Hi Jan and other followers !

Attempting to compile the snapshot as at 21/09/2017.

I have commented out rtl-sdr and airspy to leave dabstick, and attempting cmake using Qt5 on Raspbian Stretch.

At around 56% of the subsequent make compilation. in module src/backend/data/motdatabuilder.cpp an error is generated as it is unable to include epgdec.h ( from includes/backend/data/epg ).

I added the required lines into my CMakeList.txt to include the directory and header. The includes file once read, itself found an error, that it could not include qdom.h, which is in QtXml package. I tried including a findpackage for QtXml at the start of my CMakeList.txt, but this command was rejected by cmake.

I am sure that this is my lack of knowledge of cmake. I would be really grateful of any advice about the coding required to get QtXml discoverable by "make" at the above point.

Thank you for any comments

Phil

Path of Image Files

Hi,

I noticed that there are several image files (like slide11.jpg slide22.jpg slide91.jpg slide94.png ) that are provided by the radio stations and shown by qt-dab. Most of them are in the same directory like were the binaries are located (linux-bin folder). However I also found one image in my home directory (most likely because I started qt-dab from there using ~/Programms/qt-dab/linux-bin/qt-dab-0.999 ). Most of these images are corrupt, therefore these files might be leftovers for cases were I had to kill the program (e.g. because I lost the connection to my Raspberry). Anyway I would strongly prefer if these (temporary) images would be placed in some temporary folder (like /tmp/qt-dab ) and not all-over the place. Or is this a side effect of my usage of the -T option to analyse the frame drops?

Raspberry Pi 3 Dropouts

DAB on the raspberry pi 3, is intermittent. I've had anywhere between 1 minute and 15 minutes audio before it just grinds to a halt. It appears that the CPU remains high at 60% yet no audio.

If you can direct me how to test and provide feedback, I will. No errors that I've seen. No crashes. Just a stop in audio.

I'm using a Nooelec NESDR SMART device. Not entirely convinced by it. But reviews say it's just as good as the RTL SDR dongle from rtlsdr.

Thanks
Simon

Prerequisites to get sound

Jvan, thanks for qt-dab!

I've managed to compile it on Debian Stretch (testing):

  • Qt4:
    • install libqwt-dev
    • qt-dab.pro: LIBS += -lqwt
    • QT_SELECT=4 qmake qt-dab.pro
    • make
  • Qt5:
    • install libqwt-qt5-dev
    • qt-dab.pro: LIBS += -lqwt-qt5
    • QT_SELECT=4 qmake qt-dab.pro
    • make

(just in case someone would need for reference)

Using dabstick, channels are found but I get no sound. RAW data can be saved, but not audio file. Technical info looks like:
wdrcosmo
What are minimal prerequisites to decode/play audio? (And what do these 4 horizontal bars mean?)

Thanks,
Andrey

Send to rtltcp port?

Hi Jan,

Not a issue but a short question: Do you know how to send samples (sdr, raw or eti) to rtltcp for other programs on the same machine under Windows?

I thought about analysis with the very great DAB Player from Andreas Gsinn which has Inputs for DABstick, Airspy and Rtltcp, but not for files like your (also great) programs.

dabstick autogain value not restored

The "Autogain" setting for dabstick is saved in ~/.qt-dab.ini but is not restored on next invocation of qt-dab.

The value saved looks like: "autogain=autogain on"

The software is running on Debian GNU/linux (testing) amd64 with Nooelec nesdr. qt-dab was downloaded 9th Mar 17.

N.B. It might be helpful to default this setting to "on" as the receiver does very little with autogain off.

Can't compile

hello,
can't compile after yesterday update. Previously (5 days ago) used to work.
/tmp/ccoKIXXi.ltrans2.ltrans.o: In function RadioInterface::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)': :(.text+0x686): undefined reference toRadioInterface::showCoordinates(float, float)'
collect2: error: ld returned 1 exit status
Makefile:395: recipe for target 'linux-bin/qt-dab-0.999' failed

Just curious what it could be, where I'm doing wrong? Doing this on odroid (clone of Raspberry)

compilation error

I have compilation error:

[100%] Linking CXX executable qt-dab-0.999
/tmp/ccYqk3rV.ltrans5.ltrans.o: In function mp4Processor::~mp4Processor()': <artificial>:(.text+0x123): undefined reference to faadDecoder::~faadDecoder()'
/tmp/ccYqk3rV.ltrans5.ltrans.o: In function mp4Processor::~mp4Processor()': <artificial>:(.text+0x2953): undefined reference to faadDecoder::~faadDecoder()'
/tmp/ccYqk3rV.ltrans5.ltrans.o: In function mp4Processor::handle_aacFrame(unsigned char*, short, unsigned char, unsigned char, unsigned char, unsigned char, bool*)': <artificial>:(.text+0x45ba): undefined reference to faadDecoder::MP42PCM(unsigned char, unsigned char, short, unsigned char, unsigned char*, short)'
/tmp/ccYqk3rV.ltrans11.ltrans.o: In function mp4Processor::mp4Processor(RadioInterface*, short, RingBuffer<short>*)': <artificial>:(.text+0x1a1e): undefined reference to faadDecoder::faadDecoder(RadioInterface*, RingBuffer*)'
:(.text+0x1bb7): undefined reference to faadDecoder::~faadDecoder()' /tmp/ccYqk3rV.ltrans20.ltrans.o:(.data.rel.ro+0x3c8): undefined reference to faadDecoder::~faadDecoder()'
/tmp/ccYqk3rV.ltrans20.ltrans.o:(.data.rel.ro+0x3d0): undefined reference to `faadDecoder::~faadDecoder()'
collect2: error: ld returned 1 exit status

I hope it's helpful.

Why not u8 (*.raw) as dump file type?

I converted an sdr file (s16le) to raw (u8) with

sox -e unsigned-integer -r 240000 -t raw -c 1 -b 16 /home/andreas/10c_dabmedia.sdr -t raw -e signed-integer -b 8 -r 240000 /home/andreas/10c_dabmedia.raw

Both are working in qt-dab and eti-frontend, indeed.

But I don't see any advantage in using sdr as the filesize is exactly 2x a raw file:

andreas@andiE535:~$ ls -l 10c_dabmedia.???
-rw-rw-r-- 1 andreas andreas 298197014 Apr 18 23:40 10c_dabmedia.raw
-rw-r--r-- 1 andreas andreas 596394028 Apr 17 18:45 10c_dabmedia.sdr

Maybe you can convince me to continue writing sdr files ;-)

No longer compiling on RPi3

/usr/include/c++/4.9/atomic:642:15: error: expected ‘;’ at end of member declaration
~atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:642:17: error: ‘noexcept’ does not name a type
~atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:647:7: error: ‘constexpr’ does not name a type
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
^
/usr/include/c++/4.9/atomic:647:7: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11
/usr/include/c++/4.9/atomic:660:14: error: expected ‘;’ at end of member declaration
atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:660:16: error: ‘noexcept’ does not name a type
atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:661:15: error: expected ‘;’ at end of member declaration
~atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:661:17: error: ‘noexcept’ does not name a type
~atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:666:7: error: ‘constexpr’ does not name a type
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
^
/usr/include/c++/4.9/atomic:666:7: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11
/usr/include/c++/4.9/atomic:679:14: error: expected ‘;’ at end of member declaration
atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:679:16: error: ‘noexcept’ does not name a type
atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:680:15: error: expected ‘;’ at end of member declaration
~atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:680:17: error: ‘noexcept’ does not name a type
~atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:685:7: error: ‘constexpr’ does not name a type
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
^
/usr/include/c++/4.9/atomic:685:7: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11
/usr/include/c++/4.9/atomic:698:14: error: expected ‘;’ at end of member declaration
atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:698:16: error: ‘noexcept’ does not name a type
atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:699:15: error: expected ‘;’ at end of member declaration
~atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:699:17: error: ‘noexcept’ does not name a type
~atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:704:7: error: ‘constexpr’ does not name a type
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
^
/usr/include/c++/4.9/atomic:704:7: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11
/usr/include/c++/4.9/atomic:717:14: error: expected ‘;’ at end of member declaration
atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:717:16: error: ‘noexcept’ does not name a type
atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:718:15: error: expected ‘;’ at end of member declaration
~atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:718:17: error: ‘noexcept’ does not name a type
~atomic() noexcept = default;
^
/usr/include/c++/4.9/atomic:723:7: error: ‘constexpr’ does not name a type
constexpr atomic(__integral_type __i) noexcept : __base_type(__i) { }
^
/usr/include/c++/4.9/atomic:723:7: note: C++11 ‘constexpr’ only available with -std=c++11 or -std=gnu++11
/usr/include/c++/4.9/atomic:731:19: error: ‘char16_t’ was not declared in this scope
struct atomic<char16_t> : public atomic_char16_t
^
/usr/include/c++/4.9/atomic:731:27: error: template argument 1 is invalid
struct atomic<char16_t> : public atomic_char16_t
^
/usr/include/c++/4.9/atomic:732:5: error: expected class-name before ‘{’ token
{
^
/usr/include/c++/4.9/atomic:750:19: error: ‘char32_t’ was not declared in this scope
struct atomic<char32_t> : public atomic_char32_t
^
/usr/include/c++/4.9/atomic:750:27: error: template argument 1 is invalid
struct atomic<char32_t> : public atomic_char32_t
^
/usr/include/c++/4.9/atomic:751:5: error: expected class-name before ‘{’ token
{
^
/usr/include/c++/4.9/atomic:771:27: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:776:27: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:780:66: error: expected initializer before ‘noexcept’
atomic_flag_clear_explicit(atomic_flag* __a, memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:785:27: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:789:46: error: expected initializer before ‘noexcept’
atomic_flag_test_and_set(atomic_flag* __a) noexcept
^
/usr/include/c++/4.9/atomic:793:55: error: expected initializer before ‘noexcept’
atomic_flag_test_and_set(volatile atomic_flag* __a) noexcept
^
/usr/include/c++/4.9/atomic:797:39: error: expected initializer before ‘noexcept’
atomic_flag_clear(atomic_flag* __a) noexcept
^
/usr/include/c++/4.9/atomic:801:48: error: expected initializer before ‘noexcept’
atomic_flag_clear(volatile atomic_flag* __a) noexcept
^
/usr/include/c++/4.9/atomic:808:50: error: expected initializer before ‘noexcept’
atomic_is_lock_free(const atomic<_ITp>* __a) noexcept
^
/usr/include/c++/4.9/atomic:813:59: error: expected initializer before ‘noexcept’
atomic_is_lock_free(const volatile atomic<_ITp>* __a) noexcept
^
/usr/include/c++/4.9/atomic:818:46: error: expected initializer before ‘noexcept’
atomic_init(atomic<_ITp>* __a, _ITp __i) noexcept;
^
/usr/include/c++/4.9/atomic:822:55: error: expected initializer before ‘noexcept’
atomic_init(volatile atomic<_ITp>* __a, _ITp __i) noexcept;
^
/usr/include/c++/4.9/atomic:827:24: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:833:24: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:838:69: error: expected initializer before ‘noexcept’
atomic_load_explicit(const atomic<_ITp>* __a, memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:844:23: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:850:27: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:856:27: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:864:27: error: expected initializer before ‘noexcept’
memory_order __m2) noexcept
^
/usr/include/c++/4.9/atomic:872:27: error: expected initializer before ‘noexcept’
memory_order __m2) noexcept
^
/usr/include/c++/4.9/atomic:880:29: error: expected initializer before ‘noexcept’
memory_order __m2) noexcept
^
/usr/include/c++/4.9/atomic:888:29: error: expected initializer before ‘noexcept’
memory_order __m2) noexcept
^
/usr/include/c++/4.9/atomic:894:47: error: expected initializer before ‘noexcept’
atomic_store(atomic<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:899:56: error: expected initializer before ‘noexcept’
atomic_store(volatile atomic<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:904:42: error: expected initializer before ‘noexcept’
atomic_load(const atomic<_ITp>* __a) noexcept
^
/usr/include/c++/4.9/atomic:909:51: error: expected initializer before ‘noexcept’
atomic_load(const volatile atomic<_ITp>* __a) noexcept
^
/usr/include/c++/4.9/atomic:914:50: error: expected initializer before ‘noexcept’
atomic_exchange(atomic<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:919:59: error: expected initializer before ‘noexcept’
atomic_exchange(volatile atomic<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:925:29: error: expected initializer before ‘noexcept’
_ITp* __i1, _ITp __i2) noexcept
^
/usr/include/c++/4.9/atomic:935:29: error: expected initializer before ‘noexcept’
_ITp* __i1, _ITp __i2) noexcept
^
/usr/include/c++/4.9/atomic:945:31: error: expected initializer before ‘noexcept’
_ITp* __i1, _ITp __i2) noexcept
^
/usr/include/c++/4.9/atomic:955:31: error: expected initializer before ‘noexcept’
_ITp* __i1, _ITp __i2) noexcept
^
/usr/include/c++/4.9/atomic:969:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:975:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:981:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:987:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:993:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:999:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:1005:27: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:1011:27: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:1017:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:1023:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:1028:58: error: expected initializer before ‘noexcept’
atomic_fetch_add(__atomic_base<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:1033:67: error: expected initializer before ‘noexcept’
atomic_fetch_add(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:1038:58: error: expected initializer before ‘noexcept’
atomic_fetch_sub(__atomic_base<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:1043:67: error: expected initializer before ‘noexcept’
atomic_fetch_sub(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:1048:58: error: expected initializer before ‘noexcept’
atomic_fetch_and(__atomic_base<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:1053:67: error: expected initializer before ‘noexcept’
atomic_fetch_and(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:1058:57: error: expected initializer before ‘noexcept’
atomic_fetch_or(__atomic_base<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:1063:66: error: expected initializer before ‘noexcept’
atomic_fetch_or(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:1068:58: error: expected initializer before ‘noexcept’
atomic_fetch_xor(__atomic_base<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:1073:67: error: expected initializer before ‘noexcept’
atomic_fetch_xor(volatile __atomic_base<_ITp>* __a, _ITp __i) noexcept
^
/usr/include/c++/4.9/atomic:1081:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:1087:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:1092:66: error: expected initializer before ‘noexcept’
atomic_fetch_add(volatile atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
^
/usr/include/c++/4.9/atomic:1097:57: error: expected initializer before ‘noexcept’
atomic_fetch_add(atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
^
/usr/include/c++/4.9/atomic:1103:43: error: expected initializer before ‘noexcept’
ptrdiff_t __d, memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:1109:28: error: expected initializer before ‘noexcept’
memory_order __m) noexcept
^
/usr/include/c++/4.9/atomic:1114:66: error: expected initializer before ‘noexcept’
atomic_fetch_sub(volatile atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
^
/usr/include/c++/4.9/atomic:1119:57: error: expected initializer before ‘noexcept’
atomic_fetch_sub(atomic<_ITp*>* __a, ptrdiff_t __d) noexcept
^
In file included from includes/backend/fic-handler.h:34:0,
from dab-processor.h:37,
from radio.h:40,
from main.cpp:33:
includes/backend/fib-processor.h:94:4: warning: anonymous type with no linkage used to declare variable ‘ ensemble_Descriptor’ with linkage
} ensemble_Descriptor;
^
main.cpp: In function ‘int main(int, char**)’:
main.cpp:63:17: warning: unused variable ‘tracing’ [-Wunused-variable]
bool tracing = false;
^
Makefile:584: recipe for target 'main.o' failed
make: *** [main.o] Error 1

Ubuntu needs qwt-qt5 as well

Please mention in the readme, that also this package should be installed in Ubuntu:

sudo apt-get install libqwt-qt5-dev

otherwise compiling will stop with the following error:

/usr/bin/ld: cannot find -lqwt-qt5

CMAKE_INSTALL_PREFIX not honoured

I use the CMake build and set -DCMAKE_INSTALL_PREFIX for the build area. However install is going to /usr/local/bin even though this override destination is set.

Build fail on Rawhide

I have Git master up-to-date as at 2017-02-14T07:53+00:00 and am using the CMake build. I am getting an error:

/home/russel/Repositories/Git/Forks/Qt_DAB/src/ofdm/ofdm-decoder.cpp:219:49: error: no ‘float ofdmDecoder::computeQuality(DSPCOMPLEX*)’ member function declared in class ‘ofdmDecoder’
 float ofdmDecoder::computeQuality (DSPCOMPLEX *v) {
                                                 ^

Hide several Menu items when playing rawfiles

When a user plays a rawfile (sdr, iq or raw), then these Menu items don't make sense:

  1. Scan band
  2. VHF/L-Band switch
  3. Mode 1-4
  4. Channel
  5. in Technical Details: frequency

So you could set them inactive.

qmake qtdab.pro error

Hi,

I'm hoping that some could help with the error below?

Thanks

pi@raspberrypi:/qt-dab $ qmake qt-dab.pro
pi@raspberrypi:
/qt-dab $ make
g++ -c -pipe -flto -ffast-math -O2 -Wall -W -D_REENTRANT -DQT_WEBKIT -DTECHNICAL_DATA -DMSC_DATA__ -DTRY_EPG -DHAVE_SPECTRUM -DHAVE_DABSTICK -DHAVE_RTL_TCP -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtXml -I/usr/include/qt4 -I. -I. -Isrc -Iincludes -Iincludes/ofdm -Iincludes/backend -Iincludes/backend/audio -Iincludes/backend/data -Iincludes/backend/data/epg -Iincludes/backend/data/journaline -Iincludes/output -Iincludes/various -Isrc/input -Isrc/input/rawfiles -Isrc/input/wavfiles -I/usr/local/include -I/usr/include/qt5/qwt -Iincludes/scopes-qwt6 -Iincludes/scopes-qwt6 -Ioptional-scope -I/home/jan/rtl-sdr/include -Isrc/input/dabstick -Isrc/input/rtl_tcp -I. -I. -o radio.o radio.cpp
In file included from optional-scope/spectrum-handler.h:42:0,
from radio.cpp:71:
./ui_scopewidget.h:19:22: fatal error: qwt_plot.h: No such file or directory
#include "qwt_plot.h"
^
compilation terminated.
Makefile:591: recipe for target 'radio.o' failed
make: *** [radio.o] Error 1

Still unable to compile on RPI3

I have been unable to compile versions since late September, including latest.


oc_dab-processor.o moc_sample-reader.o moc_ofdm-decoder.o moc_fic-handler.o moc_fib-processor.o moc_mp2processor.o moc_mp4processor.o moc_faad-decoder.o moc_dab-data.o moc_data-processor.o moc_pad-handler.o moc_virtual-datahandler.o moc_tdc-datahandler.o moc_ip-datahandler.o moc_mot-data.o moc_audio-base.o moc_tii_table.o moc_iqdisplay.o moc_spectrum-handler.o moc_rtlsdr-handler.o moc_rtl-dongleselect.o moc_rtl_tcp_client.o qrc_resources.o -L/usr/lib/arm-linux-gnueabihf -lfftw3f -lusb-1.0 -ldl -lportaudio -lz -lsndfile -lsamplerate -lfaad /usr/lib/libqwt-qt5.so -lQtMultimedia -lQtGui -lQtNetwork -lQtCore -lpthread
/usr/bin/ld: cannot find -lQtMultimedia
collect2: error: ld returned 1 exit status
Makefile:273: recipe for target 'linux-bin/qt-dab-1.0-alpha' failed
make: *** [linux-bin/qt-dab-1.0-alpha] Error 1

I have tried every possible library path for all QWT, absolutely none work. I have installed all possibilities in turn from the software database.
I have started from scratch several times now following all instructions given to the letter.

Stop/Pause Playback?

Maybe I'm missing an obvious solution, but is there a way to stop the playback of music without closing the complete program (I assume that setting the gain in the extra windows to 0 would still use resources?)
Instead of adding an extra button one could maybe think about toggling the "start" button to a "stop" button while music is being played?
(Just as a side question, what is the difference between the "Start" and the "Scan band" button?)

cmake Error

I have the following error using cmake:
cmake .. -DDABSTICK=ON -DRTLTCP=ON
make
[ 76%] Building CXX object CMakeFiles/qt-dab-0.998.dir/optional-scope/spectrum-handler.cpp.o /home/snoopy/qt-dab/optional-scope/spectrum-handler.cpp: In constructor ‘spectrumhandler::spectrumhandler(RadioInterface*, QSettings*, RingBuffer<std::complex<float> >*, RingBuffer<std::complex<float> >*)’: /home/snoopy/qt-dab/optional-scope/spectrum-handler.cpp:88:19: error: ‘class QwtPlotCurve’ has no member named ‘setOrientation’ spectrumCurve -> setOrientation (Qt::Horizontal); ^ /home/snoopy/qt-dab/optional-scope/spectrum-handler.cpp: In member function ‘void spectrumhandler::ViewSpectrum(double*, double*, double, int32_t)’: /home/snoopy/qt-dab/optional-scope/spectrum-handler.cpp:202:19: error: ‘class QwtPlotCurve’ has no member named ‘setSamples’ spectrumCurve -> setSamples (X_axis, Y1_value, displaySize); ^ make[2]: *** [CMakeFiles/qt-dab-0.998.dir/optional-scope/spectrum-handler.cpp.o] Fehler 1 make[1]: *** [CMakeFiles/qt-dab-0.998.dir/all] Fehler 2 make: *** [all] Fehler 2

Save settings and volume slider

Hi,

I use the windows version and it works great. Can you add a save settings button>? Everytime I start then i have to assign again all the sound and dabstick settings. Also if I select audio output ASIO4ALL then the program crashes. And maybe add a volume slider so I can change the volume in the program instead change the main PC volume.

Furthermore, the GUI is kind of messy, too much info and not beautifull. You might can creat6e a expert and a normal GUI (simplified) setting. Also I dont like al the sepperate windows.
Resizing the current windows dont work, get rid of that option or make it work :)

It need a lot improvements but so far I like it. Keep up teh good work.

Slideshows don't work in Slovenia and Slovakia

I found out that the slideshows in qt-dab and eti-stuff don't work at all in Slovenija and in Slovakia, whereas dablin_gtk or XPADxpert (and the DABPlayer from Andreas Gsinn under Windows) show them.
xpad_10d

BTW: In Vienna it worked under qt-dab well on the same Laptop, see screenshot: .
11d_vienna_slideshow

According to XPADxpert it's in the same subchannel.

See the (zipped) eti-file http://andimik.bplaced.net/temp/10d_lang2.eti.zip , please load in eti-backend, tune to the English speaking "Slo Int Radio SI" (other programs didn't have slideshows at that time and the sample is too short).

Cancel writing (of dump or audio) is not possible

Pressing "Save audio" or "dump to raw file" opens a file dialog. But if you then press cancel it does not cancel, but writes a file ".wav" resp. ".sdr" anyway. You can only stop recording by pressing "WRITING" again.

Would it be possible to set the text "WRITING" in red color (see audioDumpButton and the dumpButton)?

This issue is also valid for eti-stuff.

qt5 on RPI

Hi Jan, I guess in the README we should add

sudo apt-get install qtbase5-dev

for RPI3 users otherwise there is a Qt5Core error

slide show window

Hi,
Today I see slides show for first time, but new window always popup avery image change on top of all others apps, this is very annoying.
Regards

Make fails on qwt error

Almost got all the QT/Qwt stuff compiled except ld fails looking for a file called -lqwt-qt5.
I can find no reference online to this file. What is it?

The app. does work if I don't include spectrum, so i guess its todo with that.

/usr/bin/ld: cannot find -lqwt-qt5
collect2: error: ld returned 1 exit status
Makefile:377: recipe for target 'linux-bin/qt-dab-0.998' failed
make: *** [linux-bin/qt-dab-0.998] Error 1

Text missing in file open/save window

Seems the texts in brackets in the "file open" or "file save" window are not displayed. See radio.cpp, lines 497, 1218, 1233, 1248, 1461 and 1496.

For example:

tr ("iq data (*.iq)"));

I also tried escaping, but then there is a compiler warning ...

warning: unknown escape sequence: ')'

Channel is not updated in ~/.qt-dab.ini

I'm using qt-dab with an dabstick on my RaspberryPi.
If I start the gui, change the channel, listen to some music and then quit the program by clicking the "quit" button I get

ofdm decoder is closing down now
Termination started
closed
Segmentation fault

I don't know if the segmentation fault is the reason why the channel in the ~/.qt-dab.ini is not being updated. Of course I can update the channel in the file manually, however I would prefer if the last used channel is automatically saved. The other values (device and soundchannel) were properly updated.

No longer compiles on RPI3

Latest release refuses to compile, previous releases were able to compile.


-Iincludes/scopes-qwt6 -Ioptional-scope -Iinput/dabstick -Iinput/rtl_tcp -Iincludes/backend/data/epg -I. -I. -o rtl_tcp_client.o input/rtl_tcp/rtl_tcp_client.cpp
g++ -c -pipe -flto -ffast-math -O2 -Wall -W -D_REENTRANT -DQT_WEBKIT -DTECHNICAL_DATA -DMOT_DATA -DMSC_DATA__ -D__QUALITY -DHAVE_SPECTRUM -DHAVE_DABSTICK -DHAVE_RTL_TCP -DTRY_EPG -DQT_NO_DEBUG -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtXml -I/usr/include/qt4 -I. -I. -Isrc -Iincludes -Iincludes/ofdm -Iincludes/backend -Iincludes/backend/audio -Iincludes/backend/data -Iincludes/backend/data/journaline -Iincludes/output -Iincludes/various -Iinput -Iinput/rawfiles -Iinput/wavfiles -I/usr/local/include -I/usr/local/include -I/usr/include/qt4/qwt -I/usr/include/qt5/qwt -I/usr/include/qt4/qwt -I/usr/include/qwt -Iincludes/scopes-qwt6 -Iincludes/scopes-qwt6 -Ioptional-scope -Iinput/dabstick -Iinput/rtl_tcp -Iincludes/backend/data/epg -I. -I. -o epgdec.o src/backend/data/epg/epgdec.cpp
src/backend/data/epg/epgdec.cpp: In member function ‘void CEPGDecoder::decode(const std::vector&, const QString&)’:
src/backend/data/epg/epgdec.cpp:46:59: error: ‘fopen’ was not declared in this scope
FILE *epgFile = fopen (name. toLatin1 (). data (), "w");
^
src/backend/data/epg/epgdec.cpp:48:17: error: ‘stderr’ was not declared in this scope
fprintf (stderr, "filename = %s\n", name. toLatin1 (). data ());
^
src/backend/data/epg/epgdec.cpp:48:70: error: ‘fprintf’ was not declared in this scope
fprintf (stderr, "filename = %s\n", name. toLatin1 (). data ());
^
src/backend/data/epg/epgdec.cpp:50:23: error: ‘fclose’ was not declared in this scope
fclose (epgFile);
^
src/backend/data/epg/epgdec.cpp:53:17: error: ‘stderr’ was not declared in this scope
fprintf (stderr, "cannot open %s\n", name. toLatin1 (). data ());
^
src/backend/data/epg/epgdec.cpp:53:71: error: ‘fprintf’ was not declared in this scope
fprintf (stderr, "cannot open %s\n", name. toLatin1 (). data ());
^
src/backend/data/epg/epgdec.cpp: In function ‘QDomElement element(QDomDocument&, const tag_length_value&)’:
src/backend/data/epg/epgdec.cpp:332:27: warning: comparison is always false due to limited range of data type [-Wtype-limits]
#define invalidTag(x) ((x < 0) || (x > 50))
^
src/backend/data/epg/epgdec.cpp:335:6: note: in expansion of macro ‘invalidTag’
if (invalidTag (tlv. tag)) {
^
Makefile:1171: recipe for target 'epgdec.o' failed
make: *** [epgdec.o] Error 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.