beetbox / pyacoustid

Python bindings for Chromaprint acoustic fingerprinting and the Acoustid Web service
MIT License
325 stars 66 forks source link

Check that argument to `decode_fingerprint` is bytes #39

Open patatetom opened 6 years ago

patatetom commented 6 years ago

hello,

I'm trying to play with pyacoustid but I'm encountering a mistake I can't get past.

I have the same audio recording in mp3 and ogg format on which I run the program fpcalc with the -plain option :

# pacman -S chromaprint
...
Packages (1) chromaprint-1.4.3-1
...

$ pip install --user pyacoustid
...
Successfully installed pyacoustid-1.1.5

$ fpcalc -plain neil.*
AQAAH5ukTWESCRcDJqFToetxRQlKCe7hX8JfpNORrEftTPAfUJRmVJJT9EiYI2SFuwq-HVvMB98adBpzeDzSPMoFzXbwZNagJ8R95CPSaZwAiAAARjkgETAUKQEQU4AoRwAB
AQAAIJukTckUCRcLJqFToWOOKwtKCe7hX8JfpNORrEftTPAfUJRmVJJT9EiYI2SFuwo-5dj-4NwadBpzeDzSPMoFzXbwzBp0JsR95CPSaZyg0wGIAABGOSARMBQpARBgChBmCCAI

in python3, I'm trying this piece of code inspired by https://gist.github.com/lalinsky/1132166 :

import chromaprint
a = 'AQAAH5ukTWESCRcDJqFToetxRQlKCe7hX8JfpNORrEftTPAfUJRmVJJT9EiYI2SFuwq-HVvMB98adBpzeDzSPMoFzXbwZNagJ8R95CPSaZwAiAAARjkgETAUKQEQU4AoRwAB'
A = chromaprint.decode_fingerprint(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/pascal/.local/lib/python3.6/site-packages/chromaprint.py", line 149, in decode_fingerprint
    ctypes.byref(algorithm), 1 if base64 else 0
ctypes.ArgumentError: argument 1: <class 'TypeError'>: wrong type

a does not appear to be base64 encoded :

import base64
base64.b64decode(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.6/base64.py", line 87, in b64decode
    return binascii.a2b_base64(s)
binascii.Error: Incorrect padding

what's the mistake I'm making ?

regards, lacsaP.

lalinsky commented 6 years ago

I guess this is a Python 3 issue and if you pass the fingerprint to decode_fingerprint as bytes instead of str, it will work.

But do you know that you can get the decoded fingerprint from fpcalc? Just add the -raw option and then you don't need to use the chromaprint library at all.

patatetom commented 6 years ago

yes, it works better with this :

a = b'AQAAH5ukTWESCRcDJqFToetxRQlKCe7hX8JfpNORrEftTPAfUJRmVJJT9EiYI2SFuwq-HVvMB98adBpzeDzSPMoFzXbwZNagJ8R95CPSaZwAiAAARjkgETAUKQEQU4AoRwAB'

thanks and sorry for the inconvenience !

sampsyo commented 6 years ago

Thanks, @lalinsky!

I'm going to reopen this issue as a reminder that we should add an earlier type check to make it clear what's gone wrong when this happens.