Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add tool to find similar music #132

Closed
qarmin opened this issue Dec 23, 2020 · 8 comments · Fixed by #970
Closed

Add tool to find similar music #132

qarmin opened this issue Dec 23, 2020 · 8 comments · Fixed by #970
Labels
enhancement New feature or request external Require to add/modify external crate or project PR welcome The given topic has already been analyzed and you can safely create a PR implementing this functiona

Comments

@qarmin
Copy link
Owner

qarmin commented Dec 23, 2020

It would be great if Czkawka will have tool to find similar music.

It should find some sort of remixes.

@qarmin qarmin added the enhancement New feature or request label Dec 23, 2020
@ercas
Copy link

ercas commented Dec 31, 2020

adding to this - would be interesting to see if this could be done via the use of AcoustIDs, which is what MusicBrainz Picard uses to match untagged music to the MusicBrainz database

@tinywombat765
Copy link

This should be pretty easy to implement using fpcalc. I could take a crack at implementing it.

@qarmin
Copy link
Owner Author

qarmin commented Nov 25, 2021

For now I don't see possible Rust crate which could be used to do this
Looks that chromaprint bindings - https://crates.io/crates/chromaprint-rs needs to be compiled with ffmpeg(I don't want to use such heavy dependency, Rust only crate is preferred)

Looks that Symphonia can do it, but such feature needs to be implemented as new crate - pdeljanov/Symphonia#50

@tinywombat765
Copy link

This easiest way to do this would be to invoke fpcal instead of using a library. But I understand if you don't want to do it that way.

@drewlustro
Copy link

Quite interesting... could be down to help with this, although I have no production experience with rust.

@qarmin qarmin added PR welcome The given topic has already been analyzed and you can safely create a PR implementing this functiona external Require to add/modify external crate or project labels May 30, 2022
@udf
Copy link

udf commented Oct 11, 2022

I had a look at implementing this using AcoustID fingerprints, and there's two issues that I found

  1. fpcalc hangs on some m4a files (and some mp3s in my experience): there is a (unmerged) pull request that fixes this
  2. The fingerprint comparison code that the AcoustID server uses is implemented as a postgreql extension, which can be found here: https://github.com/acoustid/pg_acoustid/blob/102f3c870c6157704694c2ddbad3ae8ab2c7de91/acoustid_compare.c#L122 (this will need to be ported to Rust as Chromaprint doesn't export any comparison functions).
    However, the repo has no license. Chromaprint (and fpcalc) is LGPL, but the AcoustID server is MIT. So it's not clear what license the comparison code is under.

@darksv
Copy link
Contributor

darksv commented Jan 15, 2023

Hello! I'm working on a pure Rust port of chromaprint https://github.com/darksv/rusty-chromaprint
There are a few things that are not implemented yet like compressing and decompressing of the fingerprints, but it should be in a somewhat usable state right now.

@qarmin
Copy link
Owner Author

qarmin commented May 7, 2023

Looks that rusty-fingerprint is the best available option:

  • small build dependencies(symphonia already was used by broken file finder)
  • no runtime dependencies
  • 100% rust code
  • quite fast
  • works(I had problems when trying to use the above tools like chromaprint)

so except maybe some performance improvements during comparing fingerprints in Czkawka and/or library side, I don't think that this application needs anything else from this library

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request external Require to add/modify external crate or project PR welcome The given topic has already been analyzed and you can safely create a PR implementing this functiona
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants