C CMake
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
images
resources
src
.gitignore
CMakeLists.txt
LICENSE
README.md
TODO
Windows_toolchain.cmake

README.md

leleleplayer v0.7.0

Leleleplayer is a classic audio player, which comes with a home-made library that computes distance between songs, using it in order to smoothly play similar songs from your audio library. Handy when you don't want to bother yourself with creating a complete playlist. (Unstable) Windows binaries are available in the release tab

Leleleplayer screenshot

Dependencies

  • bliss library
  • ffmpeg
  • gstreamer-1.0 (and gst-plugins-good/bad/ugly)
  • gtk3

Installation

Windows users:

$ git clone https://github.com/Polochon-street/leleleplayer.git
  • go to leleleplayer root directory
$ cd leleleplayer 
  • Create and enter the build directory
$ mkdir build_windows && cd build_windows
  • You'll now need to have proper directories in your build_windows directory, containing mingw-obtained dlls: bin/, images/, share/, lib/
    (If you don't know how to do it, and still want to, contact me)
  • Generate the Makefile
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../Windows_toolchain.cmake
  • Compile the player & the analyze binaries
$ make
  • Package the player
$ make package
  • Patch the package
$ cd _CPack_Packages/win64/NSIS
  • Edit project.nsi by adding SetOutPath « "$INSTDIR\bin" » before « CreateShortCut "$SMPROGRAMS$STARTMENU_FOLDER\Leleleplayer.lnk" "$INSTDIR\bin\leleleplayer" »
  • Package the player again
$ makensis project.nsi
  • The windows binary is now available in build_windows/_CPack_Packages/win64/NSIS/Leleleplayer-xx-win64.exe

Archlinux users

  • install AUR package via yaourt
$ yaourt -S leleleplayer-git

Other Linux users

  • clone repository on github
$ git clone https://github.com/Polochon-street/leleleplayer.git
  • go to leleleplayer root directory
$ cd leleleplayer 
  • Create and enter the build directory
$ mkdir build && cd build
  • Generate the Makefile
$ cmake .. -DCMAKE_BUILD_TYPE=Release
  • Compile the player & the analyze binaries
$ make
  • Install the player
# make install && glib-compile-schemas /usr/share/glib-2.0/schemas
  • Launch the player
$ leleleplayer

Usage of the analyze binary

  • Check whether a song is calm or loud
$ ./analyze /path/to/song

Returns 1 if the song is calm, 0 otherwise

  • Check if a song is calm or loud, with debug information (see below for details)
$ ./analyze -d /path/to/song

How does the analysis process work?

Leleleplayer and the analyze binary use the same library, liblelele. For every song analyzed, liblelele returns a struct song which contains, among other things, four floats, each rating an aspect of the song:

  • The tempo rating draws the envelope of the whole song, and then computes its DFT, obtaining peaks at the frequency of each dominant beat. The period of each dominant beat can then be deduced from the frequencies, hinting at the song's tempo.
    Warning: the tempo is not equal to the force of the song. As an example , a heavy metal track can have no steady beat at all, giving a very low tempo score while being very loud.

  • The amplitude rating reprents the physical « force » of the song, that is, how much the speaker's membrane will move in order to create the sound.
    It is obtained by applying a magic formula with magic coefficients to a histogram of the values of all the song's samples

  • The frequency rating is a ratio between high and low frequencies: a song with a lot of high-pitched sounds tends to wake humans up far more easily.
    This rating is obtained by performing a DFT over the sample array, and splitting the resulting array in 4 frequency bands: low, mid-low, mid, mid-high, and high. Using the value in dB for each band, the final formula corresponds to freq_result = high + mid-high + mid - (low + mid-low)

  • The attack rating computes the difference between each value in the envelope and the next (its derivative).
    The final value is obtained by dividing the sum of the positive derivates by the number of samples, in order to avoid different results just because of the songs' length.
    As you have already guessed, a song with a lot of attacks also tends to wake humans up very quickly.