"Fran Burstall (Gmail)" <[email protected]> writes: > Another python possibility is tinytag: > > pip install tinytag > > python -m tinytag filename.mp3 (or whatever) > > It supports the following attributes: > > > tag.album # album as string > tag.albumartist # album artist as string > tag.artist # artist name as string > tag.audio_offset # number of bytes before audio data begins > tag.bitrate # bitrate in kBits/s > tag.comment # file comment as string > tag.composer # composer as string > tag.disc # disc number > tag.disc_total # the total number of discs > tag.duration # duration of the song in seconds > tag.filesize # file size in bytes > tag.genre # genre as string > tag.samplerate # samples per second > tag.title # title of the song > tag.track # track number as string > tag.track_total # total number of tracks as string > tag.year # year or data as string > > > Missing from the list of things that emms-print-metadata supplies are > performer and the various *sort like artistsort. > > Positive things: > > * like mutagen it is pure python and depends on no other libraries > * gives answers in the same format for mp3, flac and ogg... > > ---Fran
Tinytag can also be installed on my completely free system, so that's a plus. Here is it's output on my machine (csv option, ignoring non-standard fields): mp3: album,Verdi: La Traviata audio_offset,214874 title,Prelude - Prelude track,1 disc_total,2 artist,Wiener Philharmoniker track_total,22 channels,2 genre,Classical albumartist,Anna Netrebko filesize,7156596 composer,Giuseppe Verdi year,2005 duration,216.955533743 samplerate,44100 bitrate,256 disc,1 ogg: comment,None album,CD1 audio_offset,0 title,Messiah: Part I, no. 1: Sinfonia track,1 disc_total,None artist,George Frideric Handel track_total,None channels,None genre,None albumartist,George Frideric Handel; Academy of Ancient Music, Choir of New College Oxford, Edward Higginbottom filesize,2493516 composer,George Frideric Handel year,2006-10-02 duration,184.4 samplerate,44100 bitrate,109.375 disc,1 flac: comment,None album,In tempus praesens - Bach, J.S.: Violin Concertos BWV1041 & BWV1042; Gubaidulina: Violin Concerto In tempus praesens audio_offset,None title,1. (Allegro moderato) track,1 disc_total,None artist,Anne-Sophie Mutter [Violin] & Trondheim Soloists [Ensemble] & Anne-Sophie Mutter [Director] track_total,None channels,2 genre,None albumartist,None filesize,19622498 composer,None year,None duration,216.48 samplerate,44100 bitrate,708.152095459 disc,None If you are the person doing the coding, I have no problem with you choosing either tinytag or mutagen. The person doing the actual work gets a say. If we hit a wall when testing one, we'll just switch to the other. > > > > On Sat, 2 May 2020 at 13:05, Fran Burstall (Gmail) < > [email protected]> wrote: > > python-mutagen looks like a possibility but it gives different > output for different filetypes. This is what it looks like on a > .ogg file > > -- /home/timeshift/snapshots/2018-08-31_16-56-03/localhost/usr/ > share/cinnamon/sounds/bell.ogg > - Ogg Vorbis, 0.23 seconds, 96000 bps (audio/vorbis) > TITLE=bell > COMMENTS= > > I do not have any other filetypes to experiment on (flac?...) but > we would have to at least internally manage ID3 frame names vs > vobis comments etc > > ---Fran > > On Sat, 2 May 2020 at 04:41, Yoni Rabkin <[email protected]> > wrote: > > "Fran Burstall (Gmail)" <[email protected]> writes: > > > pyprinttags fails to provide playing-time which > emms-print-metadata > > does get by querying TagLib::AudioProperties. > > > > Is this a show-stopper? > > I've just had a look at python-mutagen, which installs > mutagen-inspect. It's output on my machine looks like this > (ignoring the > non-standard PRIV tag): > > -- /home/yrk/audio/classical/Verdi__La_Traviata__Netrebko/01 > - Prelude - Prelude.mp3 > - MPEG 1 layer 3, 256000 bps (CBR?), 44100 Hz, 2 chn, 216.93 > seconds (audio/mp3) > APIC= (image/jpeg, 205990 bytes) > COMM==eng=Amazon.com Song ID: 204947184 > TALB=Verdi: La Traviata > TCOM=Giuseppe Verdi > TCON=Classical > TCOP=(C) 2005 Deutsche Grammophon GmbH, Hamburg > TDRC=2005 > TIT2=Prelude - Prelude > TPE1=Wiener Philharmoniker > TPE2=Anna Netrebko > TPE3=Carlo Rizzi > TPOS=1/2 > TRCK=1/22 > > Do you see mutagen-inspect from python-mutagen as a > candidate? > > > > > > > > ************************************************************************* > > > TAGS OF '02. Peter Gunn (live) _ Where's Your > Head At > > > (Head-a-Pella).mp3' > > > > > > > ************************************************************************* > > > ALBUM = As Heard on > Radio > > Soulwax, > > > Part 2 > > > ALBUM ARTIST CREDIT = 2 Many DJ’s > > > ALBUMARTIST = 2 Many DJ’s > > > ALBUMARTISTSORT = 2 Many DJ’s > > > ARTIST = Emerson, Lake > & Palmer > > / > > > Basement Jaxx > > > ARTIST CREDIT = Emerson, Lake > & Palmer > > / > > > > [snip] > > > > I got something like this: > > > > ************************************ > > TAGS OF '01 - Prelude - Prelude.mp3' > > ************************************ > > ALBUM = Verdi: La Traviata > > COMMENT = Amazon.com Song ID: 204947184 > > COPYRIGHT = (C) 2005 Deutsche Grammophon GmbH, > Hamburg > > CONDUCTOR = Carlo Rizzi > > ARTIST = Wiener Philharmoniker > > TITLE = Prelude - Prelude > > GENRE = Classical > > ALBUMARTIST = Anna Netrebko > > COMPOSER = Giuseppe Verdi > > DATE = 2005 > > TRACKNUMBER = 1/22 > > DISCNUMBER = 1/2 > > Unsupported tag elements: PRIV; APIC > > > > ...which looks easy enough to parse. > > > > Unfortunately, installing pytaglib on my Trisquel > machine was as > > much > > work as emms-print-metadata. It involved manually > downloading > > pytaglib-0.3.4, then installing cython, then: > > > > $ python setup.py build > > $ python setup.py install --user > > > > But I assume that it is easier on systems with pip, so > this isn't > > a > > show-stopper. Moreover, it shows that this can run on a > > completely free > > system. If it couldn't then that would be another > show-stopper. > > > > As an aside: looking at the command line of pyprinttags > I note > > that > > we'll have to add the "-b" (batch) option so that > pyprinttags > > doesn't > > try to ask the user questions and hang the elisp > process call. > > > > > Clearly a little parsing would be necessary to get > this into a > > shape > > > that emms could work with. > > > > > > I see two ways to go with this: > > > > > > 1. write emms-info-pytaglib.el which does the > parsing. > > > > > > 2. write a python version of emms-print-metadata > that is a > > drop-in > > > replacement for the C version. > > > > > > Both are easy though option 2 is probably easier. > The downside > > of > > > option 2 is that we still have a piece of non-elisp > to install > > in the > > > user's path. > > > > > > Preferences? > > > > Absolutely option 1, since otherwise we would be > shipping C, C++, > > Perl, > > and Python; no thank you. The idea is to let the OS > provide the > > packages, and let elisp do the rest. This is as opposed > to what > > we do > > now, which is: let the OS provide a package, provide > some glue > > code, and > > then let elisp do the rest. We are trying to get rid of > the glue. > > > > I can write an implementation of emms-info-pytaglib and > ping you > > to test > > it once I'm done, or you can do that. It really depends > on > > whether you > > feel like writing that would be fun for you; your > choice. Thank > > you > > nevertheless. > > > > -- > > "Cut your own wood and it will warm you twice" > > > > > > > > -- > "Cut your own wood and it will warm you twice" > > > -- "Cut your own wood and it will warm you twice"
