Giter VIP home page Giter VIP logo

dablin's Introduction

DABlin – capital DAB experience

DABlin plays a DAB/DAB+ audio service – from a live transmission or from a stored ensemble recording (ETI-NI, or EDI AF with ETI). Both DAB (MP2) and DAB+ (AAC-LC, HE-AAC, HE-AAC v2) services are supported.

The GTK GUI version in addition supports the data applications Dynamic Label and MOT Slideshow (if used by the selected service).

Screenshots

GTK GUI version

Screenshot of the GTK GUI version

Console version

Screenshot of the console version

Requirements

General

Besides Git a C/C++ compiler (with C++11 support) and CMake are required to build DABlin.

On Debian or Ubuntu, the respective packages (with GCC as C/C++ compiler) can be installed using aptitude or apt-get, for example:

sudo apt-get install git gcc g++ cmake

Libraries

The following libraries are required:

  • mpg123 (1.14.0 or higher)
  • FAAD2
  • SDL2

The GTK GUI version in addition requires:

  • gtkmm

Usually the glibc implementation of iconv is available. If this is not the case, in addition libiconv is required.

In rare cases, the target architecture does not support atomics. In such a case, DABlin is linked against GCC's libatomic. This lib usually is an (indirect) dependency of GCC itself.

On Debian or Ubuntu, mpg123, FAAD2, SDL2 and gtkmm are packaged and installed with:

sudo apt-get install libmpg123-dev libfaad-dev libsdl2-dev libgtkmm-3.0-dev

On Fedora, mpg123, SDL2, and gtkmm are all packaged and can be installed thus:

sudo dnf install mpg123-devel SDL2-devel gtkmm30-devel

FAAD2 is not packaged in the main Fedora repository, but it is available in RPM Fusion repository. Once you have added RPM Fusion to the repositories, FAAD2 may be installed by:

sudo dnf install faad2-devel

If you do not wish to, or cannot, add the RPM Fusion repositories, you will have to download FAAD2, perhaps from here, and build and install manually.

Alternative DAB+ decoder

Instead of using FAAD2, DAB+ channels can be decoded with FDK-AAC. You can also use OpenDigitalradio's fork, if already installed.

On Debian and Ubuntu, you can install FDK-AAC with:

sudo apt-get install libfdk-aac-dev

On Fedora, RPM Fusion is again needed and, if used, you can:

sudo dnf install fdk-aac-devel

When the alternative AAC decoder is used, the FAAD2 library mentioned above is no longer required.

After installing the library, to use FDK-AAC instead of FAAD2, you have to have -DUSE_FDK-AAC=1 as part of the cmake command.

Audio output

The SDL2 library is used for audio output, but you can instead choose to output the decoded audio in plain PCM for further processing (e.g. for forwarding to a streaming server).

In case you only want PCM output, you can disable SDL output and therefore omit the SDL2 library prerequisite. You then also have to have -DDISABLE_SDL=1 as part of the cmake command.

To enable the raw PCM output to stdout, the -p parameter has to be used.

The PCM audio can also be prepended with a RIFF WAVE header using the -w parameter instead. This uses the maximum value for length fields in order to allow streaming. On any later audio format change (this also includes a service change in the GUI version), a new RIFF WAVE header will be issued. As RIFF WAVE requires samples to be in Little Endian (LE) order, this feature only makes sense on a LE platform.

It is also possible to disable the output of any decoded audio and instead output the current service as an untouched MP2/AAC stream to stdout. This can be achieved by using the -u parameter.

Surround sound

Services with surround sound are only decoded from their Mono/Stereo core, as unfortunately there is no FOSS AAC decoder which supports the required Spatial Audio Coding (SAC) extension of MPEG Surround at the moment.

Precompiled packages and source-based Linux distributions

Official precompiled packages are available for the following Linux distributions (kindly maintained by Gürkan Myczko):

Starting with Debian 10 and Ubuntu 18.04, you can simply install DABlin from the official package sources (note that the GitHub version may be newer):

sudo apt-get install dablin

Some users kindly provide precompiled packages on their own:

For other distributions you may also want to check the Repology page.

Source-based Linux distributions:

Ubuntu 20.04, FAAD2 and HE-AAC v2 services

Ubuntu 20.04 currently ships a version of the FAAD2 library which can't decode HE-AAC v2 services (= SBR and PS) due to a bug. This affects FAAD2 version 2.9.0 and 2.9.1.

To address this, a more recent version of the library can be compiled.

First make sure, you have automake and libtool installed on your system.

sudo apt-get install automake libtool

Then continue with

git clone -b 2_9_2 https://github.com/knik0/faad2.git
cd faad2
./bootstrap
./configure
make
sudo make install
sudo ldconfig

Now DABlin (and all other applications) uses the newer lib version.

If the newer lib version shall only be used together with DABlin, the two last commands must not be executed. Instead DABlin has always to be invoked with the following prefix string (assuming the above commands were executed in /home/my_user):

LD_LIBRARY_PATH=/home/my_user/faad2/libfaad/.libs/

Compilation

If the gtkmm library is available both the console and GTK GUI executables will be built, otherwise only the console executable will be built.

To fetch the DABlin source code, execute the following commands:

git clone https://github.com/Opendigitalradio/dablin.git
cd dablin

Note that by default the master branch is cloned which contains the current stable version. The development takes place in the next branch which can instead be cloned by appending -b next to the end of the above git clone command line.

You can use, for example, the following command sequence in order to compile and install DABlin (for Ubuntu 20.04 please also see above):

mkdir build
cd build
cmake ..
make
sudo make install

Windows (Cygwin)

DABlin can also be compiled on Windows using Cygwin. The following Cygwin packages are required:

General:

  • git
  • make
  • cmake
  • gcc-core
  • gcc-g++

DABlin specific (using FDK-AAC for DAB+ services):

  • libmpg123-devel
  • libfdk-aac-devel
  • libSDL2-devel
  • libiconv-devel

In addition for the GTK version:

  • libgtkmm3.0-devel

Note that the GTK version requires an X server to run e.g. Cygwin/X!

Also note that Cygwin neither needs nor allows to sudo commands, so just execute them without that prefix.

Unfortunately the Cygwin package of FDK-AAC doesn't seem to have been compiled with SBR support, so using FAAD2 for DAB+ services is recommended. However, FAAD2 has to be compiled and installed by hand, as there is no Cygwin package. This requires the following additional packages to be installed:

  • autoconf
  • automake
  • libtool

Screenshot of the console version on Windows (Cygwin)

When Cygwin is installed, all the aforementioned packages can be preselected for installation by calling Cygwin's setup-<arch>.exe with the following parameter:

-P git,make,cmake,gcc-core,gcc-g++,libmpg123-devel,libfdk-aac-devel,libSDL2-devel,libiconv-devel,libgtkmm3.0-devel,autoconf,automake,libtool

macOS

On macOS, the development environment can be installed by running xcode-select. This installs Git and a C/C++ compiler (clang). All other packages and development libraries can be installed using a package manager such as Homebrew, for example:

xcode-select --install
brew install pkg-config cmake gtkmm gtkmm3 adwaita-icon-theme sdl2 fftw faad2 mpg123

Usage

The console executable is called dablin, the GTK GUI executable dablin_gtk. Use -h to get an overview of all available options.

(Currently no desktop files are installed so it is not easy to start DABlin directly from GNOME Shell. For now, at least, start DABlin from a console.)

DABlin processes DAB ETI-NI or EDI recordings/streams (which may be frame-aligned or not i.e. any data before/after an ETI/EDI frame is discarded). If no filename is specified, stdin is used for input.

You just should specify the service ID (SID) of the desired service using -s - otherwise initially no service is played. The GUI version of course does not necessarily need this.

You can replay an existing recording as follows:

dablin -s 0xd911 mux.eti

In this case a progress indicator and the current position is displayed.

As an alternative a service label can be specified with the -l option. Note that if the label contains spaces, it has to be enclosed by quotes (or the spaces be properly escaped):

dablin -l "SWR1 RP" mux.eti

The parameter -1 (the number one, not the small letter L) simply plays the first service found.

With the console version, instead of the desired service it is also possible to directly request a specific sub-channel by using -r (for DAB) or -R (for DAB+).

Note that the console output always shows the programme type just using RDS PTys despite the actually used international table ID (which should work in nearly all cases). The GTK version in contrast always shows the correct programme type, based on the transmitted international table ID.

Dynamic FIC messages can be suppressed using -F (currently affects dynamic PTy only).

Date/Time

The console version shows the related parameters as they are received: While the Local Time Offset (LTO) is shown upon any change, the UTC date/time is shown once (or once again on precision change).

The GTK version in contrast starts to display the local date/time as soon as both mentioned values have been received. The used clock is then resynchronised upon further received UTC date/time.

If an ensemble transmits both short (minute precision) and long (millisecond precision) form, only the long form will be used, as soon as received for the first time.

Announcement support/switching

In terms of announcement support/switching the console version shows the separate details. The GUI combines the received data and in general shows which announcements the current service supports.

During a matching announcement, the corresponding type is highlighted in yellow. An announcement that would lead to a (temporary) switch to a different subchannel leads to cyan highlighting instead e.g. if traffic news of a different channel shall affect also listeners of a different service (which does not have its own announcements).

The GTK version indicates an active alarm announcement on ensemble level by the suffix "Alarm" after the ensemble label, highlighted in red.

Hotkeys (GTK GUI version)

To switch the channel instead of the service, press Ctrl in addition.

Hotkey Meaning
m Enable/disable audio mute
r Start/stop recording
Ctrl + c Copy DL text, DL+ object text or Slideshow slide to clipboard
- Switch to previous service
+ Switch to next service
1..0 Switch to 1st..10th service
Alt + 1..0 Switch to 11th..20th service
Ctrl + Space Stop/resume decoding the current channel/service

DAB live reception

If you want to play a live station, you can use dab2eti from dabtools (ODR maintained fork) and transfer the ETI live stream via pipe, e.g.:

dab2eti 216928000 | dablin_gtk

It is possible to let DABlin invoke dab2eti or any other DAB live source that outputs ETI-NI. The respective binary is then called with the necessary parameters, including the frequency and an optional gain value.

You therefore just have to specify the path to the dab2eti binary and the desired channel.

dablin -d ~/bin/dab2eti -c 11D -s 0xd911

Using dab2eti the E4000 tuner is recommended as auto gain is supported with it. If you want/have to use a gain value you can specify it using -g. Instead of auto gain, the default gain can be set using -G (only affects eti-cmdline at the moment).

Instead of dab2eti the tool eti-cmdline by Jan van Katwijk can be used, as it has more sensitive reception (however the CPU load is higher compared to dab2eti) and does not require a E4000 tuner for auto gain. It is part of his eti-stuff.

In addition to specifying the path to the respective binary you also have to change the DAB live source type accordingly by using -D.

dablin -D eti-cmdline -d ~/bin/eti-cmdline-rtlsdr -c 11D -s 0xd911

When enclosed in quotes, you can also pass command line parameters to the binary, e.g. to set some frequency correction (here: +40 ppm):

dablin -D eti-cmdline -d "~/bin/eti-cmdline-rtlsdr -p 40" -c 11D -s 0xd911

In case of the GTK GUI version the desired channel may not be specified. To avoid the huge channel list containing all possible DAB channels, one can also state the desired channels (separated by comma) which shall be displayed within the channel list. Hereby the specified (general) gain value can also be overwritten for a channel by adding the desired value after a colon, e.g. 5C:-54.

dablin_gtk -d ~/bin/dab2eti -c 11D -C 5C,7B,11A,11C,11D -s 0xd911

