Skip to content

eblanca/deadbeef-0.7.2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TABLE OF CONTENTS

1. compiling, dependencies, etc
2. licensing

==========================================================

1. compiling, dependencies, etc

* first you need to install dependencies. full list is provided at the end of this section for your convenience

* you will need intltool to be installed. if you don't need translations -- run ./configure --disable-nls (in this case you won't need to install intltool, as long as the configure script is already generated)

* if you want to build from git - install autoconf, automake, libtool, intltool, autopoint, then run ./autogen.sh to bootstrap

* run "./configure --help", and read it.

* now you're ready to configure the build process -- run "./configure --prefix=/usr", and wait until it finishes. you may want to change prefix to another value. consult INSTALL file for more info.

* make sure all plugins which you want have "Yes" status in the list that's printed by configure. if not -- install missing dependencies, and rerun configure. that is especially important for GTKUI, and ALSA or OSS plugins. make sure you have both. otherwise you won't get GUI and/or sound output.

* after satisfying all dependencies, run "make -j5" (change -j number to suit your number of CPUs/cores, e.g. 5 is quite good for single CPU dual-core machines). it is a good idea to do it as normal user (this step doesn't require root privileges).

* after build finishes, run "make install" as root

full list of dependencies is below.
most of them are optional, which means deadbeef will build and run without them, but to make it useful - you'd probably need at least GTK UI plugin and some audio codecs built.

    libsamplerate: for dsp_libsrc plugin (resampler)
    gtk+-2.0 >= 2.12 (+ gthread, + glib): GTK+ 2.0 user interface
    gtk+-3.0 >= 3.00 (+ gthread, + glib): GTK+ 3.0 user interface
    jansson: mandatory for both gtk2 and gtk3 UIs, used for column configuration loading
    alsa-lib: ALSA support
    libvorbis and libogg: for ogg vorbis plugin, and for ogg container metadata in other formats, such as OggFlac
    libcurl >= 7.10: for last.fm, vfs_curl (shoutcast/icecast), artwork plugins
    imlib2: for artwork plugin; see libjpeg and libpng below
    libjpeg and libpng: for artwork plugin (when imlib2 is not installed, or --disable-artwork-imlib2 is used)
    libmad (optional): for mp3 plugin
    libmpg123 (optional): for mp3 plugin
        NOTE: the mp3 plugin has multiple backends since deadbeef 0.7, both libmad and libmpg123 are supported at the same time, and can be selected by the user from plugin configuration dialog. At least one of them is required to satify mp3 plugin dependencies. But having both is preferred.
    libFLAC: for flac plugin
    wavpack: for wavpack plugin
    libsndfile: for sndfile plugin
    libcdio + libcddb: for cd audio plugin
    ffmpeg: for ffmpeg plugin
    xlib: for global hotkeys and gtkui
    dbus: for notification daemon support (OSD current song notifications)
    pulseaudio: for PulseAudio output plugin
    faad2: for AAC plugin
    zlib: for Audio Overload plugin (psf, psf2, etc), GME (for vgz)
    libzip: for vfs_zip plugin
    yasm: required to build assembly portions of ffap plugin on supported platforms (x86, x86_64)

actual package names for your Linux distribution may vary.


2. licensing

DeaDBeeF core uses ZLIB license. See COPYING in each subdirectory for details.





---------------------------

MinGW section
(please note, this whole source code tree is still a work in progress - no warranty provided)

The needed libraries above will build and install almost out-of-the-box.
For jansson, download some recent version (>=2.8), because I committed a fix for mingw environment which allows the full test suite to complete.

With recent versions of pthreads-win32 (installed with msys1/mingw) you'll have to comment out the declaration of timespec struct type (into pthread.h), since it is already declared in parts/time.h and having both will raise a compilation error. (seems this is not needed anymore...)

You'll get a ready-to-go binary zip file with GTK+2.24.10 on www.gtk.org, it contains also every single dependency library needed for deadbeef (gdk, glib, gthread, pango, cairo, atk and so on) and they're all built as DLL.
Well, if you prefer GTK+3 or any other gtk release, feel free to try. Version 2 is what I used, since it is easy to go with.

At the time of writing, I am quite confident a minimal deadbeef binary can be built with:

./configure --disable-vtx --disable-gme --disable-sid --disable-adplug --disable-wildmidi --disable-psf --disable-dumb --disable-shn --disable-sc68 --disable-shellexec --disable-ffap --disable-nls --disable-converter

It will support mpeg1/2 (if you install libmad and/or mpg123), aac (if you install faad2), vorbis (if you install libogg and libvorbis), musepack (it is shipped with deadbeef), flac (if you install flac), wavpack (if you install wavpack), sndfile (if you install libsndfile) and wma decoding (shipped) and resampling (if you install libsamplerate aka SecretRabbitCode). (maybe something else, disable what's unwanted)

The default null output plugin will be built, and I added a nice feature simulating real audio output delay. Quite useful, sometimes.
The WaveOut output plugin version 1.0 is now ready and it can play sounds through any audio device your OS currently supports. The deadbeef preference window lets you choose among the devices detected by the plugin.
QUALITY: a few tests I run on Windows7 platform (NOT into a VM) revealed some audio artifact and far metallic echoes during playback. The same audio source sounds far better when played through DirectSound API (same hardware involved). Well, the WaveOut plugin has no flaws (none I'm aware of), IMHO this means the audio content is "enriched" with a light DSP by the audio driver in the latter case. After all, the WaveOut interface is pretty old and those kind of scenarios may push everyone in software migration. If I'll have some time, then I'll write a DirectSound output plugin, although the current WaveOut plugin works indeed.

After the usual 'make' the main executable should be built (linking against wsock32 is needed).
Note: chances are that recent mingw compiler (gcc) creates an executable which needs an extra lib, called libgcc_s_dw2-1.dll.
Now, want a static deadbeef executable (I do) ? Then add the '-static' option to the compiler command line.
Have static and shared versions of pthreads libraries (I do) ? The default behaviour is to build against the shared version (dll) but you'll have to ship the library together with your executable. If this is not what you want, then add the '-D_PTW32_STATIC_LIB' definition to the preprocessor flags and you will get deadbeef.exe with no pthread dependency.

Now, 'make install' will install the package and you will be able to run deadbeef but - nothing else will happen.
Why?
Plugins are missing! - well, they are yet to be built for windows environment, that is, they have to be built as dll libraries.

This step is pretty easy - just annoying.
Go into the plugin directory (you have to follow this step for every plugin you want to build/install) and type:

gcc -s -shared -o somethingplugin.dll *.o libdependency.a -Wl,-no-undefined -Wl,--enable-runtime-pseudo-reloc

where somethingplugin.dll is the name of the output dll. Replace that *.o with the object files created by make (usually you'll find them into .libs/) and those libdependency.a with the library needed for the full linking process. For example, when linking the mp3 deconding library, mp3.dll, you will need to link libmad.a (and/or libmpg123.a) also (include their FULL path!).
Naming:  IT IS MANDATORY the dll has to be named as the plugin it contains (and case DOES matter)! If different, deadbeef won't find the entry point for the functions it searches it in.
The only exception is for gui plugins, they are named accordingly to the rules reported here https://github.com/Alexey-Yakovenko/deadbeef/wiki/Developing-your-own-plugin . Anyway, if in doubt, name the plugin exactly as its linux counterpart, just with .dll extension.

Copy the dll file into the plugins/ directory and the whole game will play nicely.

Have fun.

Elio