This project is not alive anymore; it is instead recommended to use bliss in combination with your favorite audio player.
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
Get a release here: https://github.com/Polochon-street/leleleplayer/releases
or (the hard way:) 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_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
$ yaourt -S leleleplayer-git
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
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
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.