You also can use an Airspy or Airspy Mini, but you have to specify the -G parameter.

dablin_gtk -D eti-cmdline -d ~/bin/eti-cmdline-airspy -c 11D -C 11D -G

For a HackRF use it together with the eti-cmdline parameter -E (which switches its amplifier on) and with the dablin_gtk parameter -G.

dablin_gtk -D eti-cmdline -d "~/bin/eti-cmdline-hackrf -E" -c 11D -C 11D -G

For a raw file the syntax is just:

~/bin/eti-cmdline-rawfiles -F foo.raw | dablin_gtk

It may happen that an ETI live stream is interrupted (e.g. transponder lock lost). Later when the stream recovers, DABlin "catches up" on the stream and plays all (available) ETI frames until again in sync. This can lead to several audio buffer overflow messages and respective audible artifacts.

The -I parameter disables the described catch-up behaviour and instead resyncs to the stream after an interruption i.e. continues to play the later received ETI frames in realtime. However, this means that the playback is delayed by the amount of all previous interruptions i.e. the news will start some seconds/minutes later compared to live reception because of that.

The GTK GUI version also allows a user to stop decoding the current channel/service by using the stop button next to the channel combobox. If desired, decoding can then be resumed using the same button again.

The stdin input can also be used for live reception or playback of an EDI AF stream/recording (containing ETI) e.g. with Netcat, Wget or cURL. Hereby the AF layer may also be enclosed with a File IO layer (usually the case for stored EDI transmissions).

Examples:

nc 10.0.0.128 9201 | dablin_gtk -f edi -I
wget -q -O - https://edistream.irt.de/services/3 | dablin_gtk -f edi -I -1
curl -s https://edistream.irt.de/services/3 | dablin_gtk -f edi -I -1

Playing EDI content the -I can be required to prevent ongoing hiccups during playback. In the last two cases, a single service EDI stream for testing purposes is used, so the -1 parameter is used to select the first found service.

Recording a service

With the GTK GUI version the current service can be recorded into a file. To start/stop a recording, the red record button has to be clicked, or the corresponding keyboard shortcut to be pressed. During a recording neither can channel/service be changed, nor can DABlin be closed.

By default all recordings are stored to /tmp. This can be changed by using the -r parameter. The filename of a recording contains the timestamp of the start of the recording and the service name, e.g. 2018-09-02 - 17-53-54 - SWR3.aac.

All recordings are lossless: A DAB service is directly stored in MP2 format. A DAB+ service is packaged into the LATM/LOAS container format. This format is necessary in order to signal the special 960 samples per frame transformation to the AAC decoder for playback.

As both formats are streamable, a recording can already be played while the actual recording is still in progress.

The AAC recordings can be player e.g. by VLC player. FFmpeg will play them as well, but currently does not support the SBR extension together with the 960 samples per frame transformation and will thus only play the AAC core then.

It is possible to enable a recording prebuffer which continuously caches a certain period of time. This allows to record e.g. an already running song or bloopers. When an actual recording is started, the complete prebuffer content is initially written to the recording file. The prebuffer size in seconds is specified using -P e.g. -P 600 for ten minutes.

Secondary component audio services

Some ensembles may contain audio services that consist of additional "sub services" called secondary components, in addition to the primary component. That secondary components can initially be selected by using -x in addition to -s.

In the GTK version in the service list such components are shown prefixed with » (e.g. » BBC R5LiveSportX). Meanwhile, the related primary component is suffixed with » (e.g. BBC Radio 5 Live »).

Status output

While playback a number of status messages may appear. Some are quite common (enclosed with round brackets) e.g. due to bad reception, while others are rather unlikely to occur (enclosed with square brackets).

Common

During (re-)synchronisation status messages are shown. Furthermore, dropped Superframes or AUs are mentioned.

If the Reed Solomon FEC was used to correct bytes of a Superframe, this is mentioned by messages of the format (3+) in cyan color. This shorter format is used as those messages occur several times with borderline reception. The digit refers to the number of corrected bytes within the Superframe while a plus (if present) indicates that at least one byte was incorrectable.

When a FIB is discarded (due to failed CRC check), this is indicated by a (FIB) message in yellow color.

MP2 frames with invalid CRC (MP2's CRC only - not DAB's ScF-CRC) are discarded, which is indicated by a (CRC) message in red color.

Audio Units (AUs) with invalid CRC are mentioned with short format messages like (AU #2) in red color, indicating that the CRC check on AU No. 2 failed and hence the AU was dismissed.

When the decoding of an AU nevertheless fails, this is indicated by an (AAC) message in magenta color. However, in that case the AAC decoder may output audio samples anyway.

Uncommon

If the announced X-PAD length of a DAB+ service does not match the available X-PAD length i.e. if it falls below, a red [X-PAD len] message is shown and the X-PAD is discarded. However not all X-PADs may be affected and hence it may happen that the Dynamic Label can be processed but the MOT Slideshow cannot.

To anyhow process affected X-PADs, a loose mode can be enabled by using the -L parameter.

Standards

DABlin implements (at least partly) the following DAB standards:

General

  • ETSI EN 300 401 (DAB system)
  • ETSI TS 101 756 (Registered tables)
  • ETSI TS 103 466 (DAB audio)
  • ETSI TS 102 563 (DAB+ audio)
  • ETSI ETS 300 799 (ETI)
  • ETSI TS 102 693 (EDI) together with ETSI TS 102 821 (DCP)

Data applications

  • ETSI TS 102 980 (Dynamic Label Plus)
  • ETSI EN 301 234 (MOT)
  • ETSI TS 101 499 (MOT Slideshow)

TODO

At the moment, DABlin is kind of a rudimentary tool for the playback of DAB/DAB+ services. It is planned to add support for further Program Aided Data (PAD) features.

Dynamic Label Plus (DL+)

When in the GTK GUI version DL+ is enabled and DL+ objects are received, the DL+ window is shown. Some stations only transmit DUMMY objects - in this case the DL+ window will be shown but stays empty.

if the running state indicates that the current item is running, all objects with an ITEM content type have a content type with light green background color.

Depending on the object category, the object text is highlighted in bold text or a different text color. Deleted objects have a text with grey background color.

Slideshow

The GTK GUI version supports the MOT Slideshow. If Slideshow is enabled and the current service signals to transmit a Slideshow, the Slideshow window is displayed. It shows a slide after it has been received completely and without errors.

While the next slide is being received, a progress bar at the bottom of the Slideshow window shows the fraction that has successfully been received so far. It is always updated after a new segment has arrived free from error. The first segments of the initial slide usually are received before the corresponding header comes by. In this case a pulsing bar is shown until the header is available.

Currently the following limitations apply:

  • slideshows in a separate sub-channel are not supported (just X-PAD);
  • the TriggerTime field does not support values other than Now

License

This software is licensed under the GNU General Public License Version 3 (please see the file COPYING for further details). GPLv3 Image

Please note that the included FEC lib by KA9Q has a separate license!

DABlin - capital DAB experience Copyright (C) 2015-2024 Stefan Pöschel

This program 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 3 of the License, or (at your option) any later version.

This program 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.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

dablin's People

Contributors

alexmyczko avatar andimik avatar basicmaster avatar mnhauke avatar mpbraendli avatar paaguti avatar russel 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  avatar

dablin's Issues

Link issue on macOS - branch/next

Hi,

Latest dablin_gtk on branch/next link against libiconv but no explicit entry in src/CMakeLists.txt to link libiconv. This causes dablin_gtk link to fail on macOS.

I've attached a patch below, assuming this src/CMakeLists.txt is the right place to add the lib.

Regards,
Niro.

dablin_iconv.patch.txt

[Feature request] DAB live source power on/off button

Hi,

I'd like to have a power on/off button to stop and start the live source application such that when off, the DAB live source application is stopped (via SIGINT) in order to power down the underlying SDR hardware without having to close DABLin application. Is this something that is relatively easy to add?

Kind regards,
Niro.

Cosmetic changes not working 100% right

Hi,
I've never programmed in cpp and gtk…. but I've been doing some tests, changing tooltip informations to be available on screen without needing to stop mouse over labels.
But a new label I've created text is not dark, it's grey,
Any idea about what have I done wrong ?

image

I've just changed 3 files:
dablin_gtk.cpp
dablin_gtk.h
subchannel_sink.h

dablin_mod.zip

Dropouts from stdin?

See JvanKatwijk/qt-dab#22

./eti-frontend -O - | dablin_gtk

SDLOutput: silence started...
SDLOutput: silence ended (115200 bytes)
SDLOutput: silence started...
SDLOutput: silence ended (117760 bytes)
SDLOutput: silence started...
SDLOutput: silence ended (199680 bytes)
SDLOutput: silence started...
SDLOutput: silence ended (101376 bytes)
SDLOutput: silence started...

I don't know yet, if the problem comes from eti-stuff or dablin produces these dropouts.

DABtools fork?

DABlin effectively requires DABtools. The DABTools repository at https://github.com/linuxstb/dabtools appears to be abandoned. There are issues and pull requests not dealt with. This seems it is time for a fork. Might it be appropriate for Opendigitalradio to fork the project and pick up the pull requests (one of which is for a CMake build for example)?

RTL_TCP as source

Would it be posible to have a command line option to play content from a RTL_TCP server ?

Usage: dablin_gtk [OPTIONS] [file]

-R <ip:port> Plays RTL_TCP signal from server at IP:Port

DRC process

Does this tools support dynamic range control?

unsupported TAG item 'dlpt'

Playing the EDI stream from IRT by using the following command

wget -q -O - https://edistream.irt.de/services/3 | dablin_gtk -f edi -I -1

will result in lots of these error messages

EDIPlayer: ignored unsupported TAG item 'dlpt' (3776 bits)

Print repeating errors only once

test.eti.zip

If you play the attached file (taken with eti-cmdline-airspy from Slovenija sent with ZeroMQ to another device and recorded there) you will get audio, but lots of

EnsembleSource: skipping 22 bytes for sync

Hint: I've used eti2zmq and tried several options

$ eti2zmq 
usage: eti2zmq [--delay] [-i <inputfile>] -o zmq+tcp://0.0.0.0:18082

Additional info related to arguments:
--input or -i <filename>	 	Provide input file for app
--output or -o <zeromq address>    Provide zeromq output address like zmq+tcp://[local_ip]:[port_to_listen]
--delay or -d                      Force pseudo-realtume streaming (add 24ms delay for each eti frame)
--loop or -l                       Run input file in-a-loop
--no-align or -L                   Disable frame alignment for ZeroMQ packing
--no-cut-tail or -C                Disable removing unneeded fill bytes at ETI frames tails
--activity or -a                   Display app's activity in console
--verbose or -v                    Increase app's verbosity (can be provided multiple times)

$ eti-cmdline-airspy -C 10D -G 90 | eti2zmq -a -o "zmq+tcp://*:9100"

Although this has informative character, I would suggest to minimize these repeating warnings and display only once.

BTW: it cannot be loaded into XPADxpert v1.12 ...

A file recorded on the same machine (= not sent via ZeroMQ) works and does not show these repeating warnings.

Possible new GUI

Users of the DABlin GUI probably do not really care about channels and ensembles, that is unwanted detail, they just want a list of the receivable services (aka radio stations ­– should services be renamed station in the en_GB version). Most commercial DAB/DAB+ radios spend a little time finding all the currently available stations before actually playing anything. It is not clear what the commercial DAB/DAB+ devices do here. I assume they scan all the Band III channels for signal and then for those with signal await the station list.

I propose a new (possibly additional, possibly replacement, more likely additional) GUI that first scans, and then just displays receivable radio stations.

HE-AAC v2 UK stations have no audio (Ubuntu 20.04) and problems when compiling on cygwin

I deleted accidentally the Ubuntu 18.04 partition on my HDD, so I had to install a new one....
Now I have Ubuntu 20-04 , and I compile as usual....
installing all libs
cmake ..
make
sudo make install.....

But when playing UK DAB+ stations, I get no sound, and in console I see... (AAC) (AAC) (AAC) (AAC) (AAC) (AAC)......
The legacy DAB MP2 stations work fine.

I don't know if ot has something to do, but on make command output I see these warnings...

[ 70%] Building CXX object src/CMakeFiles/dablin_gtk.dir/mot_manager.cpp.o
[ 73%] Building CXX object src/CMakeFiles/dablin.dir/eti_player.cpp.o
/home/jordi/Descargas/dablin/src/fic_decoder.cpp: In static member function ‘static std::string FICDecoder::ConvertLTOToString(int)’:
/home/jordi/Descargas/dablin/src/fic_decoder.cpp:873:44: warning: ‘%+03d’ directive output may be truncated writing between 3 and 11 bytes into a region of size 7 [-Wformat-truncation=]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                            ^~~~~
/home/jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: note: directive argument in the range [-1073741824, 1073741823]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                           ^~~~~~~~~~~~
/home/jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: note: directive argument in the range [0, 30]
In file included from /usr/include/stdio.h:867,
                 from /home/jordi/Descargas/dablin/src/fic_decoder.h:22,
                 from /home/jordi/Descargas/dablin/src/fic_decoder.cpp:19:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:35: note: ‘__builtin___snprintf_chk’ output between 7 and 15 bytes into a destination of size 7
   67 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   68 |        __bos (__s), __fmt, __va_arg_pack ());
      |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 75%] Building CXX object src/CMakeFiles/dablin_gtk.dir/pad_decoder.cpp.o
