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



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"
>>
>

Reply via email to