{"id":13418455,"url":"https://github.com/Opendigitalradio/dablin","last_synced_at":"2025-03-15T03:31:13.672Z","repository":{"id":32373271,"uuid":"35949512","full_name":"Opendigitalradio/dablin","owner":"Opendigitalradio","description":"DAB/DAB+ receiver for Linux (including ETI-NI and EDI AF playback)","archived":false,"fork":false,"pushed_at":"2024-04-07T18:49:42.000Z","size":716,"stargazers_count":116,"open_issues_count":4,"forks_count":24,"subscribers_count":30,"default_branch":"master","last_synced_at":"2024-07-31T22:43:06.146Z","etag":null,"topics":["dab","dab-broadcasting","dablin","digitalradio","dl","dynamiclabel","edi","eti","mot","receiver","slideshow"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"twbs/bootstrap","license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Opendigitalradio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-05-20T13:28:10.000Z","updated_at":"2024-07-21T09:01:09.000Z","dependencies_parsed_at":"2023-01-14T21:03:39.244Z","dependency_job_id":"59564c43-0e0a-477b-abb4-cb4ec04b4c18","html_url":"https://github.com/Opendigitalradio/dablin","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Opendigitalradio%2Fdablin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Opendigitalradio%2Fdablin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Opendigitalradio%2Fdablin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Opendigitalradio%2Fdablin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Opendigitalradio","download_url":"https://codeload.github.com/Opendigitalradio/dablin/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243681024,"owners_count":20330152,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dab","dab-broadcasting","dablin","digitalradio","dl","dynamiclabel","edi","eti","mot","receiver","slideshow"],"created_at":"2024-07-30T22:01:02.532Z","updated_at":"2025-03-15T03:31:10.891Z","avatar_url":"https://github.com/Opendigitalradio.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# DABlin – capital DAB experience\n\nDABlin plays a DAB/DAB+ audio service – from a live transmission or from\na stored ensemble recording (ETI-NI, or EDI AF with ETI). Both DAB (MP2)\nand DAB+ (AAC-LC, HE-AAC, HE-AAC v2) services are supported.\n\nThe GTK GUI version in addition supports the data applications Dynamic\nLabel and MOT Slideshow (if used by the selected service).\n\n\n## Screenshots\n\n### GTK GUI version\n![Screenshot of the GTK GUI version](https://basicmaster.de/dab/DABlin.png)\n\n### Console version\n![Screenshot of the console version](https://basicmaster.de/dab/DABlin_console.png)\n\n\n## Requirements\n\n### General\n\nBesides Git a C/C++ compiler (with C++11 support) and CMake are required to\nbuild DABlin.\n\nOn Debian or Ubuntu, the respective packages (with GCC as C/C++ compiler) can be\ninstalled using aptitude or apt-get, for example:\n\n```sh\nsudo apt-get install git gcc g++ cmake\n```\n\n\n### Libraries\n\nThe following libraries are required:\n\n* mpg123 (1.14.0 or higher)\n* FAAD2\n* SDL2\n\nThe GTK GUI version in addition requires:\n\n* gtkmm\n\nUsually the `glibc` implementation of `iconv` is available. If this is\nnot the case, in addition `libiconv` is required.\n\nIn rare cases, the target architecture does not support *atomics*. In\nsuch a case, DABlin is linked against GCC's `libatomic`. This lib\nusually is an (indirect) dependency of GCC itself.\n\nOn Debian or Ubuntu, mpg123, FAAD2, SDL2 and gtkmm are packaged and installed\nwith:\n\n```sh\nsudo apt-get install libmpg123-dev libfaad-dev libsdl2-dev libgtkmm-3.0-dev\n```\n\nOn Fedora, mpg123, SDL2, and gtkmm are all packaged and can be installed thus:\n\n```sh\nsudo dnf install mpg123-devel SDL2-devel gtkmm30-devel\n```\n\nFAAD2 is not packaged in the main Fedora repository, but it is available in\n[RPM Fusion repository](https://rpmfusion.org/). Once you have added RPM Fusion\nto the repositories, FAAD2 may be installed by:\n\n```sh\nsudo dnf install faad2-devel\n```\n\nIf you do not wish to, or cannot, add the RPM Fusion repositories, you will have\nto download FAAD2, perhaps from [here](http://www.audiocoding.com/faad2.html), and build\nand install manually.\n\n\n### Alternative DAB+ decoder\n\nInstead of using FAAD2, DAB+ channels can be decoded with [FDK-AAC](https://github.com/mstorsjo/fdk-aac).\nYou can also use [OpenDigitalradio's fork](https://github.com/Opendigitalradio/fdk-aac), if already installed.\n\nOn Debian and Ubuntu, you can install FDK-AAC with:\n\n```sh\nsudo apt-get install libfdk-aac-dev\n```\n\nOn Fedora, RPM Fusion is again needed and, if used, you can:\n\n```sh\nsudo dnf install fdk-aac-devel\n```\n\nWhen the alternative AAC decoder is used, the FAAD2 library mentioned\nabove is no longer required.\n\nAfter installing the library, to use FDK-AAC instead of FAAD2, you have to\nhave `-DUSE_FDK-AAC=1` as part of the `cmake` command.\n\n\n### Audio output\n\nThe SDL2 library is used for audio output, but you can instead choose to\noutput the decoded audio in plain PCM for further processing (e.g. for\nforwarding to a streaming server).\n\nIn case you only want PCM output, you can disable SDL output and\ntherefore omit the SDL2 library prerequisite. You then also have to\nhave `-DDISABLE_SDL=1` as part of the `cmake` command.\n\nTo enable the raw PCM output to `stdout`, the `-p` parameter has to be used.\n\nThe PCM audio can also be prepended with a RIFF WAVE header using the `-w`\nparameter instead. This uses the maximum value for length fields in order to\nallow streaming. On any later audio format change (this also includes a service\nchange in the GUI version), a new RIFF WAVE header will be issued. As RIFF WAVE\nrequires samples to be in Little Endian (LE) order, this feature only makes\nsense on a LE platform.\n\nIt is also possible to disable the output of any decoded audio and\ninstead output the current service as an untouched MP2/AAC stream to\n`stdout`. This can be achieved by using the `-u` parameter.\n\n\n### Surround sound\n\nServices with surround sound are only decoded from their Mono/Stereo\ncore, as unfortunately there is no FOSS AAC decoder which supports the\nrequired Spatial Audio Coding (SAC) extension of MPEG Surround at the\nmoment.\n\n\n## Precompiled packages and source-based Linux distributions\n\nOfficial precompiled packages are available for the following Linux\ndistributions (kindly maintained by Gürkan Myczko):\n\n* [Debian](https://packages.debian.org/dablin)\n* [Ubuntu](https://launchpad.net/ubuntu/+source/dablin)\n\nStarting with Debian 10 and Ubuntu 18.04, you can simply install DABlin\nfrom the official package sources (note that the GitHub version may be\nnewer):\n\n```sh\nsudo apt-get install dablin\n```\n\nSome users kindly provide precompiled packages on their own:\n\n* [openSUSE](https://build.opensuse.org/package/show/home:mnhauke:ODR-mmbTools/dablin) (by Martin Hauke)\n* [CentOS](https://build.opensuse.org/package/show/home:radiorabe:dab/dablin) (by [Radio Bern RaBe 95.6](http://rabe.ch)); [more info](https://github.com/radiorabe/centos-rpm-dablin)\n\nFor other distributions you may also want to check the [Repology page](https://repology.org/metapackage/dablin).\n\nSource-based Linux distributions:\n\n* [Gentoo](https://github.com/paraenggu/delicious-absurdities-overlay/tree/master/media-sound/dablin) (by Christian Affolter, as part of his [delicious-absurdities-overlay](https://github.com/paraenggu/delicious-absurdities-overlay))\n\n\n## Ubuntu 20.04, FAAD2 and HE-AAC v2 services\n\nUbuntu 20.04 currently ships a version of the FAAD2 library which can't\ndecode HE-AAC v2 services (= SBR and PS) due to a [bug](https://github.com/knik0/faad2/pull/51). This affects\nFAAD2 version 2.9.0 and 2.9.1.\n\nTo address this, a more recent version of the library can be compiled.\n\nFirst make sure, you have automake and libtool installed on your system. \n\n```\nsudo apt-get install automake libtool\n```\nThen continue with\n\n```sh\ngit clone -b 2_9_2 https://github.com/knik0/faad2.git\ncd faad2\n./bootstrap\n./configure\nmake\nsudo make install\nsudo ldconfig\n```\n\nNow DABlin (and all other applications) uses the newer lib version.\n\nIf the newer lib version shall only be used together with DABlin, the\ntwo last commands must not be executed. Instead DABlin has always to be\ninvoked with the following prefix string (assuming the above commands\nwere executed in `/home/my_user`):\n\n```sh\nLD_LIBRARY_PATH=/home/my_user/faad2/libfaad/.libs/\n```\n\n\n## Compilation\n\nIf the gtkmm library is available both the console and GTK GUI \nexecutables will be built, otherwise only the console executable will be\nbuilt.\n\nTo fetch the DABlin source code, execute the following commands:\n\n```sh\ngit clone https://github.com/Opendigitalradio/dablin.git\ncd dablin\n```\n\nNote that by default the `master` branch is cloned which contains the\ncurrent stable version. The development takes place in the `next` branch\nwhich can instead be cloned by appending `-b next` to the end of the\nabove `git clone` command line.\n\nYou can use, for example, the following command sequence in order to\ncompile and install DABlin (for Ubuntu 20.04 please also see above):\n\n```sh\nmkdir build\ncd build\ncmake ..\nmake\nsudo make install\n```\n\n\n### Windows (Cygwin)\n\nDABlin can also be compiled on Windows using [Cygwin](https://cygwin.com/). The following\nCygwin packages are required:\n\nGeneral:\n- git\n- make\n- cmake\n- gcc-core\n- gcc-g++\n\nDABlin specific (using FDK-AAC for DAB+ services):\n- libmpg123-devel\n- libfdk-aac-devel\n- libSDL2-devel\n- libiconv-devel\n\nIn addition for the GTK version:\n- libgtkmm3.0-devel\n\nNote that the GTK version requires an X server to run e.g. Cygwin/X!\n\nAlso note that Cygwin neither needs nor allows to `sudo` commands, so\njust execute them without that prefix.\n\nUnfortunately the Cygwin package of FDK-AAC doesn't seem to have been\ncompiled with SBR support, so using [FAAD2](http://www.audiocoding.com/faad2.html) for DAB+ services is\nrecommended. However, FAAD2 has to be compiled and installed by hand, as\nthere is no Cygwin package. This requires the following additional\npackages to be installed:\n- autoconf\n- automake\n- libtool\n\n![Screenshot of the console version on Windows (Cygwin)](https://basicmaster.de/dab/DABlin_console_cygwin.png)\n\nWhen Cygwin is installed, all the aforementioned packages can be\npreselected for installation by calling Cygwin's `setup-\u003carch\u003e.exe`\nwith the following parameter:\n\n```sh\n-P git,make,cmake,gcc-core,gcc-g++,libmpg123-devel,libfdk-aac-devel,libSDL2-devel,libiconv-devel,libgtkmm3.0-devel,autoconf,automake,libtool\n```\n\n\n### macOS\n\nOn macOS, the development environment can be installed by running\n`xcode-select`. This installs Git and a C/C++ compiler (clang). All\nother packages and development libraries can be installed using a\npackage manager such as [Homebrew](https://brew.sh), for example:\n\n```sh\nxcode-select --install\nbrew install pkg-config cmake gtkmm gtkmm3 adwaita-icon-theme sdl2 fftw faad2 mpg123\n```\n\n\n## Usage\n\nThe console executable is called `dablin`, the GTK GUI executable\n`dablin_gtk`. Use `-h` to get an overview of all available options.\n\n(Currently no desktop files are installed so it is not easy to start DABlin\ndirectly from GNOME Shell. For now, at least, start DABlin from a console.)\n\nDABlin processes DAB ETI-NI or EDI recordings/streams (which may be\nframe-aligned or not i.e. any data before/after an ETI/EDI frame is\ndiscarded). If no filename is specified, `stdin` is used for input.\n\nYou just should specify the service ID (SID) of the desired service\nusing `-s` - otherwise initially no service is played. The GUI version\nof course does not necessarily need this.\n\nYou can replay an existing recording as follows:\n\n```sh\ndablin -s 0xd911 mux.eti\n```\n\nIn this case a progress indicator and the current position is displayed.\n\nAs an alternative a service label can be specified with the `-l` option.\nNote that if the label contains spaces, it has to be enclosed by quotes\n(or the spaces be properly escaped):\n\n```sh\ndablin -l \"SWR1 RP\" mux.eti\n```\n\nThe parameter `-1` (the number one, not the small letter L) simply plays\nthe first service found.\n\nWith the console version, instead of the desired service it is also\npossible to directly request a specific sub-channel by using `-r` (for\nDAB) or `-R` (for DAB+).\n\nNote that the console output always shows the programme type just using\nRDS PTys despite the actually used international table ID (which should\nwork in nearly all cases). The GTK version in contrast always shows the\ncorrect programme type, based on the transmitted international table ID.\n\nDynamic FIC messages can be suppressed using `-F` (currently affects\ndynamic PTy only).\n\n\n### Date/Time\n\nThe console version shows the related parameters as they are received:\nWhile the Local Time Offset (LTO) is shown upon any change, the UTC\ndate/time is shown once (or once again on precision change).\n\nThe GTK version in contrast starts to display the local date/time as\nsoon as both mentioned values have been received. The used clock is then\nresynchronised upon further received UTC date/time.\n\nIf an ensemble transmits both short (minute precision) and long (millisecond\nprecision) form, only the long form will be used, as soon as received for the\nfirst time.\n\n\n### Announcement support/switching\n\nIn terms of announcement support/switching the console version shows the\nseparate details. The GUI combines the received data and in general\nshows which announcements the current service supports.\n\nDuring a matching announcement, the corresponding type is highlighted in\nyellow. An announcement that would lead to a (temporary) switch to a\ndifferent subchannel leads to cyan highlighting instead e.g. if traffic\nnews of a different channel shall affect also listeners of a different\nservice (which does not have its own announcements).\n\nThe GTK version indicates an active alarm announcement on ensemble level\nby the suffix \"Alarm\" after the ensemble label, highlighted in red.\n\n\n### Hotkeys (GTK GUI version)\n\nTo switch the channel instead of the service, press `Ctrl` in addition.\n\nHotkey           | Meaning\n-----------------|--------------------------------------------------------------\n`m`              | Enable/disable audio mute\n`r`              | Start/stop recording\n`Ctrl` + `c`     | Copy DL text, DL+ object text or Slideshow slide to clipboard\n`-`              | Switch to previous service\n`+`              | Switch to next service\n`1`..`0`         | Switch to 1st..10th service\n`Alt` + `1`..`0` | Switch to 11th..20th service\n`Ctrl` + `Space` | Stop/resume decoding the current channel/service\n\n\n### DAB live reception\n\nIf you want to play a live station, you can use `dab2eti` from [dabtools](https://github.com/Opendigitalradio/dabtools)\n(ODR maintained fork) and transfer the ETI live stream via pipe, e.g.:\n\n```sh\ndab2eti 216928000 | dablin_gtk\n```\n\nIt is possible to let DABlin invoke `dab2eti` or any other DAB live\nsource that outputs ETI-NI. The respective binary is then called with\nthe necessary parameters, including the frequency and an optional gain\nvalue.\n\nYou therefore just have to specify the path to the `dab2eti` binary and\nthe desired channel.\n\n```sh\ndablin -d ~/bin/dab2eti -c 11D -s 0xd911\n```\n\nUsing `dab2eti` the E4000 tuner is recommended as auto gain is supported\nwith it. If you want/have to use a gain value you can specify it using\n`-g`. Instead of auto gain, the default gain can be set using `-G` (only\naffects `eti-cmdline` at the moment).\n\nInstead of `dab2eti` the tool `eti-cmdline` by Jan van Katwijk can be\nused, as it has more sensitive reception (however the CPU load is higher\ncompared to `dab2eti`) and does not require a E4000 tuner for auto gain.\nIt is part of his [eti-stuff](https://github.com/JvanKatwijk/eti-stuff).\n\nIn addition to specifying the path to the respective binary you also\nhave to change the DAB live source type accordingly by using `-D`.\n\n```sh\ndablin -D eti-cmdline -d ~/bin/eti-cmdline-rtlsdr -c 11D -s 0xd911\n```\n\nWhen enclosed in quotes, you can also pass command line parameters to the\nbinary, e.g. to set some frequency correction (here: +40 ppm):\n\n```sh\ndablin -D eti-cmdline -d \"~/bin/eti-cmdline-rtlsdr -p 40\" -c 11D -s 0xd911\n```\n\nIn case of the GTK GUI version the desired channel may not be specified. To\navoid the huge channel list containing all possible DAB channels, one\ncan also state the desired channels (separated by comma) which shall be\ndisplayed within the channel list. Hereby the specified (general) gain\nvalue can also be overwritten for a channel by adding the desired value\nafter a colon, e.g. `5C:-54`.\n\n```sh\ndablin_gtk -d ~/bin/dab2eti -c 11D -C 5C,7B,11A,11C,11D -s 0xd911\n```\n\nYou also can use an Airspy or Airspy Mini, but you have to specify the\n`-G` parameter.\n\n```sh\ndablin_gtk -D eti-cmdline -d ~/bin/eti-cmdline-airspy -c 11D -C 11D -G\n```\n\nFor a HackRF use it together with the eti-cmdline parameter `-E` (which \nswitches its amplifier on) and with the dablin_gtk parameter `-G`.\n\n```sh\ndablin_gtk -D eti-cmdline -d \"~/bin/eti-cmdline-hackrf -E\" -c 11D -C 11D -G\n```\n\nFor a raw file the syntax is just:\n\n```sh\n~/bin/eti-cmdline-rawfiles -F foo.raw | dablin_gtk\n```\n\nIt may happen that an ETI live stream is interrupted (e.g. transponder\nlock lost). Later when the stream recovers, DABlin \"catches up\" on the\nstream and plays all (available) ETI frames until again in sync. This\ncan lead to several audio buffer overflow messages and respective\naudible artifacts.\n\nThe `-I` parameter disables the described catch-up behaviour and instead\nresyncs to the stream after an interruption i.e. continues to play the\nlater received ETI frames in realtime. However, this means that the\nplayback is delayed by the amount of all previous interruptions i.e. the\nnews will start some seconds/minutes later compared to live reception\nbecause of that.\n\nThe GTK GUI version also allows a user to stop decoding the current\nchannel/service by using the stop button next to the channel combobox.\nIf desired, decoding can then be resumed using the same button again.\n\nThe `stdin` input can also be used for live reception or playback of an\nEDI AF stream/recording (containing ETI) e.g. with Netcat, Wget or cURL.\nHereby the AF layer may also be enclosed with a File IO layer (usually\nthe case for stored EDI transmissions).\n\nExamples:\n\n```sh\nnc 10.0.0.128 9201 | dablin_gtk -f edi -I\n```\n\n```sh\nwget -q -O - https://edistream.irt.de/services/3 | dablin_gtk -f edi -I -1\n```\n\n```sh\ncurl -s https://edistream.irt.de/services/3 | dablin_gtk -f edi -I -1\n```\n\nPlaying EDI content the `-I` can be required to prevent ongoing hiccups\nduring playback. In the last two cases, a single service EDI stream for\ntesting purposes is used, so the `-1` parameter is used to select the\nfirst found service. \n\n\n### Recording a service\n\nWith the GTK GUI version the current service can be recorded into a\nfile. To start/stop a recording, the red record button has to be\nclicked, or the corresponding keyboard shortcut to be pressed. During a\nrecording neither can channel/service be changed, nor can DABlin be\nclosed.\n\nBy default all recordings are stored to `/tmp`. This can be changed by\nusing the `-r` parameter. The filename of a recording contains the\ntimestamp of the start of the recording and the service name, e.g.\n`2018-09-02 - 17-53-54 - SWR3.aac`.\n\nAll recordings are lossless: A DAB service is directly stored in MP2\nformat. A DAB+ service is packaged into the LATM/LOAS container format.\nThis format is necessary in order to signal the special 960 samples per\nframe transformation to the AAC decoder for playback.\n\nAs both formats are streamable, a recording can already be played while\nthe actual recording is still in progress.\n\nThe AAC recordings can be player e.g. by VLC player. FFmpeg will play\nthem as well, but currently does not support the SBR extension together\nwith the 960 samples per frame transformation and will thus only play\nthe AAC core then.\n\nIt is possible to enable a recording prebuffer which continuously caches\na certain period of time. This allows to record e.g. an already running\nsong or bloopers. When an actual recording is started, the complete\nprebuffer content is initially written to the recording file. The\nprebuffer size in seconds is specified using `-P` e.g. `-P 600` for ten\nminutes.\n\n\n### Secondary component audio services\n\nSome ensembles may contain audio services that consist of additional\n\"sub services\" called secondary components, in addition to the primary\ncomponent. That secondary components can initially be selected by using\n`-x` in addition to `-s`.\n\nIn the GTK version in the service list such components are shown\nprefixed with `» ` (e.g. `» BBC R5LiveSportX`). Meanwhile, the related\nprimary component is suffixed with ` »` (e.g. `BBC Radio 5 Live »`).\n\n\n## Status output\n\nWhile playback a number of status messages may appear. Some are quite common\n(enclosed with round brackets) e.g. due to bad reception, while others are\nrather unlikely to occur (enclosed with square brackets).\n\n### Common\n\nDuring (re-)synchronisation status messages are shown. Furthermore, dropped\nSuperframes or AUs are mentioned.\n\nIf the Reed Solomon FEC was used to correct bytes of a Superframe, this\nis mentioned by messages of the format `(3+)` in cyan color. This\nshorter format is used as those messages occur several times with\nborderline reception. The digit refers to the number of corrected bytes\nwithin the Superframe while a plus (if present) indicates that at least\none byte was incorrectable.\n\nWhen a FIB is discarded (due to failed CRC check), this is indicated by a\n`(FIB)` message in yellow color.\n\nMP2 frames with invalid CRC (MP2's CRC only - not DAB's ScF-CRC) are\ndiscarded, which is indicated by a `(CRC)` message in red color.\n\nAudio Units (AUs) with invalid CRC are mentioned with short format\nmessages like `(AU #2)` in red color, indicating that the CRC check on\nAU No. 2 failed and hence the AU was dismissed.\n\nWhen the decoding of an AU nevertheless fails, this is indicated by an\n`(AAC)` message in magenta color. However, in that case the AAC decoder\nmay output audio samples anyway.\n\n### Uncommon\n\nIf the announced X-PAD length of a DAB+ service does not match the available\nX-PAD length i.e. if it falls below, a red `[X-PAD len]` message is shown and\nthe X-PAD is discarded. However not all X-PADs may be affected and hence it may\nhappen that the Dynamic Label can be processed but the MOT Slideshow cannot.\n\nTo anyhow process affected X-PADs, a loose mode can be enabled by using\nthe `-L` parameter.\n\n\n## Standards\n\nDABlin implements (at least partly) the following DAB standards:\n\n### General\n* ETSI EN 300 401 (DAB system)\n* ETSI TS 101 756 (Registered tables)\n* ETSI TS 103 466 (DAB audio)\n* ETSI TS 102 563 (DAB+ audio)\n* ETSI ETS 300 799 (ETI)\n* ETSI TS 102 693 (EDI) together with ETSI TS 102 821 (DCP)\n\n### Data applications\n* ETSI TS 102 980 (Dynamic Label Plus)\n* ETSI EN 301 234 (MOT)\n* ETSI TS 101 499 (MOT Slideshow)\n\n\n## TODO\n\nAt the moment, DABlin is kind of a rudimentary tool for the playback of\nDAB/DAB+ services. It is planned to add support for further Program\nAided Data (PAD) features.\n\n### Dynamic Label Plus (DL+)\n\nWhen in the GTK GUI version DL+ is enabled and DL+ objects are received,\nthe DL+ window is shown. Some stations only transmit DUMMY objects - in\nthis case the DL+ window will be shown but stays empty.\n\nif the running state indicates that the current item is running, all\nobjects with an ITEM content type have a content type with light green\nbackground color.\n\nDepending on the object category, the object text is highlighted in bold\ntext or a different text color. Deleted objects have a text with grey\nbackground color.\n\n\n### Slideshow\n\nThe GTK GUI version supports the MOT Slideshow. If Slideshow is enabled\nand the current service signals to transmit a Slideshow, the Slideshow\nwindow is displayed. It shows a slide after it has been received\ncompletely and without errors.\n\nWhile the next slide is being received, a progress bar at the bottom of\nthe Slideshow window shows the fraction that has successfully been\nreceived so far. It is always updated after a new segment has arrived\nfree from error. The first segments of the initial slide usually are\nreceived before the corresponding header comes by. In this case a\npulsing bar is shown until the header is available.\n\nCurrently the following limitations apply:\n\n* slideshows in a separate sub-channel are not supported (just X-PAD);\n* the TriggerTime field does not support values other than Now\n\n\n## License\n\nThis software is licensed under the GNU General Public License Version 3\n(please see the file COPYING for further details).\n![GPLv3 Image](https://www.gnu.org/graphics/gplv3-88x31.png)\n\n*Please note that the included FEC lib by KA9Q has a separate license!*\n\nDABlin - capital DAB experience\nCopyright (C) 2015-2024 Stefan Pöschel\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 3 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see \u003chttp://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpendigitalradio%2Fdablin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FOpendigitalradio%2Fdablin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FOpendigitalradio%2Fdablin/lists"}