[ 78%] Building CXX object src/CMakeFiles/dablin_gtk.dir/dablin_gtk.cpp.o
/home/jordi/Descargas/dablin/src/fic_decoder.cpp: In member function ‘void FICDecoder::ProcessFIG0_9(const uint8_t*, size_t)’:
/home/jordi/Descargas/dablin/src/fic_decoder.cpp:873:44: warning: ‘%+03d’ directive output may be truncated writing between 3 and 11 bytes into a region of size 7 [-Wformat-truncation=]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                            ^~~~~
/home/jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: note: directive argument in the range [-1073741824, 1073741823]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                           ^~~~~~~~~~~~
/home/jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: note: directive argument in the range [0, 30]
In file included from /usr/include/stdio.h:867,
                 from /home/jordi/Descargas/dablin/src/fic_decoder.h:22,
                 from /home/jordi/Descargas/dablin/src/fic_decoder.cpp:19:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:35: note: ‘__builtin___snprintf_chk’ output between 7 and 15 bytes into a destination of size 7
   67 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   68 |        __bos (__s), __fmt, __va_arg_pack ());
      |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 80%] Building CXX object src/CMakeFiles/dablin_gtk.dir/dablin_gtk_sls.cpp.o
[ 82%] Building CXX object src/CMakeFiles/dablin.dir/dab_decoder.cpp.o
[ 85%] Building CXX object src/CMakeFiles/dablin.dir/fic_decoder.cpp.o
[ 87%] Building CXX object src/CMakeFiles/dablin.dir/pcm_output.cpp.o
[ 90%] Building CXX object src/CMakeFiles/dablin.dir/tools.cpp.o
/home/jordi/Descargas/dablin/src/fic_decoder.cpp: In static member function ‘static std::string FICDecoder::ConvertLTOToString(int)’:
/home/jordi/Descargas/dablin/src/fic_decoder.cpp:873:44: warning: ‘%+03d’ directive output may be truncated writing between 3 and 11 bytes into a region of size 7 [-Wformat-truncation=]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                            ^~~~~
/home/jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: note: directive argument in the range [-1073741824, 1073741823]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                           ^~~~~~~~~~~~
/home/jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: note: directive argument in the range [0, 30]
In file included from /usr/include/stdio.h:867,
                 from /home/jordi/Descargas/dablin/src/fic_decoder.h:22,
                 from /home/jordi/Descargas/dablin/src/fic_decoder.cpp:19:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:67:35: note: ‘__builtin___snprintf_chk’ output between 7 and 15 bytes into a destination of size 7
   67 |   return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
      |          ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   68 |        __bos (__s), __fmt, __va_arg_pack ());
      |        ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 92%] Building CXX object src/CMakeFiles/dablin.dir/version.cpp.o

I've tried a one year ago version I have running on windows (cygwin) and sound is OK on all channels.

But I've tried to compile a new version, and I have a lot of errors, both normal and next branches.

Jordi@PC-Jordi ~/Descargas/dablin/build
$ cmake ..
-- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++.exe
-- Check for working CXX compiler: /usr/bin/c++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Build type not specified: defaulting to release.
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc
-- Looking for stdio.h
-- Looking for stdio.h - found
-- Looking for stdlib.h
-- Looking for stdlib.h - found
-- Looking for string.h
-- Looking for string.h - found
-- Looking for memset
-- Looking for memset - found
-- Looking for memmove
-- Looking for memmove - found
-- Looking for memory.h
-- Looking for memory.h - found
-- Looking for time.h
-- Looking for time.h - found
-- Found PkgConfig: /usr/bin/pkg-config (found version "1.6.3") 
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE  
-- Checking for module 'sdl2'
--   Found sdl2, version 2.0.7
-- Checking for module 'libmpg123'
--   Found libmpg123, version 1.25.10
-- Checking for module 'gtkmm-3.0'
--   Found gtkmm-3.0, version 3.22.2
-- Found FAAD: /usr/local/lib/libfaad.dll.a
-- Found ICONV: /usr/lib/libiconv.dll.a
-- Performing Test NATIVE_ATOMICS_SUPPORT
-- Performing Test NATIVE_ATOMICS_SUPPORT - Success
--
-- ##########################################################
-- ## Building version: 1.13.0
-- ## Using install prefix: /usr/local
-- ##########################################################
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/Jordi/Descargas/dablin/build

Jordi@PC-Jordi ~/Descargas/dablin/build
$ make
make[1]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
make[2]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
Scanning dependencies of target fec
make[2]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
make[2]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
[  2%] Building C object fec/CMakeFiles/fec.dir/encode_rs_char.c.o
[  4%] Building C object fec/CMakeFiles/fec.dir/decode_rs_char.c.o
[  7%] Building C object fec/CMakeFiles/fec.dir/init_rs_char.c.o
[  9%] Linking C static library libfec.a
make[2]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
[  9%] Built target fec
make[2]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
Scanning dependencies of target rs_speedtest
make[2]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
make[2]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
[ 12%] Building C object fec/test/CMakeFiles/rs_speedtest.dir/rs_speedtest.c.o  
[ 14%] Linking C executable rs_speedtest.exe
make[2]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
[ 14%] Built target rs_speedtest
make[2]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
Scanning dependencies of target rstest
make[2]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
make[2]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
[ 17%] Building C object fec/test/CMakeFiles/rstest.dir/rstest.c.o
[ 19%] Linking C executable rstest.exe
make[2]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
[ 19%] Built target rstest
make[2]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
Scanning dependencies of target dablin
make[2]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
make[2]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
[ 21%] Building CXX object src/CMakeFiles/dablin.dir/sdl_output.cpp.o
[ 24%] Building CXX object src/CMakeFiles/dablin.dir/dabplus_decoder.cpp.o      
[ 26%] Building CXX object src/CMakeFiles/dablin.dir/ensemble_source.cpp.o      
[ 29%] Building CXX object src/CMakeFiles/dablin.dir/ensemble_player.cpp.o      
[ 31%] Building CXX object src/CMakeFiles/dablin.dir/edi_source.cpp.o
[ 34%] Building CXX object src/CMakeFiles/dablin.dir/edi_player.cpp.o
[ 36%] Building CXX object src/CMakeFiles/dablin.dir/eti_source.cpp.o
[ 39%] Building CXX object src/CMakeFiles/dablin.dir/eti_player.cpp.o
[ 41%] Building CXX object src/CMakeFiles/dablin.dir/dab_decoder.cpp.o
[ 43%] Building CXX object src/CMakeFiles/dablin.dir/fic_decoder.cpp.o
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp: En la función miembro static ‘static std::string FICDecoder::ConvertLTOToString(int)’:
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:44: aviso: la salida de la directiva ‘%+03d’ podría truncarse escribiendo entre 3 y 11 bytes en una región de tamaño 7 [-Wformat-truncation=]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                            ^~~~~
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: nota: argumento de la directiva en el rango de [-1073741824, 1073741823]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                           ^~~~~~~~~~~~
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: nota: argumento de la directiva en el rango de [0, 30]
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:10: nota: ‘snprintf’ manda entre 7 y 15 bytes a un destino de tamaño 7
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |  ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp: En la función miembro ‘void FICDecoder::ProcessFIG0_9(const uint8_t*, size_t)’:
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:44: aviso: la salida de la directiva ‘%+03d’ podría truncarse escribiendo entre 3 y 11 bytes en una región de tamaño 7 [-Wformat-truncation=]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                            ^~~~~
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: nota: argumento de la directiva en el rango de [-1073741824, 1073741823]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                           ^~~~~~~~~~~~
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: nota: argumento de la directiva en el rango de [0, 30]
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:10: nota: ‘snprintf’ manda entre 7 y 15 bytes a un destino de tamaño 7
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |  ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 46%] Building CXX object src/CMakeFiles/dablin.dir/pcm_output.cpp.o
[ 48%] Building CXX object src/CMakeFiles/dablin.dir/tools.cpp.o
[ 51%] Building CXX object src/CMakeFiles/dablin.dir/version.cpp.o
[ 53%] Building CXX object src/CMakeFiles/dablin.dir/dablin.cpp.o
[ 56%] Linking CXX executable dablin.exe
make[2]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
[ 56%] Built target dablin
make[2]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
Scanning dependencies of target dablin_gtk
make[2]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
make[2]: se entra en el directorio '/home/Jordi/Descargas/dablin/build'
[ 58%] Building CXX object src/CMakeFiles/dablin_gtk.dir/sdl_output.cpp.o       
[ 60%] Building CXX object src/CMakeFiles/dablin_gtk.dir/dabplus_decoder.cpp.o  
[ 63%] Building CXX object src/CMakeFiles/dablin_gtk.dir/ensemble_source.cpp.o  
[ 65%] Building CXX object src/CMakeFiles/dablin_gtk.dir/ensemble_player.cpp.o  
[ 68%] Building CXX object src/CMakeFiles/dablin_gtk.dir/edi_source.cpp.o       
[ 70%] Building CXX object src/CMakeFiles/dablin_gtk.dir/edi_player.cpp.o       
[ 73%] Building CXX object src/CMakeFiles/dablin_gtk.dir/eti_source.cpp.o       
[ 75%] Building CXX object src/CMakeFiles/dablin_gtk.dir/eti_player.cpp.o       
[ 78%] Building CXX object src/CMakeFiles/dablin_gtk.dir/dab_decoder.cpp.o      
[ 80%] Building CXX object src/CMakeFiles/dablin_gtk.dir/fic_decoder.cpp.o      
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp: En la función miembro static ‘static std::string FICDecoder::ConvertLTOToString(int)’:
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:44: aviso: la salida de la directiva ‘%+03d’ podría truncarse escribiendo entre 3 y 11 bytes en una región de tamaño 7 [-Wformat-truncation=]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                            ^~~~~
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: nota: argumento de la directiva en el rango de [-1073741824, 1073741823]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                           ^~~~~~~~~~~~
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: nota: argumento de la directiva en el rango de [0, 30]
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:10: nota: ‘snprintf’ manda entre 7 y 15 bytes a un destino de tamaño 7
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |  ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp: En la función miembro ‘void FICDecoder::ProcessFIG0_9(const uint8_t*, size_t)’:
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:44: aviso: la salida de la directiva ‘%+03d’ podría truncarse escribiendo entre 3 y 11 bytes en una región de tamaño 7 [-Wformat-truncation=]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                            ^~~~~
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: nota: argumento de la directiva en el rango de [-1073741824, 1073741823]
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |                                           ^~~~~~~~~~~~
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:43: nota: argumento de la directiva en el rango de [0, 30]
/home/Jordi/Descargas/dablin/src/fic_decoder.cpp:873:10: nota: ‘snprintf’ manda entre 7 y 15 bytes a un destino de tamaño 7
  873 |  snprintf(lto_string, sizeof(lto_string), "%+03d:%02d", value / 2, (value % 2) ? 30 : 0);
      |  ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[ 82%] Building CXX object src/CMakeFiles/dablin_gtk.dir/pcm_output.cpp.o       
