From e19fe82d9fa7f7e0d8723533c453b5c4a1598e5b Mon Sep 17 00:00:00 2001 From: Polochon-street Date: Thu, 6 Oct 2016 22:00:59 +0200 Subject: [PATCH] Updated bindings to match new Bliss version --- CMakeLists.txt | 4 ++-- mpd/client.py | 23 ++++++++--------------- scripts/build_cache.py | 18 +++++------------- src/analysis.c | 18 +++++++----------- 4 files changed, 22 insertions(+), 41 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 227727c..39939f1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,7 +7,7 @@ add_subdirectory (bliss) file (GLOB COMMON_SRC "src/*.c") find_package(PkgConfig REQUIRED) -pkg_check_modules(MULTIMEDIA REQUIRED libavformat libavutil libavcodec) +pkg_check_modules(MULTIMEDIA REQUIRED libavformat libavutil libavcodec fftw3) include_directories(${MULTIMEDIA_INCLUDE_DIRS} include/ bliss/include) link_directories(${MULTIMEDIA_LIBRARY_DIRS}) add_definitions(${MULTIMEDIA_CFLAGS_OTHER}) @@ -19,6 +19,6 @@ add_executable (blissify target_link_libraries (blissify m sqlite3 - bliss) + bliss fftw3) install (TARGETS blissify DESTINATION /usr/bin) diff --git a/mpd/client.py b/mpd/client.py index 8d669ce..c4957b9 100755 --- a/mpd/client.py +++ b/mpd/client.py @@ -19,6 +19,7 @@ import sys import mpd +# logging.basicConfig(level='DEBUG') class PersistentMPDClient(mpd.MPDClient): """ @@ -149,7 +150,7 @@ def main(queue_length): logging.info("Currently played song is %s." % (current_song,)) # Get current song coordinates - cur.execute("SELECT id, tempo1, tempo2, tempo3, amplitude, frequency, attack, filename FROM songs WHERE filename=?", (current_song,)) + cur.execute("SELECT id, tempo, amplitude, frequency, attack, filename FROM songs WHERE filename=?", (current_song,)) current_song_coords = cur.fetchone() if current_song_coords is None: logging.error("Current song %s is not in db. You should update the db." % @@ -161,7 +162,7 @@ def main(queue_length): for i in range(queue_length): # Get cached distances from db cur.execute( - "SELECT id, filename, distance, similarity, tempo1, tempo2, tempo3, amplitude, frequency, attack FROM (SELECT s2.id AS id, s2.filename AS filename, s2.tempo1 AS tempo1, s2.tempo2 AS tempo2, s2.tempo3 AS tempo3, s2.amplitude AS amplitude, s2.frequency AS frequency, s2.attack AS attack, distances.distance AS distance, distances.similarity AS similarity FROM distances INNER JOIN songs AS s1 ON s1.id=distances.song1 INNER JOIN songs AS s2 on s2.id=distances.song2 WHERE s1.filename=? UNION SELECT s1.id as id, s1.filename AS filename, s1.tempo1 AS tempo1, s1.tempo2 AS tempo2, s1.tempo3 AS tempo3, s1.amplitude AS amplitude, s1.frequency AS frequency, s1.attack AS attack, distances.distance as distance, distances.similarity AS similarity FROM distances INNER JOIN songs AS s1 ON s1.id=distances.song1 INNER JOIN songs AS s2 on s2.id=distances.song2 WHERE s2.filename=?) ORDER BY distance ASC", + "SELECT id, filename, distance, similarity, tempo, amplitude, frequency, attack FROM (SELECT s2.id AS id, s2.filename AS filename, s2.tempo AS tempo, s2.amplitude AS amplitude, s2.frequency AS frequency, s2.attack AS attack, distances.distance AS distance, distances.similarity AS similarity FROM distances INNER JOIN songs AS s1 ON s1.id=distances.song1 INNER JOIN songs AS s2 on s2.id=distances.song2 WHERE s1.filename=? UNION SELECT s1.id as id, s1.filename AS filename, s1.tempo AS tempo, s1.amplitude AS amplitude, s1.frequency AS frequency, s1.attack AS attack, distances.distance as distance, distances.similarity AS similarity FROM distances INNER JOIN songs AS s1 ON s1.id=distances.song1 INNER JOIN songs AS s2 on s2.id=distances.song2 WHERE s2.filename=?) ORDER BY distance ASC", (current_song_coords["filename"], current_song_coords["filename"])) cached_distances = [row for row in cur.fetchall() @@ -193,7 +194,7 @@ def main(queue_length): continue # Get all other songs coordinates and iterate randomly on them - cur.execute("SELECT id, tempo1, tempo2, tempo3, amplitude, frequency, attack, filename FROM songs ORDER BY RANDOM()") + cur.execute("SELECT id, tempo, amplitude, frequency, attack, filename FROM songs ORDER BY RANDOM()") for tmp_song_data in cur.fetchall(): if(tmp_song_data["filename"] == current_song_coords["filename"] or tmp_song_data["filename"] in cached_distances_songs or @@ -203,32 +204,24 @@ def main(queue_length): continue # Compute distance distance = math.sqrt( - (current_song_coords["tempo1"] - tmp_song_data["tempo1"])**2 + - (current_song_coords["tempo2"] - tmp_song_data["tempo2"])**2 + - (current_song_coords["tempo3"] - tmp_song_data["tempo3"])**2 + + (current_song_coords["tempo"] - tmp_song_data["tempo"])**2 + (current_song_coords["amplitude"] - tmp_song_data["amplitude"])**2 + (current_song_coords["frequency"] - tmp_song_data["frequency"])**2 + (current_song_coords["attack"] - tmp_song_data["attack"])**2 ) similarity = ( - (current_song_coords["tempo1"] * tmp_song_data["tempo1"] + - current_song_coords["tempo2"] * tmp_song_data["tempo2"] + - current_song_coords["tempo3"] * tmp_song_data["tempo3"] + + (current_song_coords["tempo"] * tmp_song_data["tempo"] + current_song_coords["amplitude"] * tmp_song_data["amplitude"] + current_song_coords["frequency"] * tmp_song_data["frequency"] + current_song_coords["attack"] * tmp_song_data["attack"]) / ( math.sqrt( - current_song_coords["tempo1"]**2 + - current_song_coords["tempo2"]**2 + - current_song_coords["tempo3"]**2 + + current_song_coords["tempo"]**2 + current_song_coords["amplitude"]**2 + current_song_coords["frequency"]**2 + current_song_coords["attack"]**2) * math.sqrt( - tmp_song_data["tempo1"]**2 + - tmp_song_data["tempo2"]**2 + - tmp_song_data["tempo3"]**2 + + tmp_song_data["tempo"]**2 + tmp_song_data["amplitude"]**2 + tmp_song_data["frequency"]**2 + tmp_song_data["attack"]**2) diff --git a/scripts/build_cache.py b/scripts/build_cache.py index 26c42bd..1456bdb 100755 --- a/scripts/build_cache.py +++ b/scripts/build_cache.py @@ -25,7 +25,7 @@ def main(): cached_distances = cur.fetchall() # Get all songs - cur.execute("SELECT id, tempo1, tempo2, tempo3, amplitude, frequency, attack, filename FROM songs") + cur.execute("SELECT id, tempo, amplitude, frequency, attack, filename FROM songs") all_songs = cur.fetchall() for i in range(len(all_songs)): @@ -42,32 +42,24 @@ def main(): continue # Compute distance distance = math.sqrt( - (song1["tempo1"] - song2["tempo1"])**2 + - (song1["tempo2"] - song2["tempo2"])**2 + - (song1["tempo3"] - song2["tempo3"])**2 + + (song1["tempo"] - song2["tempo"])**2 + (song1["amplitude"] - song2["amplitude"])**2 + (song1["frequency"] - song2["frequency"])**2 + (song1["attack"] - song2["attack"])**2 ) similarity = ( - (song1["tempo1"] * song2["tempo1"] + - song1["tempo2"] * song2["tempo2"] + - song1["tempo3"] * song2["tempo3"] + + (song1["tempo"] * song2["tempo"] + song1["amplitude"] * song2["amplitude"] + song1["frequency"] * song2["frequency"] + song1["attack"] * song2["attack"]) / ( math.sqrt( - song1["tempo1"]**2 + - song1["tempo2"]**2 + - song1["tempo3"]**2 + + song1["tempo"]**2 + song1["amplitude"]**2 + song1["frequency"]**2 + song1["attack"]**2) * math.sqrt( - song2["tempo1"]**2 + - song2["tempo2"]**2 + - song2["tempo3"]**2 + + song2["tempo"]**2 + song2["amplitude"]**2 + song2["frequency"]**2 + song2["attack"]**2) diff --git a/src/analysis.c b/src/analysis.c index 05ff25e..ca4b138 100644 --- a/src/analysis.c +++ b/src/analysis.c @@ -47,9 +47,7 @@ int _init_db(char *data_folder, char* db_path) } dberr = sqlite3_exec(dbh, "CREATE TABLE IF NOT EXISTS songs( \ id INTEGER PRIMARY KEY, \ - tempo1 REAL, \ - tempo2 REAL, \ - tempo3 REAL, \ + tempo REAL, \ amplitude REAL, \ frequency REAL, \ attack REAL, \ @@ -153,7 +151,7 @@ int _parse_music_helper( } // Insert song analysis in database dberr = sqlite3_prepare_v2(dbh, - "INSERT INTO songs(tempo1, tempo2, tempo3, amplitude, frequency, attack, filename) VALUES(?, ?, ?, ?, ?, ?, ?)", + "INSERT INTO songs(tempo, amplitude, frequency, attack, filename) VALUES(?, ?, ?, ?, ?)", -1, &res, 0); if (SQLITE_OK != dberr) { fprintf(stderr, "Error while inserting data in db: %s\n\n", sqlite3_errmsg(dbh)); @@ -170,13 +168,11 @@ int _parse_music_helper( // Pass file return 1; } - sqlite3_bind_double(res, 1, song_analysis.force_vector.tempo1); - sqlite3_bind_double(res, 2, song_analysis.force_vector.tempo2); - sqlite3_bind_double(res, 3, song_analysis.force_vector.tempo3); - sqlite3_bind_double(res, 4, song_analysis.force_vector.amplitude); - sqlite3_bind_double(res, 5, song_analysis.force_vector.frequency); - sqlite3_bind_double(res, 6, song_analysis.force_vector.attack); - sqlite3_bind_text(res, 7, song_uri, strlen(song_uri), SQLITE_STATIC); + sqlite3_bind_double(res, 1, song_analysis.force_vector.tempo); + sqlite3_bind_double(res, 2, song_analysis.force_vector.amplitude); + sqlite3_bind_double(res, 3, song_analysis.force_vector.frequency); + sqlite3_bind_double(res, 4, song_analysis.force_vector.attack); + sqlite3_bind_text(res, 5, song_uri, strlen(song_uri), SQLITE_STATIC); dberr = sqlite3_step(res); if (SQLITE_DONE != dberr) { // Free song analysis