{"action":"created","issue":{"url":"https://api.github.com/repos/clementine-player/Clementine/issues/5135","repository_url":"https://api.github.com/repos/clementine-player/Clementine","labels_url":"https://api.github.com/repos/clementine-player/Clementine/issues/5135/labels{/name}","comments_url":"https://api.github.com/repos/clementine-player/Clementine/issues/5135/comments","events_url":"https://api.github.com/repos/clementine-player/Clementine/issues/5135/events","html_url":"https://github.com/clementine-player/Clementine/pull/5135","id":119071908,"number":5135,"title":"New feature: song fingerprinting and file tracking","user":{"login":"abika","id":1074117,"avatar_url":"https://avatars.githubusercontent.com/u/1074117?v=3","gravatar_id":"","url":"https://api.github.com/users/abika","html_url":"https://github.com/abika","followers_url":"https://api.github.com/users/abika/followers","following_url":"https://api.github.com/users/abika/following{/other_user}","gists_url":"https://api.github.com/users/abika/gists{/gist_id}","starred_url":"https://api.github.com/users/abika/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/abika/subscriptions","organizations_url":"https://api.github.com/users/abika/orgs","repos_url":"https://api.github.com/users/abika/repos","events_url":"https://api.github.com/users/abika/events{/privacy}","received_events_url":"https://api.github.com/users/abika/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":5,"created_at":"2015-11-26T16:09:16Z","updated_at":"2016-07-10T19:36:06Z","closed_at":null,"pull_request":{"url":"https://api.github.com/repos/clementine-player/Clementine/pulls/5135","html_url":"https://github.com/clementine-player/Clementine/pull/5135","diff_url":"https://github.com/clementine-player/Clementine/pull/5135.diff","patch_url":"https://github.com/clementine-player/Clementine/pull/5135.patch"},"body":"A new  feature for tracking filename changes for playlist songs.\r\n\r\nOn inserting songs into the playlist a fingerprint is created for each song and the directory of the song is watched for changes. If a songs filename changes, the new file is found by searching in the same directory with the fingerprint of the song.\r\nOf course, this makes tracking currently very limited: only renames are detected. But its only kind of a proof-of-concept, the real benefit comes when fingerprints are added to the database.\r\n\r\n## FAQs\r\n\r\n### How is the fingerprint calculated?\r\n-> `hash( chromaprint( first10SecsOfSong ) + lengthOfSong )`\r\n\r\nThere is also a fallback using the first 512byte of a file if Chromaprint fails.\r\n\r\n### What are the properties of this calculation method?\r\n* agnostic to file meta/ID2/ID3 tags: YES! E.g. mp3 tags can be inserted/removed/changed, the fingerprint stays the same.\r\n* agnostic to media format/bitrate: unfortunately no. AcoustID is too sensitive.\r\n* uniqueness: tested with 10000+ songs, all FPs were unique \r\n* calculation speed: ~ 0.1secs per song. This not very fast and I'm open to suggestions for improvement here.\r\n\r\n### Why is resampling turned off in Chromaprint for FP creation?\r\nWhen repeatedly processing the same track GStreamer produces slightly different output streams if resampling is done. The result is different fingerprints for the same file.\r\n(This also happens when requesting Musicbrainz but its not that important here.)\r\n\r\n### Why watching directories and not the files directly?\r\nThe number of (inotify) filesystem watches is limited. This limit would be easily reached for a large number of playlist songs.\r\n***\r\n\r\nAs a next step, I'm planning to insert fingerprints to the playlist-backend (=database). But I would like to have some feedback first...)\r\n"},"comment":{"url":"https://api.github.com/repos/clementine-player/Clementine/issues/comments/231606630","html_url":"https://github.com/clementine-player/Clementine/pull/5135#issuecomment-231606630","issue_url":"https://api.github.com/repos/clementine-player/Clementine/issues/5135","id":231606630,"user":{"login":"abika","id":1074117,"avatar_url":"https://avatars.githubusercontent.com/u/1074117?v=3","gravatar_id":"","url":"https://api.github.com/users/abika","html_url":"https://github.com/abika","followers_url":"https://api.github.com/users/abika/followers","following_url":"https://api.github.com/users/abika/following{/other_user}","gists_url":"https://api.github.com/users/abika/gists{/gist_id}","starred_url":"https://api.github.com/users/abika/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/abika/subscriptions","organizations_url":"https://api.github.com/users/abika/orgs","repos_url":"https://api.github.com/users/abika/repos","events_url":"https://api.github.com/users/abika/events{/privacy}","received_events_url":"https://api.github.com/users/abika/received_events","type":"User","site_admin":false},"created_at":"2016-07-10T19:36:06Z","updated_at":"2016-07-10T19:36:06Z","body":"after a long time... is there anything that prevents this from merging? I mean the \"detect file name changes\" option is working fine, it's off by default, and the code doesn't interfere with anything (9 months and still no conflicts).\r\n\r\nCan somebody decide this, please?"}}
{"actor":{"display_login":"abika"}}