[ 85%] Building CXX object src/CMakeFiles/dablin_gtk.dir/tools.cpp.o
[ 87%] Building CXX object src/CMakeFiles/dablin_gtk.dir/version.cpp.o
[ 90%] Building CXX object src/CMakeFiles/dablin_gtk.dir/mot_manager.cpp.o      
[ 92%] Building CXX object src/CMakeFiles/dablin_gtk.dir/pad_decoder.cpp.o      
[ 95%] Building CXX object src/CMakeFiles/dablin_gtk.dir/dablin_gtk.cpp.o       
En el fichero incluido desde /usr/include/sigc++-2.0/sigc++/sigc++.h:104,
                 desde /usr/include/glibmm-2.4/glibmm/thread.h:49,
                 desde /usr/include/glibmm-2.4/glibmm.h:88,
                 desde /usr/include/gtkmm-3.0/gtkmm.h:87,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.h:31,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:19:
/usr/include/sigc++-2.0/sigc++/signal.h: En la función miembro static ‘static sigc::internal::signal_emit0<void, sigc::nil>::result_type sigc::internal::signal_emit0<void, sigc::nil>::emit(sigc::internal::signal_impl*)’:
/usr/include/sigc++-2.0/sigc++/signal.h:794:56: aviso: cast between incompatible function types from ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} to ‘sigc::internal::signal_emit0<void, sigc::nil>::call_type’ {aka ‘void (*)(sigc::internal::slot_rep*)’} [-Wcast-function-type]
  794 |           (reinterpret_cast<call_type>(slot.rep_->call_))(slot.rep_);
      |                                                        ^
/usr/include/sigc++-2.0/sigc++/signal.h: En la función miembro static ‘static sigc::internal::signal_emit0<void, sigc::nil>::result_type sigc::internal::signal_emit0<void, sigc::nil>::emit_reverse(sigc::internal::signal_impl*)’:
/usr/include/sigc++-2.0/sigc++/signal.h:821:55: aviso: cast between incompatible function types from ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} to ‘sigc::internal::signal_emit0<void, sigc::nil>::call_type’ {aka ‘void (*)(sigc::internal::slot_rep*)’} [-Wcast-function-type]
  821 |           (reinterpret_cast<call_type>(it->rep_->call_))(it->rep_);
      |                                                       ^
En el fichero incluido desde /usr/include/glibmm-2.4/glibmm.h:90,
                 desde /usr/include/gtkmm-3.0/gtkmm.h:87,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.h:31,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:19:
/usr/include/glibmm-2.4/glibmm/threads.h: En la función miembro ‘GPrivate* Glib::Threads::Private<T>::gobj()’:
/usr/include/glibmm-2.4/glibmm/threads.h:660:29: error: cannot convert ‘GPrivate’ {aka ‘_GPrivate’} to ‘GPrivate*’ {aka ‘_GPrivate*’} in return
  660 |   GPrivate* gobj() { return gobject_; }
      |                             ^~~~~~~~
      |                             |
      |                             GPrivate {aka _GPrivate}
En el fichero incluido desde /usr/include/gtk-3.0/gtk/gtk.h:100,
                 desde /usr/include/gtkmm-3.0/gtkmm/enums.h:28,
                 desde /usr/include/gtkmm-3.0/gtkmm/widget.h:47,
                 desde /usr/include/gtkmm-3.0/gtkmm/action.h:31,
                 desde /usr/include/gtkmm-3.0/gtkmm/toggleaction.h:29,
                 desde /usr/include/gtkmm-3.0/gtkmm.h:95,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.h:31,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:19:
/usr/include/gtk-3.0/gtk/gtkfilechooserbutton.h: En el ámbito global:
/usr/include/gtk-3.0/gtk/gtkfilechooserbutton.h:66:8: aviso: unnecessary parentheses in declaration of ‘__gtk_reserved1’ [-Wparentheses]
   66 |   void (*__gtk_reserved1);
      |        ^
/usr/include/gtk-3.0/gtk/gtkfilechooserbutton.h:67:8: aviso: unnecessary parentheses in declaration of ‘__gtk_reserved2’ [-Wparentheses]
   67 |   void (*__gtk_reserved2);
      |        ^
/usr/include/gtk-3.0/gtk/gtkfilechooserbutton.h:68:8: aviso: unnecessary parentheses in declaration of ‘__gtk_reserved3’ [-Wparentheses]
   68 |   void (*__gtk_reserved3);
      |        ^
/usr/include/gtk-3.0/gtk/gtkfilechooserbutton.h:69:8: aviso: unnecessary parentheses in declaration of ‘__gtk_reserved4’ [-Wparentheses]
   69 |   void (*__gtk_reserved4);
      |        ^
En el fichero incluido desde /usr/include/gtk-3.0/gtk/gtk.h:271,
                 desde /usr/include/gtkmm-3.0/gtkmm/enums.h:28,
                 desde /usr/include/gtkmm-3.0/gtkmm/widget.h:47,
                 desde /usr/include/gtkmm-3.0/gtkmm/action.h:31,
                 desde /usr/include/gtkmm-3.0/gtkmm/toggleaction.h:29,
                 desde /usr/include/gtkmm-3.0/gtkmm.h:95,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.h:31,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:19:
/usr/include/gtk-3.0/gtk/deprecated/gtkstatusicon.h:74:8: aviso: unnecessary parentheses in declaration of ‘__gtk_reserved1’ [-Wparentheses]
   74 |   void (*__gtk_reserved1);
      |        ^
/usr/include/gtk-3.0/gtk/deprecated/gtkstatusicon.h:75:8: aviso: unnecessary parentheses in declaration of ‘__gtk_reserved2’ [-Wparentheses]
   75 |   void (*__gtk_reserved2);
      |        ^
/usr/include/gtk-3.0/gtk/deprecated/gtkstatusicon.h:76:8: aviso: unnecessary parentheses in declaration of ‘__gtk_reserved3’ [-Wparentheses]
   76 |   void (*__gtk_reserved3);
      |        ^
/usr/include/gtk-3.0/gtk/deprecated/gtkstatusicon.h:77:8: aviso: unnecessary parentheses in declaration of ‘__gtk_reserved4’ [-Wparentheses]
   77 |   void (*__gtk_reserved4);
      |        ^
En el fichero incluido desde /usr/include/sigc++-2.0/sigc++/signal_base.h:27,
                 desde /usr/include/sigc++-2.0/sigc++/signal.h:8,
                 desde /usr/include/sigc++-2.0/sigc++/sigc++.h:104,
                 desde /usr/include/glibmm-2.4/glibmm/thread.h:49,
                 desde /usr/include/glibmm-2.4/glibmm.h:88,
                 desde /usr/include/gtkmm-3.0/gtkmm.h:87,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.h:31,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:19:
/usr/include/sigc++-2.0/sigc++/functors/slot.h: En la instanciación de ‘static void* (* sigc::internal::slot_call2<T_functor, T_return, T_arg1, T_arg2>::address())(void*) [con T_functor = sigc::bind_functor<-1, sigc::bound_mem_functor3<void, Gtk::TreeView, const Glib::ustring&, int, const Glib::RefPtr<Gtk::TreeModel>&>, Glib::RefPtr<Gtk::TreeModel>, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&; T_arg2 = int; sigc::internal::hook = void* (*)(void*)]’:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:790:98:   se requiere desde ‘sigc::slot2<T_return, T_arg1, T_arg2>::slot2(const T_functor&) [con T_functor = sigc::bind_functor<-1, sigc::bound_mem_functor3<void, Gtk::TreeView, const Glib::ustring&, int, const Glib::RefPtr<Gtk::TreeModel>&>, Glib::RefPtr<Gtk::TreeModel>, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&; T_arg2 = int]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1890:26:   se requiere desde ‘sigc::slot<T_return, T_arg1, T_arg2, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [con T_functor = sigc::bind_functor<-1, sigc::bound_mem_functor3<void, Gtk::TreeView, const Glib::ustring&, int, const Glib::RefPtr<Gtk::TreeModel>&>, Glib::RefPtr<Gtk::TreeModel>, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&; T_arg2 = int]’
/usr/include/gtkmm-3.0/gtkmm/treeview.h:2298:7:   se requiere desde aquí
/usr/include/sigc++-2.0/sigc++/functors/slot.h:191:14: aviso: cast between incompatible function types from ‘void (*)(sigc::internal::slot_rep*, sigc::type_trait_take_t<const Glib::ustring&>, sigc::type_trait_take_t<int>)’ {aka ‘void (*)(sigc::internal::slot_rep*, const Glib::ustring&, const int&)’} to ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} [-Wcast-function-type]
  191 |     { return reinterpret_cast<hook>(&call_it); }
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sigc++-2.0/sigc++/functors/slot.h: En la instanciación de ‘static void* (* sigc::internal::slot_call1<T_functor, T_return, T_arg1>::address())(void*) [con T_functor = sigc::bind_functor<-1, sigc::slot<void, const Glib::ustring&, int>, int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&; sigc::internal::hook = void* (*)(void*)]’:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:657:90:   se requiere desde ‘sigc::slot1<T_return, T_arg1>::slot1(const T_functor&) [con T_functor = sigc::bind_functor<-1, sigc::slot<void, const Glib::ustring&, int>, int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1821:26:   se requiere desde ‘sigc::slot<T_return, T_arg1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [con T_functor = sigc::bind_functor<-1, sigc::slot<void, const Glib::ustring&, int>, int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&]’
/usr/include/gtkmm-3.0/gtkmm/treeview.h:2305:5:   se requiere desde aquí
/usr/include/sigc++-2.0/sigc++/functors/slot.h:155:14: aviso: cast between incompatible function types from ‘void (*)(sigc::internal::slot_rep*, sigc::type_trait_take_t<const Glib::ustring&>)’ {aka ‘void (*)(sigc::internal::slot_rep*, const Glib::ustring&)’} to ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} [-Wcast-function-type]
  155 |     { return reinterpret_cast<hook>(&call_it); }
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sigc++-2.0/sigc++/functors/slot.h: En la instanciación de ‘static void* (* sigc::internal::slot_call0<T_functor, T_return>::address())(void*) [con T_functor = sigc::bound_mem_functor0<void, DABlinGTK>; T_return = void; sigc::internal::hook = void* (*)(void*)]’:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:527:82:   se requiere desde ‘sigc::slot0<T_return>::slot0(const T_functor&) [con T_functor = sigc::bound_mem_functor0<void, DABlinGTK>; T_return = void]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1752:26:   se requiere desde ‘sigc::slot<T_return, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [con T_functor = sigc::bound_mem_functor0<void, DABlinGTK>; T_return = void]’
/home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:256:114:   se requiere desde aquí
/usr/include/sigc++-2.0/sigc++/functors/slot.h:121:14: aviso: cast between incompatible function types from ‘void (*)(sigc::internal::slot_rep*)’ to ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} [-Wcast-function-type]
  121 |     { return reinterpret_cast<hook>(&call_it); }
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sigc++-2.0/sigc++/functors/slot.h: En la instanciación de ‘static void* (* sigc::internal::slot_call1<T_functor, T_return, T_arg1>::address())(void*) [con T_functor = sigc::bound_mem_functor1<bool, DABlinGTK, _GdkEventKey*>; T_return = bool; T_arg1 = _GdkEventKey*; sigc::internal::hook = void* (*)(void*)]’:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:657:90:   se requiere desde ‘sigc::slot1<T_return, T_arg1>::slot1(const T_functor&) [con T_functor = sigc::bound_mem_functor1<bool, DABlinGTK, _GdkEventKey*>; T_return = bool; T_arg1 = _GdkEventKey*]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1821:26:   se requiere desde ‘sigc::slot<T_return, T_arg1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [con T_functor = sigc::bound_mem_functor1<bool, DABlinGTK, _GdkEventKey*>; T_return = bool; T_arg1 = _GdkEventKey*]’
/home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:297:88:   se requiere desde aquí
/usr/include/sigc++-2.0/sigc++/functors/slot.h:155:14: aviso: cast between incompatible function types from ‘bool (*)(sigc::internal::slot_rep*, sigc::type_trait_take_t<_GdkEventKey*>)’ {aka ‘bool (*)(sigc::internal::slot_rep*, _GdkEventKey* const&)’} to ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} [-Wcast-function-type]
  155 |     { return reinterpret_cast<hook>(&call_it); }
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sigc++-2.0/sigc++/functors/slot.h: En la instanciación de ‘static void* (* sigc::internal::slot_call1<T_functor, T_return, T_arg1>::address())(void*) [con T_functor = sigc::bound_mem_functor1<bool, DABlinGTK, _GdkEventConfigure*>; T_return = bool; T_arg1 = _GdkEventConfigure*; sigc::internal::hook = void* (*)(void*)]’:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:657:90:   se requiere desde ‘sigc::slot1<T_return, T_arg1>::slot1(const T_functor&) [con T_functor = sigc::bound_mem_functor1<bool, DABlinGTK, _GdkEventConfigure*>; T_return = bool; T_arg1 = _GdkEventConfigure*]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1821:26:   se requiere desde ‘sigc::slot<T_return, T_arg1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [con T_functor = sigc::bound_mem_functor1<bool, DABlinGTK, _GdkEventConfigure*>; T_return = bool; T_arg1 = _GdkEventConfigure*]’
/home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:301:96:   se requiere desde aquí
/usr/include/sigc++-2.0/sigc++/functors/slot.h:155:14: aviso: cast between incompatible function types from ‘bool (*)(sigc::internal::slot_rep*, sigc::type_trait_take_t<_GdkEventConfigure*>)’ {aka ‘bool (*)(sigc::internal::slot_rep*, _GdkEventConfigure* const&)’} to ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} [-Wcast-function-type]
/usr/include/sigc++-2.0/sigc++/functors/slot.h: En la instanciación de ‘static void* (* sigc::internal::slot_call1<T_functor, T_return, T_arg1>::address())(void*) [con T_functor = sigc::bound_mem_functor1<bool, DABlinGTK, _GdkEventAny*>; T_return = bool; T_arg1 = _GdkEventAny*; sigc::internal::hook = void* (*)(void*)]’:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:657:90:   se requiere desde ‘sigc::slot1<T_return, T_arg1>::slot1(const T_functor&) [con T_functor = sigc::bound_mem_functor1<bool, DABlinGTK, _GdkEventAny*>; T_return = bool; T_arg1 = _GdkEventAny*]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1821:26:   se requiere desde ‘sigc::slot<T_return, T_arg1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [con T_functor = sigc::bound_mem_functor1<bool, DABlinGTK, _GdkEventAny*>; T_return = bool; T_arg1 = _GdkEventAny*]’
/home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:341:94:   se requiere desde aquí
/usr/include/sigc++-2.0/sigc++/functors/slot.h:155:14: aviso: cast between incompatible function types from ‘bool (*)(sigc::internal::slot_rep*, sigc::type_trait_take_t<_GdkEventAny*>)’ {aka ‘bool (*)(sigc::internal::slot_rep*, _GdkEventAny* const&)’} to ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} [-Wcast-function-type]
/usr/include/sigc++-2.0/sigc++/functors/slot.h: En la instanciación de ‘static void* (* sigc::internal::slot_call2<T_functor, T_return, T_arg1, T_arg2>::address())(void*) [con T_functor = sigc::bound_mem_functor2<int, DABlinGTK, const Gtk::TreeIter&, const Gtk::TreeIter&>; T_return = int; T_arg1 = const Gtk::TreeIter&; T_arg2 = const Gtk::TreeIter&; sigc::internal::hook = void* (*)(void*)]’:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:790:98:   se requiere desde ‘sigc::slot2<T_return, T_arg1, T_arg2>::slot2(const T_functor&) [con T_functor = sigc::bound_mem_functor2<int, DABlinGTK, const Gtk::TreeIter&, const Gtk::TreeIter&>; T_return = int; T_arg1 = const Gtk::TreeIter&; T_arg2 = const Gtk::TreeIter&]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1890:26:   se requiere desde ‘sigc::slot<T_return, T_arg1, T_arg2, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [con T_functor = sigc::bound_mem_functor2<int, DABlinGTK, const Gtk::TreeIter&, const Gtk::TreeIter&>; T_return = int; T_arg1 = const Gtk::TreeIter&; T_arg2 = const Gtk::TreeIter&]’
/home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:352:108:   se requiere desde aquí
/usr/include/sigc++-2.0/sigc++/functors/slot.h:191:14: aviso: cast between incompatible function types from ‘int (*)(sigc::internal::slot_rep*, sigc::type_trait_take_t<const Gtk::TreeIter&>, sigc::type_trait_take_t<const Gtk::TreeIter&>)’ {aka ‘int (*)(sigc::internal::slot_rep*, const Gtk::TreeIter&, const Gtk::TreeIter&)’} to ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} [-Wcast-function-type]
  191 |     { return reinterpret_cast<hook>(&call_it); }
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sigc++-2.0/sigc++/functors/slot.h: En la instanciación de ‘static void* (* sigc::internal::slot_call1<T_functor, T_return, T_arg1>::address())(void*) [con T_functor = sigc::bound_mem_functor1<void, DABlinGTK, double>; T_return = void; T_arg1 = double; sigc::internal::hook = void* (*)(void*)]’:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:657:90:   se requiere desde ‘sigc::slot1<T_return, T_arg1>::slot1(const T_functor&) [con T_functor = sigc::bound_mem_functor1<void, DABlinGTK, double>; T_return = void; T_arg1 = double]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1821:26:   se requiere desde ‘sigc::slot<T_return, T_arg1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [con T_functor = sigc::bound_mem_functor1<void, DABlinGTK, double>; T_return = void; T_arg1 = double]’
/home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:415:83:   se requiere desde aquí
/usr/include/sigc++-2.0/sigc++/functors/slot.h:155:14: aviso: cast between incompatible function types from ‘void (*)(sigc::internal::slot_rep*, sigc::type_trait_take_t<double>)’ {aka ‘void (*)(sigc::internal::slot_rep*, const double&)’} to ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} [-Wcast-function-type]
  155 |     { return reinterpret_cast<hook>(&call_it); }
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/sigc++-2.0/sigc++/functors/slot.h: En la instanciación de ‘static void* (* sigc::internal::slot_call2<T_functor, T_return, T_arg1, T_arg2>::address())(void*) [con T_functor = sigc::bind_functor<-1, sigc::bind_functor<-1, sigc::pointer_functor4<const Glib::ustring&, const Glib::ustring&, int, const Glib::RefPtr<Gtk::TreeModel>&, void>, Glib::RefPtr<Gtk::TreeModel>, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&; T_arg2 = const Glib::ustring&; sigc::internal::hook = void* (*)(void*)]’:
/usr/include/sigc++-2.0/sigc++/functors/slot.h:790:98:   se requiere desde ‘sigc::slot2<T_return, T_arg1, T_arg2>::slot2(const T_functor&) [con T_functor = sigc::bind_functor<-1, sigc::bind_functor<-1, sigc::pointer_functor4<const Glib::ustring&, const Glib::ustring&, int, const Glib::RefPtr<Gtk::TreeModel>&, void>, Glib::RefPtr<Gtk::TreeModel>, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&; T_arg2 = const Glib::ustring&]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1890:26:   se requiere desde ‘sigc::slot<T_return, T_arg1, T_arg2, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [con T_functor = sigc::bind_functor<-1, sigc::bind_functor<-1, sigc::pointer_functor4<const Glib::ustring&, const Glib::ustring&, int, const Glib::RefPtr<Gtk::TreeModel>&, void>, Glib::RefPtr<Gtk::TreeModel>, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>, int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&; T_arg2 = const Glib::ustring&]’
/usr/include/gtkmm-3.0/gtkmm/treeview.h:2416:5:   se requiere desde ‘void Gtk::TreeView_Private::_connect_auto_store_numeric_editable_signal_handler(Gtk::TreeView*, Gtk::CellRenderer*, const Gtk::TreeModelColumn<ColumnType>&) [con ColumnType = int]’
/usr/include/gtkmm-3.0/gtkmm/treeview.h:2315:95:   se requiere desde aquí
/usr/include/sigc++-2.0/sigc++/functors/slot.h:191:14: aviso: cast between incompatible function types from ‘void (*)(sigc::internal::slot_rep*, sigc::type_trait_take_t<const Glib::ustring&>, sigc::type_trait_take_t<const Glib::ustring&>)’ {aka ‘void (*)(sigc::internal::slot_rep*, const Glib::ustring&, const Glib::ustring&)’} to ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} [-Wcast-function-type]
  191 |     { return reinterpret_cast<hook>(&call_it); }
      |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
En el fichero incluido desde /usr/include/sigc++-2.0/sigc++/signal_base.h:27,
                 desde /usr/include/sigc++-2.0/sigc++/signal.h:8,
                 desde /usr/include/sigc++-2.0/sigc++/sigc++.h:104,
                 desde /usr/include/glibmm-2.4/glibmm/thread.h:49,
                 desde /usr/include/glibmm-2.4/glibmm.h:88,
                 desde /usr/include/gtkmm-3.0/gtkmm.h:87,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.h:31,
                 desde /home/Jordi/Descargas/dablin/src/dablin_gtk.cpp:19:
/usr/include/sigc++-2.0/sigc++/functors/slot.h: En la instanciación de ‘T_return sigc::slot2<T_return, T_arg1, T_arg2>::operator()(sigc::slot2<T_return, T_arg1, T_arg2>::arg1_type_, sigc::slot2<T_return, T_arg1, T_arg2>::arg2_type_) const [con T_return = void; T_arg1 = const Glib::ustring&; T_arg2 = int; sigc::slot2<T_return, T_arg1, T_arg2>::arg1_type_ = const Glib::ustring&; sigc::slot2<T_return, T_arg1, T_arg2>::arg2_type_ = const int&]’:
/usr/include/sigc++-2.0/sigc++/adaptors/adaptor_trait.h:108:39:   se requiere desde ‘typename sigc::adaptor_functor<T_functor>::deduce_result_type<T_arg1, T_arg2>::type sigc::adaptor_functor<T_functor>::operator()(T_arg1, T_arg2) const [con T_arg1 = const Glib::ustring&; T_arg2 = int&; T_functor = sigc::slot<void, const Glib::ustring&, int>; typename sigc::adaptor_functor<T_functor>::deduce_result_type<T_arg1, T_arg2>::type = void]’
/usr/include/sigc++-2.0/sigc++/adaptors/bind.h:1136:35:   se requiere desde ‘typename sigc::bind_functor<-1, T_functor, T_type1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::deduce_result_type<T_arg1>::type sigc::bind_functor<-1, T_functor, T_type1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::operator()(T_arg1) [con T_arg1 = const Glib::ustring&; T_functor = sigc::slot<void, const Glib::ustring&, int>; T_type1 = int; typename sigc::bind_functor<-1, T_functor, T_type1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::deduce_result_type<T_arg1>::type = void]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:148:20:   se requiere desde ‘static T_return sigc::internal::slot_call1<T_functor, T_return, T_arg1>::call_it(sigc::internal::slot_rep*, sigc::type_trait_take_t<T_arg3>) [con T_functor = sigc::bind_functor<-1, sigc::slot<void, const Glib::ustring&, int>, int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&; sigc::type_trait_take_t<T_arg3> = const Glib::ustring&]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:155:37:   se requiere desde ‘static void* (* sigc::internal::slot_call1<T_functor, T_return, T_arg1>::address())(void*) [con T_functor = sigc::bind_functor<-1, sigc::slot<void, const Glib::ustring&, int>, int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&; sigc::internal::hook = void* (*)(void*)]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:657:90:   se requiere desde ‘sigc::slot1<T_return, T_arg1>::slot1(const T_functor&) [con T_functor = sigc::bind_functor<-1, sigc::slot<void, const Glib::ustring&, int>, int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&]’
/usr/include/sigc++-2.0/sigc++/functors/slot.h:1821:26:   se requiere desde ‘sigc::slot<T_return, T_arg1, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>::slot(const T_functor&) [con T_functor = sigc::bind_functor<-1, sigc::slot<void, const Glib::ustring&, int>, int, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil, sigc::nil>; T_return = void; T_arg1 = const Glib::ustring&]’
/usr/include/gtkmm-3.0/gtkmm/treeview.h:2305:5:   se requiere desde aquí
/usr/include/sigc++-2.0/sigc++/functors/slot.h:776:17: aviso: cast between incompatible function types from ‘sigc::internal::hook’ {aka ‘void* (*)(void*)’} to ‘sigc::slot2<void, const Glib::ustring&, int>::call_type’ {aka ‘void (*)(sigc::internal::slot_rep*, const Glib::ustring&, const int&)’} [-Wcast-function-type]
  776 |         return (reinterpret_cast<call_type>(slot_base::rep_->call_))(slot_base::rep_, _A_a1, _A_a2);
      |                ~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [src/CMakeFiles/dablin_gtk.dir/build.make:258: src/CMakeFiles/dablin_gtk.dir/dablin_gtk.cpp.o] Error 1
make[2]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
make[1]: *** [CMakeFiles/Makefile2:313: src/CMakeFiles/dablin_gtk.dir/all] Error 2
make[1]: se sale del directorio '/home/Jordi/Descargas/dablin/build'
make: *** [Makefile:141: all] Error 2

Jordi@PC-Jordi ~/Descargas/dablin/build
$ 

Cannot compile under RPI Strech

I wanted to compile the latest master branch, but it fails at dablin_gtk

dablin_fail.txt

Before, I have updated the system with sudo apt-get update and sudo apt-get upgrade

In the past I have successfully compiled DABlin v1.9.0-16-g97ae4b4

Audio buffer overflow

Ubuntu 18.04 LTS
Stream from enigma2 receiver to Dablin player.

`
user@user-LIFEBOOK-AH531:~$ wget http://192.168.0.2:8001/1:0:1:3C:0:1:30300F:0:0:0: -q -O- | ts2na -p 1062 -s 12 | na2ni | dablin_gtk
INFO: Using pid: 0x0426 (1062)
WARN: Forward error correction (FEC) enabled
DABlin v1.8.0 - capital DAB experience
Plays a DAB/DAB+ audio service from a frame-aligned ETI-NI stream.
https://github.com/Opendigitalradio/dablin

SDLOutput: using SDL version '2.0.8'
ETISource: reading from 'stdin'
INFO: E1 Sync found at bit: 136, inverted: yes
DEBUG: seek: B:17, b:0
DEBUG: pre-readed output 15 frames (14 bytes left):
DEBUG: MULTIFRAME FILLING: 207
INFO: ETI Sync found at pos: 0
INFO: ETI Multiframe sync found at blockId: 7
.FICDecoder: SubChId 1: start 0 CUs, size 96 CUs, PL UEP 3 = 128 kBit/s
FICDecoder: SubChId 2: start 96 CUs, size 48 CUs, PL UEP 3 = 64 kBit/s
FICDecoder: SubChId 35: start 144 CUs, size 12 CUs, PL EEP 3-A = 16 kBit/s
FICDecoder: SubChId 17: start 156 CUs, size 58 CUs, PL UEP 3 = 80 kBit/s
FICDecoder: SubChId 15: start 214 CUs, size 48 CUs, PL UEP 3 = 64 kBit/s
FICDecoder: SubChId 9: start 262 CUs, size 58 CUs, PL UEP 3 = 80 kBit/s
FICDecoder: SubChId 16: start 320 CUs, size 84 CUs, PL UEP 3 = 112 kBit/s
FICDecoder: SId 0xC0C6: audio service (SubChId 11, DAB , primary)
FICDecoder: SId 0xCFD1: audio service (SubChId 4, DAB , primary)
FICDecoder: SId 0xC5DA: audio service (SubChId 12, DAB , primary)
FICDecoder: SId 0xCAC2: audio service (SubChId 18, DAB , primary)
FICDecoder: SubChId 8: start 404 CUs, size 58 CUs, PL UEP 3 = 80 kBit/s
FICDecoder: SubChId 3: start 462 CUs, size 58 CUs, PL UEP 3 = 80 kBit/s
FICDecoder: SubChId 7: start 520 CUs, size 48 CUs, PL UEP 3 = 64 kBit/s
FICDecoder: SubChId 10: start 568 CUs, size 58 CUs, PL UEP 3 = 80 kBit/s
FICDecoder: SubChId 11: start 626 CUs, size 58 CUs, PL UEP 3 = 80 kBit/s
FICDecoder: SubChId 4: start 684 CUs, size 58 CUs, PL UEP 3 = 80 kBit/s
FICDecoder: SubChId 12: start 742 CUs, size 58 CUs, PL UEP 3 = 80 kBit/s
FICDecoder: SubChId 18: start 800 CUs, size 58 CUs, PL UEP 3 = 80 kBit/s
FICDecoder: SId 0xCAC2: programme service label 'Absolute Rad 90s'
FICDecoder: SId 0xC2A1: audio service (SubChId 1, DAB , primary)
FICDecoder: SId 0xC0C0: audio service (SubChId 2, DAB , primary)
FICDecoder: SId 0xC4CD: audio service (SubChId 17, DAB , primary)
FICDecoder: SId 0xC0C2: audio service (SubChId 15, DAB , primary)
FICDecoder: SId 0xC1DC: audio service (SubChId 9, DAB , primary)
FICDecoder: SId 0xC5DA: programme service label 'Capital UK'
FICDecoder: SId 0xCFD1: programme service label 'Heart extra'
FICDecoder: SId 0xC37B: audio service (SubChId 16, DAB , primary)
FICDecoder: SId 0xC6C0: audio service (SubChId 8, DAB , primary)
FICDecoder: SId 0xC1C0: audio service (SubChId 3, DAB , primary)
FICDecoder: SId 0xC4CA: audio service (SubChId 7, DAB , primary)
FICDecoder: SId 0xC5C0: audio service (SubChId 10, DAB , primary)
FICDecoder: SId 0xC0C6: programme service label 'Magic'
FICDecoder: SId 0xC1C0: programme service label 'Absolute Radio'
FICDecoder: SId 0xC5C0: programme service label 'KISS'
FICDecoder: SId 0xC4CA: programme service label 'UCB 1'
FICDecoder: SId 0xC6C0: programme service label 'Smooth Extra'
FICDecoder: SId 0xC37B: programme service label 'Capital XTRA'
FICDecoder: SId 0xC1DC: programme service label 'Heart 80s'
FICDecoder: EId 0xC181: ensemble label 'D1 National'
FICDecoder: SId 0xC0C2: programme service label 'LBC'
FICDecoder: SId 0xC4CD: programme service label 'Radio X'
FICDecoder: SId 0xC0C0: programme service label 'talkSPORT'
FICDecoder: SId 0xC2A1: programme service label 'Classic FM'
FICDecoder: SId 0xC2A1, SCIdS 0: MSC service component (SubChId 1)
FICDecoder: SId 0xC0C0, SCIdS 0: MSC service component (SubChId 2)
FICDecoder: SId 0xC4CD, SCIdS 0: MSC service component (SubChId 17)
FICDecoder: SId 0xC0C2, SCIdS 0: MSC service component (SubChId 15)
FICDecoder: SId 0xC1DC, SCIdS 0: MSC service component (SubChId 9)
FICDecoder: SId 0xC37B, SCIdS 0: MSC service component (SubChId 16)
FICDecoder: SId 0xC6C0, SCIdS 0: MSC service component (SubChId 8)
FICDecoder: SId 0xC1C0, SCIdS 0: MSC service component (SubChId 3)
FICDecoder: SId 0xC4CA, SCIdS 0: MSC service component (SubChId 7)
FICDecoder: SId 0xC5C0, SCIdS 0: MSC service component (SubChId 10)
FICDecoder: SId 0xC0C6, SCIdS 0: MSC service component (SubChId 11)
FICDecoder: SId 0xCFD1, SCIdS 0: MSC service component (SubChId 4)
FICDecoder: SId 0xC5DA, SCIdS 0: MSC service component (SubChId 12)
FICDecoder: SId 0xCAC2, SCIdS 0: MSC service component (SubChId 18)
.ETIPlayer: playing sub-channel 9 (DAB)
MP2Decoder: using decoder 'AVX'.
ETIPlayer: format: MPEG 1.0 Layer II, 48 kHz Mono @ 80 kbit/s
SDLOutput: using audio buffer of 96000 bytes
SDLOutput: audio opened; driver name: pulseaudio, freq: 48000, channels: 1, size: 16384, samples: 4096, silence: 0x00, output: 32bit float
SDLOutput: audio buffer overflow: 4608 > 3840
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 2560
SDLOutput: silence started...
SDLOutput: silence ended (2304 bytes)
SDLOutput: audio buffer overflow: 4608 > 1792
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: silence started...
SDLOutput: silence ended (18688 bytes)
SDLOutput: audio buffer overflow: 4608 > 1792
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: silence started...
.SDLOutput: silence ended (18688 bytes)
SDLOutput: audio buffer overflow: 4608 > 1792
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: silence started...
SDLOutput: silence ended (18688 bytes)
SDLOutput: audio buffer overflow: 4608 > 1792
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: silence started...
SDLOutput: silence ended (18688 bytes)
SDLOutput: audio buffer overflow: 4608 > 1792
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0
SDLOutput: audio buffer overflow: 4608 > 0

`
Sound interrupted almost every second.
[url=https://postimg.cc/image/qxnfdr7qv/][img]https://s15.postimg.cc/qxnfdr7qv/IMG_20180612_155226.jpg[/img][/url]

Record whole ensemble

Maybe some people don't need this, but the ones who mainly use DABlin to hear Satellite DAB feeds, know that sometimes we want to save the whole ensemble (ETI-NI), so we have to close DABlin, and open it again but finishing command line with > file.eti .
Then we can't hear what we are recording.
Would it be posible to add another record button, to record ensemble (.eti file) ?
(I understand it's easy to do, just to copy stdin to a .eti file)
Then, we could record without exiting DABlin.

Mention g++

Could you add also

sudo apt-get install g++

for Ubuntu and other derivates users?

I know you mention it in the 1st paragraph, but this might be not understood by all.

fec.h not found

Make failed with message
"dabplus_decoder.h:41:17: schwerwiegender Fehler: fec.h: Datei oder Verzeichnis nicht gefunden"

DAB+ from TRT Turkey

TRT DAB+ signal from Turkey

$ curl http://........... | dablin_gtk.exe

DABlin v1.10.0 - capital DAB experience
Plays a DAB/DAB+ audio service from a frame-aligned ETI-NI stream.
https://github.com/Opendigitalradio/dablin
SDLOutput: using SDL version '2.0.7'
ETISource: reading from 'stdin'
ETIPlayer: ignored ETI frame with FSYNC = 0x6F1910
ETIPlayer: ignored ETI frame with FSYNC = 0xDC44A5
ETIPlayer: ignored ETI frame with FSYNC = 0xFFE694
ETIPlayer: ignored ETI frame with FSYNC = 0xDA198B
ETIPlayer: ignored ETI frame with FSYNC = 0xA70C59
ETIPlayer: ignored ETI frame with FSYNC = 0x422014
ETIPlayer: ignored ETI frame with FSYNC = 0xF23DE2
ETIPlayer: ignored ETI frame with FSYNC = 0xE1E886
ETIPlayer: ignored ETI frame with FSYNC = 0x031C6D
ETIPlayer: ignored ETI frame with FSYNC = 0x7C02E2
ETIPlayer: ignored ETI frame with FSYNC = 0x560000
……..

and it does not play audio.
Since 3 days ago.

Adding -z switch to the linker flags breaks linking on macOS using clang.

Adding -z switch to the linker flags breaks linking on macOS using clang.

[ 66%] Linking CXX executable dablin_gtk
clang: warning: argument unused during compilation: '-pie' [-Wunused-command-line-argument]
ld: warning: option -s is obsolete and being ignored
ld: unknown option: -z
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Originally posted by @npm-sdr in https://github.com/Opendigitalradio/dablin/commit_comment/create#commitcomment-31847496

DABlin GTK Icons on macOS

Hi Stefan,

A long time ago you spotted that the icons were missing from macOS version of DABlin. I Just spent a bit of time this evening to get the icons working.

It turns out that installing gtkmm+3 doesn't install the icons. To get the icons, I had to install "adwaita-icon-theme" package (`brew install adwaita-icon-theme').

Can I update README.md with macOS instructions?

I've attached a screenshot of DABlin on macOS.

Regards,
Niro.

Screenshot 2019-08-06 at 20 31 10

Gtk-WARNING - Debian 9 Mate

Hi,

I can not start the dablin_GTK program

odr@debian:~$ dablin_gtk
DABlin v1.7.0 - capital DAB experience
Plays a DAB/DAB+ audio service from a frame-aligned ETI-NI stream.
  https://github.com/Opendigitalradio/dablin

No protocol specified
Unable to init server: Impossible de se connecter : Connexion refusée

(dablin_gtk:4833): Gtk-WARNING **: cannot open display: :0

and when I'm root, it's works

Rearrange the source code, and other changes

So as to enable bringing in a "vendor fork" of the ka9q-fec library, and to add tests to the codebase, I propose creating a src directory and moving all the current source for dablin and dablin_gtk to there.

I propose abandoning the current Makefile system.

Given the Gtk+3 element here do we want a Meson build to exist in parallel with the CMake build. (Having the CMake build is currently critical to be able to use CLion (https://www.jetbrains.com/clion/) for development, but many Gtk+3 projects are abandoning Autotools and Make in favour of Meson, and Ninja).

Program Type information

Could Program Type information (News, Sport, Pop Music....) be added to Service Tooltip text ?

Make subchannel data available in CLI

Hi,
Thanks for the amazing work.

I use dablin cli for EDI decoding. However, I am wondering if that would be possible to make the same data that populates the GTK widgets also available in the CLI. For example the list of channels, programs, audio level and other statistic can be dumped to a json/yaml/toml file as it was done in etisnoop and get updated every once in a while.
Please let me know if such a feature is already implemented or there is a possibility to add it.
Thanks

No slideshows in Greece

Even with -L I don't get any slideshow from ERT Greece. There are lots of [X-PAD len] [X-PAD len] messages without -L ...

ERT_20180506.eti.zip

Xpadxpert, qt-dab and welle.io show them indeed.

proto-icon-144x144
deftero-icon-96x96
trito-icon-96x96
eraspor-icon-96x96
kosmos-icon-96x96
voiceofgr-icon-96x96

No Audio for HE-AACv2 in Ubuntu 20.04

I've reinstalled my laptop with a clean installation of Ubuntu 20.04.

But I have OFTEN (not always) no sound at stations using HE-AACv2. All other (LC, v1, mono) work.

$ dpkg -l | grep faad
ii  libfaad-dev:amd64                          2.9.1-1                                    amd64        freeware Advanced Audio Decoder - development files
ii  libfaad2:amd64                             2.9.1-1                                    amd64        freeware Advanced Audio Decoder - runtime files
EnsemblePlayer: playing sub-channel 6 (DAB+)
EnsemblePlayer: format: HE-AAC v2, 48 kHz Stereo @ 48 kBit/s
AACDecoder: using decoder 'FAAD2'
SDLOutput: using audio buffer of 192000 bytes
SDLOutput: audio opened; driver name: pulseaudio, freq: 48000, channels: 2, size: 18432, samples: 2304, silence: 0x00, output: 32bit float
(AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC) (AAC)

BTW: Same with Qt-DAB. All HE-AAC stations work, but when playing v2 there is the following error message (repeated each frame I guess):

Warning: Unexpected channel configuration change

Maybe this helps to identify the issue.

dablin in Debian and Fedora?

The support for DVB in Linux is very high, LinuxTV, libdvbv5, /usr/share/dvb, etc. Is there a possibility of improving the support for DAB/DAB+. dablin doesn't support local transmitter files, and other things to make the user experience good. I wonder if dablin could be updated for Gtk3 (yes I am volunteering) and a format for tuning files agreed (along the lines of DVBv5 perhaps) so that it is possible for DAB/DAB+ UI experience to be like that of DVB-T and DVB-T2 (I am rewriting Me TV). Getting things into the Debian and Fedora (also Arch?) repositories (librtlsdr is already there) would make things much easier. Having to download and compile things such as ka9q-fec is irritating (is this repository being supported, it doesn't appear to have been updated recently).

building next branch fails on cygwin64

Jordi@PC-Jordi ~/Descargas/dablin/build
$ cmake ..
-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++.exe
-- Check for working CXX compiler: /usr/bin/c++.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Build type not specified: defaulting to release.
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/cc
-- Looking for stdio.h
-- Looking for stdio.h - found
-- Looking for stdlib.h
-- Looking for stdlib.h - found
-- Looking for string.h
-- Looking for string.h - found
-- Looking for memset
-- Looking for memset - found
-- Looking for memmove
-- Looking for memmove - found
-- Looking for memory.h
-- Looking for memory.h - found
-- Looking for time.h
-- Looking for time.h - found
-- Found PkgConfig: /usr/bin/pkg-config.exe (found version "0.29.1")
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - found
-- Found Threads: TRUE
-- Checking for module 'sdl2'
--   Found sdl2, version 2.0.7
-- Checking for module 'libmpg123'
--   Found libmpg123, version 1.25.10
-- Checking for module 'gtkmm-3.0'
--   Found gtkmm-3.0, version 3.22.2
-- Found FAAD: /usr/local/lib/libfaad.dll.a
-- Found ICONV: /usr/lib/libiconv.dll.a
-- Performing Test NATIVE_ATOMICS_SUPPORT
-- Performing Test NATIVE_ATOMICS_SUPPORT - Success
--
-- ##########################################################
-- ## Building version: 1.10.0-13-ga73f845
-- ## Using install prefix: /usr/local
-- ##########################################################
--
-- Configuring done
-- Generating done
-- Build files have been written to: /home/Jordi/Descargas/dablin/build

Jordi@PC-Jordi ~/Descargas/dablin/build
$ make
Scanning dependencies of target fec
[  3%] Building C object fec/CMakeFiles/fec.dir/encode_rs_char.c.o
[  6%] Building C object fec/CMakeFiles/fec.dir/decode_rs_char.c.o
[  9%] Building C object fec/CMakeFiles/fec.dir/init_rs_char.c.o
[ 12%] Linking C static library libfec.a
[ 12%] Built target fec
Scanning dependencies of target rs_speedtest
[ 15%] Building C object fec/test/CMakeFiles/rs_speedtest.dir/rs_speedtest.c.o
[ 18%] Linking C executable rs_speedtest.exe
[ 18%] Built target rs_speedtest
Scanning dependencies of target rstest
[ 21%] Building C object fec/test/CMakeFiles/rstest.dir/rstest.c.o
[ 24%] Linking C executable rstest.exe
[ 24%] Built target rstest
Scanning dependencies of target dablin_gtk
[ 27%] Building CXX object src/CMakeFiles/dablin_gtk.dir/sdl_output.cpp.o
[ 30%] Building CXX object src/CMakeFiles/dablin_gtk.dir/dabplus_decoder.cpp.o
[ 33%] Building CXX object src/CMakeFiles/dablin_gtk.dir/eti_source.cpp.o
[ 36%] Building CXX object src/CMakeFiles/dablin_gtk.dir/eti_player.cpp.o
[ 39%] Building CXX object src/CMakeFiles/dablin_gtk.dir/dab_decoder.cpp.o
[ 42%] Building CXX object src/CMakeFiles/dablin_gtk.dir/fic_decoder.cpp.o
[ 45%] Building CXX object src/CMakeFiles/dablin_gtk.dir/pcm_output.cpp.o
[ 48%] Building CXX object src/CMakeFiles/dablin_gtk.dir/tools.cpp.o
[ 51%] Building CXX object src/CMakeFiles/dablin_gtk.dir/version.cpp.o
[ 54%] Building CXX object src/CMakeFiles/dablin_gtk.dir/mot_manager.cpp.o
[ 57%] Building CXX object src/CMakeFiles/dablin_gtk.dir/pad_decoder.cpp.o
[ 60%] Building CXX object src/CMakeFiles/dablin_gtk.dir/dablin_gtk.cpp.o
[ 63%] Building CXX object src/CMakeFiles/dablin_gtk.dir/dablin_gtk_sls.cpp.o
[ 66%] Linking CXX executable dablin_gtk.exe
/usr/lib/gcc/x86_64-pc-cygwin/7.4.0/../../../../x86_64-pc-cygwin/bin/ld: no se reconoce la opción `-z'
/usr/lib/gcc/x86_64-pc-cygwin/7.4.0/../../../../x86_64-pc-cygwin/bin/ld: use la opción --help para información de modo de empleo
collect2: error: ld devolvió el estado de salida 1
make[2]: *** [src/CMakeFiles/dablin_gtk.dir/build.make:411: src/dablin_gtk.exe] Error 1
make[1]: *** [CMakeFiles/Makefile2:271: src/CMakeFiles/dablin_gtk.dir/all] Error 2
make: *** [Makefile:139: all] Error 2

```__________________________________________________

It says "option -z isn't recognized"
Building the master Branch Works fine.

Wishlist - make audio stream available via stdout

dablin is the only program with which I was able to get DAB+ running. I'd like to stream one single radio-stream on my lan. As dablin decodes the data stream and directly sends it to sdl output, there doesn't seem to be a way to transport the stream on the network.

It'd be great, if there could be a cmd line switch to get the audio stream on stdout.

I'd like to use something like this:

$ ./dablin -d ../dabtools/src/dab2eti -c 7D -s 0xD332 -d - | vlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/}'

Sort console output by stream

Currently the console prints the found services one after the other:

SDLOutput: using SDL version '2.0.4'
ETISource: reading from '/home/andreas/rte.eti'
FICDecoder: found new audio service: SId 0x2245, subchannel 7, DAB
FICDecoder: found new audio service: SId 0x2247, subchannel 6, DAB
FICDecoder: found new audio service: SId 0x2248, subchannel 9, DAB
FICDecoder: found new audio service: SId 0x2249, subchannel 8, DAB
FICDecoder: found new audio service: SId 0x224A, subchannel 10, DAB
FICDecoder: found new audio service: SId 0x2261, subchannel 12, DAB+
FICDecoder: found new audio service: SId 0x2262, subchannel 13, DAB+
FICDecoder: found new programme service label: SId 0x2262, 'RTE 2FM +'
FICDecoder: found new audio service: SId 0x2201, subchannel 1, DAB
FICDecoder: found new audio service: SId 0x2202, subchannel 2, DAB
FICDecoder: found new audio service: SId 0x2203, subchannel 3, DAB
FICDecoder: found new audio service: SId 0x2204, subchannel 4, DAB
FICDecoder: found new programme service label: SId 0x2245, 'RTE 2XM'
FICDecoder: found new programme service label: SId 0x2201, 'RTE Radio 1'
FICDecoder: found new programme service label: SId 0x2248, 'RTE GOLD'
FICDecoder: found new programme service label: SId 0x224A, 'RTE Radio 1Extra'
FICDecoder: found new ensemble label: EId 0x2E01, 'DAB Ireland Mux1'
FICDecoder: found new programme service label: SId 0x2261, 'RTE Radio 1 +'
FICDecoder: found new programme service label: SId 0x2202, 'RTE 2FM'
FICDecoder: found new programme service label: SId 0x2249, 'RTE PULSE'
FICDecoder: found new programme service label: SId 0x2247, 'RTE Jr Radio'
FICDecoder: found new programme service label: SId 0x2204, 'RTE RnaG'
FICDecoder: found new programme service label: SId 0x2203, 'RTE LYRIC'

Why not sort this output (first line EID, then SID, then service label) or shorten the text, so that one could see immediately if there is anything new.

Dynamic label to a file

Hello, would it be possible to output to a file the current service or all ensembles info like what is currently shown in GUI version? I would need to get/save at least the dynamic label while running in CLI mode.
A plus would be to save the current image in a file. Thanks

Crash with DAB+

I wanted to test DRMplus and have installed faad (and maybe others) with DRM support. A big mistake ........

But now dablin_gtk crashes:

AACDecoder: using decoder 'FAAD2'
terminate called after throwing an instance of 'std::runtime_error'
  what():  AACDecoderFAAD2: error while NeAACDecSetConfiguration
Abgebrochen (Speicherabzug geschrieben)

I even reinstalled all packages with $ dpkg --get-selections | grep "\binstall" | awk '{print $1}' > /tmp/dpkg.log and then $ sudo xargs -n1 apt-get --reinstall install -y < /tmp/dpkg.log .

But this is strange:

$ sudo apt-get install -f libfaad2*
Paketlisten werden gelesen... Fertig
Abhängigkeitsbaum wird aufgebaut.       
Statusinformationen werden eingelesen.... Fertig
Hinweis: »libfaad2-dev« wird für das Suchmuster »libfaad2*« gewählt.
Hinweis: »libfaad2-0« wird für das Suchmuster »libfaad2*« gewählt.
Hinweis: »libfaad2« wird für das Suchmuster »libfaad2*« gewählt.
libfaad2 ist schon die neueste Version (2.8.8-1).
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
andreas@E535:~$ dpkg -l faa*
Gewünscht=Unbekannt/Installieren/R=Entfernen/P=Vollständig Löschen/Halten
| Status=Nicht/Installiert/Config/U=Entpackt/halb konFiguriert/
         Halb installiert/Trigger erWartet/Trigger anhängig
|/ Fehler?=(kein)/R=Neuinstallation notwendig (Status, Fehler: GROSS=schlecht)
||/ Name            Version      Architektur  Beschreibung
+++-===============-============-============-===================================
ii  faad            2.8.8-1      amd64        freeware Advanced Audio Decoder pla
un  faad2           <keine>      <keine>      (keine Beschreibung vorhanden)

In the meanwhile I managed to get sound back for welle-io and qt-dab, but not for dablin ...

Request for release tag

We're packaging dablin on CentOS 7. It would be helpful if you could create a release tag.

Many thanks!

Seg fault with 32 kHz sampling rates and ODR-fdk-aac

Seems the combination ODR-fdk-aac and dablin_gtk does not like 32 kHz sampling rates:

ETIPlayer: format: HE-AAC, 32 kHz Mono @ 24 kBit/s
AACDecoder: using decoder 'FDK-AAC'
SDLOutput: audio closed
SDLOutput: using audio buffer of 32000 bytes
SDLOutput: audio opened; driver name: pulseaudio, freq: 32000, channels: 1, size: 2048, samples: 1024, silence: 0x00, output: 16bit integer
Speicherzugriffsfehler (Speicherabzug geschrieben)

and

*** Error in `dablin_gtk': free(): invalid next size (normal): 0x00007fb82402df50 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fb856b3d7e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x7fe0a)[0x7fb856b45e0a]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7fb856b4998c]
dablin_gtk(_ZN16SuperframeFilterD0Ev+0x6d)[0x41541d]
dablin_gtk(_ZN9ETIPlayer12ProcessFrameEPKh+0x5f)[0x4190bf]
dablin_gtk(_ZN9ETISource4MainEv+0x642)[0x4181e2]
/usr/lib/x86_64-linux-gnu/libstdc++.so.6(+0xb8c80)[0x7fb857166c80]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba)[0x7fb858ccd6ba]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fb856bcc82d]

The FAAD2 decoder works indeed.

Update .travis.yml

The Travis-CI folk tell me Xenial is not supported yet, we might as well alter the .travis.yml file to the following. I am not sure how to create a pull request for this as I have an outstanding pull request on my GitHub clone.

language: c++
sudo: required
dist: trusty

compiler:
  - gcc
  - clang

before_script:
  - sudo apt-get update -qq
  - sudo apt-get install -y libfaad-dev libfdk-aac-dev libmpg123-dev libsdl2-dev libgtkmm-3.0-dev

script:
  - |
    pushd /tmp
    git clone https://github.com/Opendigitalradio/ka9q-fec.git
    cd ka9q-fec
    mkdir build
    cd build
    cmake ..
    make
    sudo make install
    popd
  - |
    mkdir build_faad
    pushd build_faad
    cmake ..
    make
    popd
    mkdir build_fdkaac
    pushd build_fdkaac
    cmake -DUSE_FDK-AAC=1 ..
    make
    popd

Audio buffer overflows after stream interruptions

If a played ETI stream is interrupted (no data received) and then recovers afterwards, messages like the following one are shown:

...
SDLOutput: audio buffer overflow: 15360 > 0
SDLOutput: audio buffer overflow: 15360 > 0
SDLOutput: audio buffer overflow: 15360 > 0
SDLOutput: audio buffer overflow: 15360 > 3072
SDLOutput: audio buffer overflow: 15360 > 0
SDLOutput: audio buffer overflow: 15360 > 9216
...

The reason is that the internal stream synchronisation algorithm waits until the point in time where the next ETI frame is expected. In case of interruptions, this means that the algorithm "catches up" i.e. when after an interruption the respective ETI frames arrive, they are all played and overflow the audio buffer.

In the past this issue was fixed (#38) for the stream start when e.g. wget took some moments to receive the ETI stream due to e.g. transponder lock. However later stream interruptions hadn't been considered.

If the previously missing ETI frames arrive later, it may or may not be desired to play them in realtime (they all have to be played anyhow, to satisfy e.g. the DL/SLS decoding). Currently they are not played in realtime and hence audio buffer overflows occur temporarily.

However continue playing the frames in realtime would mean that the stream itself is no longer played in realtime but delayed by the duration of all previous interruptions i.e. the news would start some seconds/minutes later compared to live reception because of that.

Thus a new option has to be added that disables the current catch-up behaviour after streams interruptions and instead also plays these late ETI frames in realtime (introducing the described overall stream delay).

This also affects #36 (comment).

MOT charset 5 is not supported - Slide disappears right after displaying

Servus Stefan,

the Slovakian DAB seems to use another charset. Maybe this file helps you to integrate it into future versions?

Another strange behavior: If you play it with dablin_gtk pack12c1.eti -L -l "Radio Slovensko" then the (first) slide appears and only a few moments it disappears again.

pack12c1.eti.zip

Hint: It's obviously not error-free (although eti-cmdline was 100% all the time), due to the huge distance of around 200 km to the transmitter ...

Is FDK-AAC preferred over FAAD2?

The README explains about FAAD2, FDK-AAC, and an amended version of the latter, but no ordering/preference is offered. Should a preference be made explicit?

Show DL+ ?

Hello,
Is it possible to display DL+ information?
Mickael

libfaad not in Fedora Rawhide

It appears that libfaad is not packaged by Fedora. Instructions for building DABlin on Fedora will need to include instructions on building this.

ignored ETI frames

Could you tell me, why this ETI (generated from 7 East) does not play in dablin_gtk (-b next)?

ETIPlayer: ignored ETI frame due to wrong (MST) CRC

60015.eti.zip
It works in ODR-DabMod and in ni2http:

$ ni2http --list < 60015.eti
Obb/Schw         (0x1162)
 0 : Bayern 2 Nord    (0xdf12) Pri subch= 7 start= 96 CUs= 96 PL=eep-2a bitrate=96 DAB+
 1 : Bayern 1 Franken (0xd511) Pri subch= 4 start=  0 CUs= 96 PL=eep-2a bitrate=96 DAB+
 2 : egoFM            (0x1014) Pri subch=28 start=400 CUs= 48 PL=eep-3a bitrate=64 DAB+
 3 : BR Verkehr       (0xdf13) Pri subch=15 start=192 CUs= 16 PL=eep-2a bitrate=16 DAB+
 4 : KULTRADIO        (0x1013) Pri subch=27 start=346 CUs= 54 PL=eep-3a bitrate=72 DAB+
 5 : Absolut HOT      (0xdc1a) Pri subch=26 start=292 CUs= 54 PL=eep-3a bitrate=72 DAB+
 6 : ROCK ANTENNE     (0xd319) Pri subch=22 start=232 CUs= 60 PL=eep-3a bitrate=80 DAB+

Compile errors when using clang

Hi,

I have been able to compile and run dablin on macOS but I had to include a couple of standard header files. Would you be able to include the headers below to tools.h on the master branch?

#include

Many thanks,
Niro.

Announcement data too long

On DABItalia mux, the announcement that appears is so long that makes app expand to almost all screen.....
I've tried modifying code , frame_label_asu.set_hexpand(false); but it does same....

imatge

It expands to...........

imatge

I don't know how it could be fixed.... to be split into several lines...

Windows version

Hi is it posible for someone to compile this for windows?

Thanks for Anwsering and Best Regards

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.