eyeD3 is a Python module and command line program for processing ID3 tags. Information about mp3 files (i.e bit rate, sample frequency, play time, etc.) is also provided. The formats supported are ID3v1 (1.0/1.1) and ID3v2 (2.3/2.4).

Overview

Status

Latest Version Project Status Build Status License Supported Python versions Coverage Status

About

eyeD3 is a Python tool for working with audio files, specifically MP3 files containing ID3 metadata (i.e. song info).

It provides a command-line tool (eyeD3) and a Python library (import eyed3) that can be used to write your own applications or plugins that are callable from the command-line tool.

For example, to set some song information in an mp3 file called song.mp3:

$ eyeD3 -a Integrity -A "Humanity Is The Devil" -t "Hollow" -n 2 song.mp3

With this command we've set the artist (-a/--artist), album (-A/--album), title (-t/--title), and track number (-n/--track-num) properties in the ID3 tag of the file. This is the standard interface that eyeD3 has always had in the past, therefore it is also the default plugin when no other is specified.

The results of this command can be seen by running the eyeD3 with no options.

$ eyeD3 song.mp3
song.mp3      [ 3.06 MB ]
-------------------------------------------------------------------------
ID3 v2.4:
title: Hollow
artist: Integrity
album: Humanity Is The Devil
album artist: None
track: 2
-------------------------------------------------------------------------

The same can be accomplished using Python.

import eyed3

audiofile = eyed3.load("song.mp3")
audiofile.tag.artist = "Token Entry"
audiofile.tag.album = "Free For All Comp LP"
audiofile.tag.album_artist = "Various Artists"
audiofile.tag.title = "The Edge"
audiofile.tag.track_num = 3

audiofile.tag.save()

eyeD3 is written and maintained by Travis Shirk and is licensed under version 3 of the GPL.

Features

  • Python package (import eyed3) for writing applications and plugins.
  • eyeD3 : Command-line tool driver script that supports plugins.
  • Easy ID3 editing/viewing of audio metadata from the command-line.
  • Plugins for: Tag to string formatting (display), album fixing (fixup), cover art downloading (art), collection stats (stats), and json/yaml/jabber/nfo output formats, and more included.
  • Support for ID3 versions 1.x, 2.2 (read-only), 2.3, and 2.4.
  • Support for the MP3 audio format exposing details such as play time, bit rate, sampling frequency, etc.
  • Abstract design allowing future support for different audio formats and metadata containers.

Get Started

Python >= 3.6 is required.

For installation instructions or more complete documentation see http://eyeD3.nicfit.net/

Please post feedback and/or defects on the issue tracker, or mailing list.

Comments
  • eyeD3 version 0.9.x not working on slackware

    eyeD3 version 0.9.x not working on slackware

    I've been a very happy user of eyeD3 for several years now, so I tried compiling version 0.9.2 of it, only for it to fail with the error below:

    Traceback (most recent call last): File "/usr/bin/eyeD3", line 11, in load_entry_point('eyeD3==0.9.2', 'console_scripts', 'eyeD3')() File "/usr/lib64/python2.7/site-packages/pkg_resources/init.py", line 490, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/lib64/python2.7/site-packages/pkg_resources/init.py", line 2854, in load_entry_point return ep.load() File "/usr/lib64/python2.7/site-packages/pkg_resources/init.py", line 2445, in load return self.resolve() File "/usr/lib64/python2.7/site-packages/pkg_resources/init.py", line 2451, in resolve module = import(self.module_name, fromlist=['name'], level=0) File "/usr/lib64/python2.7/site-packages/eyed3/init.py", line 31, in from .utils.log import log # noqa: E402 File "/usr/lib64/python2.7/site-packages/eyed3/utils/init.py", line 361 msg = f"invalid level choice: {level} (choose from {parser.log_levels})" ^ SyntaxError: invalid syntax

    This isn't a total loss, as I just switched back to version 0.8.12 for the time being, but it would be nice to be able to run the newer versions to stay current, but there is probably some dependency that I have no idea is missing that makes that impossible. What did I get wrong?

    help wanted 
    opened by oldpink 9
  • UnboundLocalError: local variable 'tn' referenced before assignment

    UnboundLocalError: local variable 'tn' referenced before assignment

    So I was using eyeD3 ( python ) to set ID3 tags to mp3 files for a personal project when the given traceback occurred in eyed3/id3/tag.py As a temporary hack I changed _setNum(self, fid, val) on line 320 in the said file as follows:

    def _setNum(self, fid, val):
            tn, tt = None, None # Added this line 
            if type(val) is tuple:
                tn, tt = val
            elif type(val) is int:
                tn, tt = val, None
            elif val is None:
                tn, tt = None, None
    
            n = (tn, tt)
    

    Although the UnboundLocalError was gone but the track number tag was not being assigned properly (I didn't expect to either) hence this issue for hopefully a proper fix (or guidance so that I can fix it myself and open a PR)

    The error occurred in a Py3.7 virtual environment

    Python 3.7.2 (default, Jan 10 2019, 23:51:51)
    [GCC 8.2.1 20181127] on linux
    
    $ eyeD3 --version
    eyed3.plugins:WARNING: Plugin '('lastfm.py', '/home/shashank/Projects/CompleteMusic-2.0/lib/python3.7/site-packages/eyed3/plugins')' requires packages that are not installed: cannot import name 'COVER_EXTRA_LARGE' from 'pylast' (/home/shashank/Projects/CompleteMusic-2.0/lib/python3.7/site-packages/pylast/__init__.py)
    0.8.10
    
    Traceback (most recent call last):
    File "mio.py", line 182, in <module>
    test_object = MusicIndiaOnline("Balam Pichkari")
    File "mio.py", line 31, in __init__
    self.download_song()
    File "mio.py", line 77, in download_song
    audiofile.tag.track_num = self.metadata['track-number']
    File "[I have redacted this]/lib/python3.7/site-packages/eyed3/core.py", line 173, in track_num
    self._setTrackNum(v)
    File "[I have redacted this]/lib/python3.7/site-packages/eyed3/id3/tag.py", line 303, in _setTrackNum
    self._setNum(frames.TRACKNUM_FID, val)
    File "[I have redacted this]/lib/python3.7/site-packages/eyed3/id3/tag.py", line 328, in _setNum
    n = (tn, tt)
    UnboundLocalError: local variable 'tn' referenced before assignment
    

    I hope I have given enough info. I'd also like to clarify that apart from the above change in source code I haven't changed anything else.

    opened by gadilashashank 9
  • Failed to find magiclib

    Failed to find magiclib

    I am running Windows 10 version 1703 with Python 3.6.2 installed.

    I created a python script that uses eyeD3 simply by importing it after running pip install eyed3 which worked until I updated to version 1703.

    Now when I try to run the script I get this output:

    Traceback (most recent call last):
      File ".\script.py", line 6, in <module>
        import eyed3
      File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\eyed3\__init__.py", line 35, in <module>
        from .utils.log import log                                            # noqa
      File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\eyed3\utils\__init__.py", line 27, in <module>
        import magic
      File "C:\Users\User\AppData\Local\Programs\Python\Python36-32\lib\site-packages\magic.py", line 176, in <module>
        raise ImportError('failed to find libmagic.  Check your installation')
    ImportError: failed to find libmagic.  Check your installation
    

    I have tried reinstalling magiclib but it's not helping. What should I try?

    Informational 
    opened by GregSkl 9
  • UnicodeEncodeError: 'ascii' codec can't encode character

    UnicodeEncodeError: 'ascii' codec can't encode character

    Does 0.8 version work with unicode characters? This error not occurred with 0.7.11.

    eyeD3 01.\ Discothèque.mp3 
    Uncaught exception: 'ascii' codec can't encode character u'\xe8' in position 32: ordinal not in range(128)
    
    eyed3:ERROR: 'ascii' codec can't encode character u'\xe8' in position 32: ordinal not in range(128)
    Traceback (most recent call last):
      File "/home/pavel/.local/lib/python2.7/site-packages/eyed3/main.py", line 279, in _main
        retval = mainFunc(args, config)
      File "/home/pavel/.local/lib/python2.7/site-packages/eyed3/main.py", line 50, in main
        fs_encoding=args.fs_encoding)
      File "/home/pavel/.local/lib/python2.7/site-packages/eyed3/utils/__init__.py", line 81, in walk
        handler.handleFile(os.path.abspath(path))
      File "/home/pavel/.local/lib/python2.7/site-packages/eyed3/plugins/classic.py", line 457, in handleFile
        super(ClassicPlugin, self).handleFile(f, tag_version=parse_version)
      File "/home/pavel/.local/lib/python2.7/site-packages/eyed3/plugins/__init__.py", line 172, in handleFile
        self.audio_file = core.load(f, *args, **kwargs)
      File "/home/pavel/.local/lib/python2.7/site-packages/eyed3/core.py", line 77, in load
        path = pathlib.Path(path)
      File "/usr/lib/python2.7/dist-packages/pathlib.py", line 936, in __new__
        self = cls._from_parts(args, init=False)
      File "/usr/lib/python2.7/dist-packages/pathlib.py", line 613, in _from_parts
        drv, root, parts = self._parse_args(args)
      File "/usr/lib/python2.7/dist-packages/pathlib.py", line 606, in _parse_args
        return cls._flavour.parse_parts(parts)
      File "/usr/lib/python2.7/dist-packages/pathlib.py", line 75, in parse_parts
        parts = _py2_fsencode(parts)
      File "/usr/lib/python2.7/dist-packages/pathlib.py", line 58, in _py2_fsencode
        else part for part in parts]
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe8' in position 32: ordinal not in range(128)
    
    opened by spvkgn 8
  • MagicException(err) on import eyed3

    MagicException(err) on import eyed3

    Python v3.7.0a3 , eyed3 v0.8.4 , python_magic v0.4.15 , os Windows 7 , and x64 dll's from libmagicwin64-master (files timestamped 2015).

    import magic returns no error, but upon import eyed3, the following is output (in IDLE):

    Traceback (most recent call last): File "<pyshell#123>", line 1, in import eyed3 File "D:\Python\Python3\lib\site-packages\eyed3_init_.py", line 36, in from .core import load # noqa File "D:\Python\Python3\lib\site-packages\eyed3\core.py", line 9, in from .utils import guessMimetype File "D:\Python\Python3\lib\site-packages\eyed3\utils_init_.py", line 53, in mime_types = MagicTypes() File "D:\Python\Python3\lib\site-packages\eyed3\utils_init.py", line 41, in init keep_going=False) File "D:\Python\Python3\lib\site-packages\magic.py", line 67, in init magic_load(self.cookie, magic_file) File "D:\Python\Python3\lib\site-packages\magic.py", line 264, in magic_load return _magic_load(cookie, coerce_filename(filename)) File "D:\Python\Python3\lib\site-packages\magic.py", line 195, in errorcheck_negative_one raise MagicException(err) magic.MagicException: None [end output]

    Very interested in adding this to my mp3 scripting flow; hopefully, we can get this to work. Yes, I know the documents indicate python >=3.3, but I can hope can't I?

    Thanks!

    Informational 
    opened by damihm 7
  • `application/x-font-gdos` is sometimes returned as a .mp3 mime-type and it not in the list of acceptable types

    `application/x-font-gdos` is sometimes returned as a .mp3 mime-type and it not in the list of acceptable types

    I have directory of songs, they all look like " Noisia-Tommy+s_Theme.mp3". I wrote a script to automatically tag the artist and the title for each of them.

    #!/usr/bin/env python3
    
    import eyed3
    import os
    
    os.chdir("./")
    for filename in os.listdir('./'):
        for c, s in enumerate(filename):
                if s=="-":
                    artist=filename[:(c)]
                    title=filename[(c+1):-4]
                    audiofile=eyed3.load(filename)
                    audiofile.initTag()
                    artist=artist.replace("+", "'")
                    artist=artist.replace("_", " ")
                    title=title.replace("+", "'")
                    title=title.replace("_", " ")
                    print(title)
                    print(artist)
                    audiofile.tag.artist=artist
                    audiofile.tag.title=title
                    audiofile.tag.save()
                    break 
    

    When I run it I get this error : Traceback (most recent call last): File "./tag.py", line 14, in <module> audiofile.initTag() AttributeError: 'NoneType' object has no attribute 'initTag' But it happens only with 1/3 of the files. It works for some songs, but not for all of them. Any advices? ``

    merge to master 
    opened by Nathoufresh 6
  • lastfm plugin import failure

    lastfm plugin import failure

    I see this with eyeD3 version 0.8.8 under python 3.6.7

    eyed3.plugins:WARNING: Plugin '('lastfm.py', '/usr/local/lib/python3.6/dist-packages/eyed3/plugins')' requires packages that are not installed: cannot import name 'COVER_EXTRA_LARGE'

    Looks like it may be a fairly simple fix.

    This is from lastfm.py:

    from pylast import (COVER_EXTRA_LARGE, COVER_LARGE, COVER_MEDIUM, COVER_MEGA, COVER_SMALL)

    What is declared in pylast 3.0.0:

    SIZE_SMALL = 0 SIZE_MEDIUM = 1 SIZE_LARGE = 2 SIZE_EXTRA_LARGE = 3 SIZE_MEGA = 4

    task 
    opened by billsime 6
  • Update pytest to 4.0.0

    Update pytest to 4.0.0

    This PR updates pytest from 3.9.1 to 4.0.0.

    Changelog

    4.0.0

    =========================
    
    Removals
    --------
    
    - `3737 &lt;https://github.com/pytest-dev/pytest/issues/3737&gt;`_: **RemovedInPytest4Warnings are now errors by default.**
    
    Following our plan to remove deprecated features with as little disruption as
    possible, all warnings of type ``RemovedInPytest4Warnings`` now generate errors
    instead of warning messages.
    
    **The affected features will be effectively removed in pytest 4.1**, so please consult the
    `Deprecations and Removals &lt;https://docs.pytest.org/en/latest/deprecations.html&gt;`__
    section in the docs for directions on how to update existing code.
    
    In the pytest ``4.0.X`` series, it is possible to change the errors back into warnings as a stop
    gap measure by adding this to your ``pytest.ini`` file:
    
    .. code-block:: ini
    
       [pytest]
       filterwarnings =
           ignore::pytest.RemovedInPytest4Warning
    
    But this will stop working when pytest ``4.1`` is released.
    
    **If you have concerns** about the removal of a specific feature, please add a
    comment to `4348 &lt;https://github.com/pytest-dev/pytest/issues/4348&gt;`__.
    
    
    - `4358 &lt;https://github.com/pytest-dev/pytest/issues/4358&gt;`_: Remove the ``::()`` notation to denote a test class instance in node ids.
    
    Previously, node ids that contain test instances would use ``::()`` to denote the instance like this::
    
       test_foo.py::Test::()::test_bar
    
    The extra ``::()`` was puzzling to most users and has been removed, so that the test id becomes now::
    
       test_foo.py::Test::test_bar
    
    This change could not accompany a deprecation period as is usual when user-facing functionality changes because
    it was not really possible to detect when the functionality was being used explicitly.
    
    The extra ``::()`` might have been removed in some places internally already,
    which then led to confusion in places where it was expected, e.g. with
    ``--deselect`` (`4127 &lt;https://github.com/pytest-dev/pytest/issues/4127&gt;`_).
    
    Test class instances are also not listed with ``--collect-only`` anymore.
    
    
    
    Features
    --------
    
    - `4270 &lt;https://github.com/pytest-dev/pytest/issues/4270&gt;`_: The ``cache_dir`` option uses ``$TOX_ENV_DIR`` as prefix (if set in the environment).
    
    This uses a different cache per tox environment by default.
    
    
    
    Bug Fixes
    ---------
    
    - `3554 &lt;https://github.com/pytest-dev/pytest/issues/3554&gt;`_: Fix ``CallInfo.__repr__`` for when the call is not finished yet.
    

    3.10.1

    ==========================
    
    Bug Fixes
    ---------
    
    - `4287 &lt;https://github.com/pytest-dev/pytest/issues/4287&gt;`_: Fix nested usage of debugging plugin (pdb), e.g. with pytester&#39;s ``testdir.runpytest``.
    
    
    - `4304 &lt;https://github.com/pytest-dev/pytest/issues/4304&gt;`_: Block the ``stepwise`` plugin if ``cacheprovider`` is also blocked, as one depends on the other.
    
    
    - `4306 &lt;https://github.com/pytest-dev/pytest/issues/4306&gt;`_: Parse ``minversion`` as an actual version and not as dot-separated strings.
    
    
    - `4310 &lt;https://github.com/pytest-dev/pytest/issues/4310&gt;`_: Fix duplicate collection due to multiple args matching the same packages.
    
    
    - `4321 &lt;https://github.com/pytest-dev/pytest/issues/4321&gt;`_: Fix ``item.nodeid`` with resolved symlinks.
    
    
    - `4325 &lt;https://github.com/pytest-dev/pytest/issues/4325&gt;`_: Fix collection of direct symlinked files, where the target does not match ``python_files``.
    
    
    - `4329 &lt;https://github.com/pytest-dev/pytest/issues/4329&gt;`_: Fix TypeError in report_collect with _collect_report_last_write.
    
    
    
    Trivial/Internal Changes
    ------------------------
    
    - `4305 &lt;https://github.com/pytest-dev/pytest/issues/4305&gt;`_: Replace byte/unicode helpers in test_capture with python level syntax.
    

    3.10.0

    ==========================
    
    Features
    --------
    
    - `2619 &lt;https://github.com/pytest-dev/pytest/issues/2619&gt;`_: Resume capturing output after ``continue`` with ``__import__(&quot;pdb&quot;).set_trace()``.
    
    This also adds a new ``pytest_leave_pdb`` hook, and passes in ``pdb`` to the
    existing ``pytest_enter_pdb`` hook.
    
    
    - `4147 &lt;https://github.com/pytest-dev/pytest/issues/4147&gt;`_: Add ``--sw``, ``--stepwise`` as an alternative to ``--lf -x`` for stopping at the first failure, but starting the next test invocation from that test.  See `the documentation &lt;https://docs.pytest.org/en/latest/cache.htmlstepwise&gt;`__ for more info.
    
    
    - `4188 &lt;https://github.com/pytest-dev/pytest/issues/4188&gt;`_: Make ``--color`` emit colorful dots when not running in verbose mode. Earlier, it would only colorize the test-by-test output if ``--verbose`` was also passed.
    
    
    - `4225 &lt;https://github.com/pytest-dev/pytest/issues/4225&gt;`_: Improve performance with collection reporting in non-quiet mode with terminals.
    
    The &quot;collecting …&quot; message is only printed/updated every 0.5s.
    
    
    
    Bug Fixes
    ---------
    
    - `2701 &lt;https://github.com/pytest-dev/pytest/issues/2701&gt;`_: Fix false ``RemovedInPytest4Warning: usage of Session... is deprecated, please use pytest`` warnings.
    
    
    - `4046 &lt;https://github.com/pytest-dev/pytest/issues/4046&gt;`_: Fix problems with running tests in package ``__init__.py`` files.
    
    
    - `4260 &lt;https://github.com/pytest-dev/pytest/issues/4260&gt;`_: Swallow warnings during anonymous compilation of source.
    
    
    - `4262 &lt;https://github.com/pytest-dev/pytest/issues/4262&gt;`_: Fix access denied error when deleting stale directories created by ``tmpdir`` / ``tmp_path``.
    
    
    - `611 &lt;https://github.com/pytest-dev/pytest/issues/611&gt;`_: Naming a fixture ``request`` will now raise a warning: the ``request`` fixture is internal and
    should not be overwritten as it will lead to internal errors.
    
    - `4266 &lt;https://github.com/pytest-dev/pytest/issues/4266&gt;`_: Handle (ignore) exceptions raised during collection, e.g. with Django&#39;s LazySettings proxy class.
    
    
    
    Improved Documentation
    ----------------------
    
    - `4255 &lt;https://github.com/pytest-dev/pytest/issues/4255&gt;`_: Added missing documentation about the fact that module names passed to filter warnings are not regex-escaped.
    
    
    
    Trivial/Internal Changes
    ------------------------
    
    - `4272 &lt;https://github.com/pytest-dev/pytest/issues/4272&gt;`_: Display cachedir also in non-verbose mode if non-default.
    
    
    - `4277 &lt;https://github.com/pytest-dev/pytest/issues/4277&gt;`_: pdb: improve message about output capturing with ``set_trace``.
    
    Do not display &quot;IO-capturing turned off/on&quot; when ``-s`` is used to avoid
    confusion.
    
    
    - `4279 &lt;https://github.com/pytest-dev/pytest/issues/4279&gt;`_: Improve message and stack level of warnings issued by ``monkeypatch.setenv`` when the value of the environment variable is not a ``str``.
    

    3.9.3

    =========================
    
    Bug Fixes
    ---------
    
    - `4174 &lt;https://github.com/pytest-dev/pytest/issues/4174&gt;`_: Fix &quot;ValueError: Plugin already registered&quot; with conftest plugins via symlink.
    
    
    - `4181 &lt;https://github.com/pytest-dev/pytest/issues/4181&gt;`_: Handle race condition between creation and deletion of temporary folders.
    
    
    - `4221 &lt;https://github.com/pytest-dev/pytest/issues/4221&gt;`_: Fix bug where the warning summary at the end of the test session was not showing the test where the warning was originated.
    
    
    - `4243 &lt;https://github.com/pytest-dev/pytest/issues/4243&gt;`_: Fix regression when ``stacklevel`` for warnings was passed as positional argument on python2.
    
    
    
    Improved Documentation
    ----------------------
    
    - `3851 &lt;https://github.com/pytest-dev/pytest/issues/3851&gt;`_: Add reference to ``empty_parameter_set_mark`` ini option in documentation of ``pytest.mark.parametrize``
    
    
    
    Trivial/Internal Changes
    ------------------------
    
    - `4028 &lt;https://github.com/pytest-dev/pytest/issues/4028&gt;`_: Revert patching of ``sys.breakpointhook`` since it appears to do nothing.
    
    
    - `4233 &lt;https://github.com/pytest-dev/pytest/issues/4233&gt;`_: Apply an import sorter (``reorder-python-imports``) to the codebase.
    
    
    - `4248 &lt;https://github.com/pytest-dev/pytest/issues/4248&gt;`_: Remove use of unnecessary compat shim, six.binary_type
    

    3.9.2

    =========================
    
    Bug Fixes
    ---------
    
    - `2909 &lt;https://github.com/pytest-dev/pytest/issues/2909&gt;`_: Improve error message when a recursive dependency between fixtures is detected.
    
    
    - `3340 &lt;https://github.com/pytest-dev/pytest/issues/3340&gt;`_: Fix logging messages not shown in hooks ``pytest_sessionstart()`` and ``pytest_sessionfinish()``.
    
    
    - `3533 &lt;https://github.com/pytest-dev/pytest/issues/3533&gt;`_: Fix unescaped XML raw objects in JUnit report for skipped tests
    
    
    - `3691 &lt;https://github.com/pytest-dev/pytest/issues/3691&gt;`_: Python 2: safely format warning message about passing unicode strings to ``warnings.warn``, which may cause
    surprising ``MemoryError`` exception when monkey patching ``warnings.warn`` itself.
    
    
    - `4026 &lt;https://github.com/pytest-dev/pytest/issues/4026&gt;`_: Improve error message when it is not possible to determine a function&#39;s signature.
    
    
    - `4177 &lt;https://github.com/pytest-dev/pytest/issues/4177&gt;`_: Pin ``setuptools&gt;=40.0`` to support ``py_modules`` in ``setup.cfg``
    
    
    - `4179 &lt;https://github.com/pytest-dev/pytest/issues/4179&gt;`_: Restore the tmpdir behaviour of symlinking the current test run.
    
    
    - `4192 &lt;https://github.com/pytest-dev/pytest/issues/4192&gt;`_: Fix filename reported by ``warnings.warn`` when using ``recwarn`` under python2.
    
    Links
    • PyPI: https://pypi.org/project/pytest
    • Changelog: https://pyup.io/changelogs/pytest/
    • Homepage: https://docs.pytest.org/en/latest/
    opened by pyup-bot 6
  • Update pytest to 3.8.2

    Update pytest to 3.8.2

    This PR updates pytest from 3.8.1 to 3.8.2.

    Changelog

    3.8.2

    =========================
    
    Deprecations and Removals
    -------------------------
    
    - `4036 &lt;https://github.com/pytest-dev/pytest/issues/4036&gt;`_: The ``item`` parameter of ``pytest_warning_captured`` hook is now documented as deprecated. We realized only after
    the ``3.8`` release that this parameter is incompatible with ``pytest-xdist``.
    
    Our policy is to not deprecate features during bugfix releases, but in this case we believe it makes sense as we are
    only documenting it as deprecated, without issuing warnings which might potentially break test suites. This will get
    the word out that hook implementers should not use this parameter at all.
    
    In a future release ``item`` will always be ``None`` and will emit a proper warning when a hook implementation
    makes use of it.
    
    
    
    Bug Fixes
    ---------
    
    - `3539 &lt;https://github.com/pytest-dev/pytest/issues/3539&gt;`_: Fix reload on assertion rewritten modules.
    
    
    - `4034 &lt;https://github.com/pytest-dev/pytest/issues/4034&gt;`_: The ``.user_properties`` attribute of ``TestReport`` objects is a list
    of (name, value) tuples, but could sometimes be instantiated as a tuple
    of tuples.  It is now always a list.
    
    
    - `4039 &lt;https://github.com/pytest-dev/pytest/issues/4039&gt;`_: No longer issue warnings about using ``pytest_plugins`` in non-top-level directories when using ``--pyargs``: the
    current ``--pyargs`` mechanism is not reliable and might give false negatives.
    
    
    - `4040 &lt;https://github.com/pytest-dev/pytest/issues/4040&gt;`_: Exclude empty reports for passed tests when ``-rP`` option is used.
    
    
    - `4051 &lt;https://github.com/pytest-dev/pytest/issues/4051&gt;`_: Improve error message when an invalid Python expression is passed to the ``-m`` option.
    
    
    - `4056 &lt;https://github.com/pytest-dev/pytest/issues/4056&gt;`_: ``MonkeyPatch.setenv`` and ``MonkeyPatch.delenv`` issue a warning if the environment variable name is not ``str`` on Python 2.
    
    In Python 2, adding ``unicode`` keys to ``os.environ`` causes problems with ``subprocess`` (and possible other modules),
    making this a subtle bug specially susceptible when used with ``from __future__ import unicode_literals``.
    
    
    
    Improved Documentation
    ----------------------
    
    - `3928 &lt;https://github.com/pytest-dev/pytest/issues/3928&gt;`_: Add possible values for fixture scope to docs.
    
    Links
    • PyPI: https://pypi.org/project/pytest
    • Changelog: https://pyup.io/changelogs/pytest/
    • Homepage: https://docs.pytest.org/en/latest/
    opened by pyup-bot 6
  • WARNING:eyed3.id3.frames:Frame 'IPLS' is not yet supported, using raw Frame to parse

    WARNING:eyed3.id3.frames:Frame 'IPLS' is not yet supported, using raw Frame to parse

    I'm getting these warnings with newer MP3s (purchased from eMusic). I'm using eyeD3 inside this Github app: https://github.com/gboysko/shuffle-db which invokes the load API.

    Some files have this warning as well:

    WARNING:eyed3.core:Invalid date: 0707
    

    I'm wondering if these this frame (IPLS) will be supported soon and whether it prevents a load from succeeding. Further, I'm not sure the date warning is being reported properly. For example, if I list the file on the command line, I see:

    eyed3.id3.tag:WARNING: Invalid v2.3 TYER, TDAT, or TIME frame: Invalid date string: 2017--
    
    opened by gboysko 6
  • Character Encoding Probems

    Character Encoding Probems

    Description / Reproduce Bug

    • Attempting to write tags with ISO Latin-1 characters resulted in an unhanded exception.
    • This bug can easily be reproduced with any mp3 to write tags to, using the offending character as an arguement. For example: $eyeD3 --debug -t "title" -a "友 & 愛" ~/Desktop/testfile.mp3

    Setup Information

    • Operating System: Debian Jessie (8)
    • eyeD3 Version: eyeD3 0.6.18
    • Python Versions: 2.7.9 and 3.4.2

    Log/Stacktrace

    From the moment the bug was caught

    SERVICE_AREA-.mp3	[ 2.22 MB ]
    -------------------------------------------------------------------------------
    Time: 06:30	MPEG1, Layer III	[ 48 kb/s @ 44100 Hz - Stereo ]
    -------------------------------------------------------------------------------
    Setting artist: 友 & 愛
    Setting title: Service Area
    Writing tag...
    Uncaught exception: 'latin-1' codec can't encode character u'\u53cb' in position 0: ordinal not in range(256)
    Traceback (most recent call last):
      File "/usr/bin/eyeD3", line 1265, in <module>
        retval = main();
      File "/usr/bin/eyeD3", line 1242, in main
        retval = app.handleFile(f);
      File "/usr/bin/eyeD3", line 559, in handleFile
        if not self.tag.update():
      File "/usr/lib/python2.7/dist-packages/eyeD3/tag.py", line 526, in update
        self.__saveV2Tag(version);
      File "/usr/lib/python2.7/dist-packages/eyeD3/tag.py", line 1251, in __saveV2Tag
        raw_frame = f.render();
      File "/usr/lib/python2.7/dist-packages/eyeD3/frames.py", line 756, in render
        self.text.encode(id3EncodingToString(self.encoding));
    UnicodeEncodeError: 'latin-1' codec can't encode character u'\u53cb' in position 0: ordinal not in range(256)
    

    Traced Execution Log:

    Command: $ eyeD3 --debug -t "title" -a "友 & 愛" ~/Desktop/testfile.mp3

    testfile.mp3	[ 2.22 MB ]
    -------------------------------------------------------------------------------
    eyeD3 trace> Linking File: /home/reprise/Desktop/testfile.mp3
    eyeD3 trace> Located ID3 v2 tag
    eyeD3 trace> TagHeader [major]: 2
    eyeD3 trace> TagHeader [minor]: 4
    eyeD3 trace> TagHeader [revis]: 0
    eyeD3 trace> TagHeader [flags]: unsync(0) extended(0) experimental(0) footer(0)
    eyeD3 trace> TagHeader [size string]: 0x00000118
    eyeD3 trace> TagHeader [size]: 152 (0x98)
    eyeD3 trace> sizeLeft: 152
    eyeD3 trace> +++++++++++++++++++++++++++++++++++++++++++++++++
    eyeD3 trace> FrameSet: Reading Frame #1
    eyeD3 trace> FrameHeader [start byte]: 10 (0xA)
    eyeD3 trace> FrameHeader [id]: TXXX (0x54585858)
    eyeD3 trace> FrameHeader [data size]: 18 (0x12)
    eyeD3 trace> FrameHeader [flags]: ta(0) fa(0) ro(0) co(0) en(0) gr(0) un(0) dl(0)
    eyeD3 trace> FrameSet: Reading 18 (0x12) bytes of data from byte pos 20 (0x14)
    eyeD3 trace> FrameSet: 18 bytes of data read
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: major_brand
    eyeD3 trace> UserTextFrame text: isom
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: major_brand
    eyeD3 trace> UserTextFrame text: isom
    eyeD3 trace> sizeLeft: 124
    eyeD3 trace> +++++++++++++++++++++++++++++++++++++++++++++++++
    eyeD3 trace> FrameSet: Reading Frame #2
    eyeD3 trace> FrameHeader [start byte]: 38 (0x26)
    eyeD3 trace> FrameHeader [id]: TXXX (0x54585858)
    eyeD3 trace> FrameHeader [data size]: 19 (0x13)
    eyeD3 trace> FrameHeader [flags]: ta(0) fa(0) ro(0) co(0) en(0) gr(0) un(0) dl(0)
    eyeD3 trace> FrameSet: Reading 19 (0x13) bytes of data from byte pos 48 (0x30)
    eyeD3 trace> FrameSet: 19 bytes of data read
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: minor_version
    eyeD3 trace> UserTextFrame text: 512
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: minor_version
    eyeD3 trace> UserTextFrame text: 512
    eyeD3 trace> sizeLeft: 95
    eyeD3 trace> +++++++++++++++++++++++++++++++++++++++++++++++++
    eyeD3 trace> FrameSet: Reading Frame #3
    eyeD3 trace> FrameHeader [start byte]: 67 (0x43)
    eyeD3 trace> FrameHeader [id]: TXXX (0x54585858)
    eyeD3 trace> FrameHeader [data size]: 32 (0x20)
    eyeD3 trace> FrameHeader [flags]: ta(0) fa(0) ro(0) co(0) en(0) gr(0) un(0) dl(0)
    eyeD3 trace> FrameSet: Reading 32 (0x20) bytes of data from byte pos 77 (0x4D)
    eyeD3 trace> FrameSet: 32 bytes of data read
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: compatible_brands
    eyeD3 trace> UserTextFrame text: isomiso2mp41
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: compatible_brands
    eyeD3 trace> UserTextFrame text: isomiso2mp41
    eyeD3 trace> sizeLeft: 53
    eyeD3 trace> +++++++++++++++++++++++++++++++++++++++++++++++++
    eyeD3 trace> FrameSet: Reading Frame #4
    eyeD3 trace> FrameHeader [start byte]: 109 (0x6D)
    eyeD3 trace> FrameHeader [id]: TDEN (0x5444454e)
    eyeD3 trace> FrameHeader [data size]: 21 (0x15)
    eyeD3 trace> FrameHeader [flags]: ta(0) fa(0) ro(0) co(0) en(0) gr(0) un(0) dl(0)
    eyeD3 trace> FrameSet: Reading 21 (0x15) bytes of data from byte pos 119 (0x77)
    eyeD3 trace> FrameSet: 21 bytes of data read
    eyeD3 trace> TextFrame encoding: utf_8
    eyeD3 trace> TextFrame text: 2018-03-13 06:42:01
    eyeD3 trace> TextFrame encoding: utf_8
    eyeD3 trace> TextFrame text: 2018-03-13 06:42:01
    eyeD3 trace> sizeLeft: 22
    eyeD3 trace> +++++++++++++++++++++++++++++++++++++++++++++++++
    eyeD3 trace> FrameSet: Reading Frame #5
    eyeD3 trace> FrameHeader [start byte]: 140 (0x8C)
    eyeD3 trace> FrameHeader [id]: TSSE (0x54535345)
    eyeD3 trace> FrameHeader [data size]: 12 (0xC)
    eyeD3 trace> FrameHeader [flags]: ta(0) fa(0) ro(0) co(0) en(0) gr(0) un(0) dl(0)
    eyeD3 trace> FrameSet: Reading 12 (0xC) bytes of data from byte pos 150 (0x96)
    eyeD3 trace> FrameSet: 12 bytes of data read
    eyeD3 trace> TextFrame encoding: utf_8
    eyeD3 trace> TextFrame text: Lavf56.1.0
    eyeD3 trace> Tag contains 0 bytes of padding.
    eyeD3 trace> mp3 header search starting @ a2
    eyeD3 trace> MPEG audio version: 1.0
    eyeD3 trace> MPEG audio layer: III
    eyeD3 trace> MPEG sampling frequency: 44100
    eyeD3 trace> MPEG bit rate: 48
    eyeD3 trace> MPEG channel mode: Stereo
    eyeD3 trace> MPEG channel mode extension: 0
    eyeD3 trace> MPEG CRC error protection: False
    eyeD3 trace> MPEG original: 0
    eyeD3 trace> MPEG copyright: 0
    eyeD3 trace> MPEG private bit: 0
    eyeD3 trace> MPEG padding: 0
    eyeD3 trace> MPEG emphasis: None
    eyeD3 trace> MPEG frame length: 156
    eyeD3 trace> mp3 header fffb3000 found at position: 0xa2
    eyeD3 trace> Info header detected @ 24
    eyeD3 trace> Info header flags: 0x7
    eyeD3 trace> Info numFrames: 5580
    eyeD3 trace> Info numBytes: 2332368
    eyeD3 trace> Info TOC (100 bytes): PRESENT
    Time: 06:30	MPEG1, Layer III	[ 48 kb/s @ 44100 Hz - Stereo ]
    -------------------------------------------------------------------------------
    Setting artist: 友 & 愛
    Setting title: title
    Writing tag...
    eyeD3 trace> Rendering tag version: v2.4
    eyeD3 trace> Linking File: /home/reprise/Desktop/testfile.mp3
    eyeD3 trace> Located ID3 v2 tag
    eyeD3 trace> TagHeader [major]: 2
    eyeD3 trace> TagHeader [minor]: 4
    eyeD3 trace> TagHeader [revis]: 0
    eyeD3 trace> TagHeader [flags]: unsync(0) extended(0) experimental(0) footer(0)
    eyeD3 trace> TagHeader [size string]: 0x00000118
    eyeD3 trace> TagHeader [size]: 152 (0x98)
    eyeD3 trace> sizeLeft: 152
    eyeD3 trace> +++++++++++++++++++++++++++++++++++++++++++++++++
    eyeD3 trace> FrameSet: Reading Frame #1
    eyeD3 trace> FrameHeader [start byte]: 10 (0xA)
    eyeD3 trace> FrameHeader [id]: TXXX (0x54585858)
    eyeD3 trace> FrameHeader [data size]: 18 (0x12)
    eyeD3 trace> FrameHeader [flags]: ta(0) fa(0) ro(0) co(0) en(0) gr(0) un(0) dl(0)
    eyeD3 trace> FrameSet: Reading 18 (0x12) bytes of data from byte pos 20 (0x14)
    eyeD3 trace> FrameSet: 18 bytes of data read
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: major_brand
    eyeD3 trace> UserTextFrame text: isom
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: major_brand
    eyeD3 trace> UserTextFrame text: isom
    eyeD3 trace> sizeLeft: 124
    eyeD3 trace> +++++++++++++++++++++++++++++++++++++++++++++++++
    eyeD3 trace> FrameSet: Reading Frame #2
    eyeD3 trace> FrameHeader [start byte]: 38 (0x26)
    eyeD3 trace> FrameHeader [id]: TXXX (0x54585858)
    eyeD3 trace> FrameHeader [data size]: 19 (0x13)
    eyeD3 trace> FrameHeader [flags]: ta(0) fa(0) ro(0) co(0) en(0) gr(0) un(0) dl(0)
    eyeD3 trace> FrameSet: Reading 19 (0x13) bytes of data from byte pos 48 (0x30)
    eyeD3 trace> FrameSet: 19 bytes of data read
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: minor_version
    eyeD3 trace> UserTextFrame text: 512
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: minor_version
    eyeD3 trace> UserTextFrame text: 512
    eyeD3 trace> sizeLeft: 95
    eyeD3 trace> +++++++++++++++++++++++++++++++++++++++++++++++++
    eyeD3 trace> FrameSet: Reading Frame #3
    eyeD3 trace> FrameHeader [start byte]: 67 (0x43)
    eyeD3 trace> FrameHeader [id]: TXXX (0x54585858)
    eyeD3 trace> FrameHeader [data size]: 32 (0x20)
    eyeD3 trace> FrameHeader [flags]: ta(0) fa(0) ro(0) co(0) en(0) gr(0) un(0) dl(0)
    eyeD3 trace> FrameSet: Reading 32 (0x20) bytes of data from byte pos 77 (0x4D)
    eyeD3 trace> FrameSet: 32 bytes of data read
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: compatible_brands
    eyeD3 trace> UserTextFrame text: isomiso2mp41
    eyeD3 trace> UserTextFrame encoding: utf_8
    eyeD3 trace> UserTextFrame description: compatible_brands
    eyeD3 trace> UserTextFrame text: isomiso2mp41
    eyeD3 trace> sizeLeft: 53
    eyeD3 trace> +++++++++++++++++++++++++++++++++++++++++++++++++
    eyeD3 trace> FrameSet: Reading Frame #4
    eyeD3 trace> FrameHeader [start byte]: 109 (0x6D)
    eyeD3 trace> FrameHeader [id]: TDEN (0x5444454e)
    eyeD3 trace> FrameHeader [data size]: 21 (0x15)
    eyeD3 trace> FrameHeader [flags]: ta(0) fa(0) ro(0) co(0) en(0) gr(0) un(0) dl(0)
    eyeD3 trace> FrameSet: Reading 21 (0x15) bytes of data from byte pos 119 (0x77)
    eyeD3 trace> FrameSet: 21 bytes of data read
    eyeD3 trace> TextFrame encoding: utf_8
    eyeD3 trace> TextFrame text: 2018-03-13 06:42:01
    eyeD3 trace> TextFrame encoding: utf_8
    eyeD3 trace> TextFrame text: 2018-03-13 06:42:01
    eyeD3 trace> sizeLeft: 22
    eyeD3 trace> +++++++++++++++++++++++++++++++++++++++++++++++++
    eyeD3 trace> FrameSet: Reading Frame #5
    eyeD3 trace> FrameHeader [start byte]: 140 (0x8C)
    eyeD3 trace> FrameHeader [id]: TSSE (0x54535345)
    eyeD3 trace> FrameHeader [data size]: 12 (0xC)
    eyeD3 trace> FrameHeader [flags]: ta(0) fa(0) ro(0) co(0) en(0) gr(0) un(0) dl(0)
    eyeD3 trace> FrameSet: Reading 12 (0xC) bytes of data from byte pos 150 (0x96)
    eyeD3 trace> FrameSet: 12 bytes of data read
    eyeD3 trace> TextFrame encoding: utf_8
    eyeD3 trace> TextFrame text: Lavf56.1.0
    eyeD3 trace> Tag contains 0 bytes of padding.
    eyeD3 trace> Found current v2.x tag:
    eyeD3 trace> Current tag size: 152
    eyeD3 trace> Current tag padding: 0
    eyeD3 trace> Rendering frame: TXXX
    eyeD3 trace> Rendered 27 bytes
    eyeD3 trace> Rendering frame: TXXX
    eyeD3 trace> Rendered 28 bytes
    eyeD3 trace> Rendering frame: TXXX
    eyeD3 trace> Rendered 41 bytes
    eyeD3 trace> Rendering frame: TDEN
    eyeD3 trace> Rendered 11 bytes
    eyeD3 trace> Rendering frame: TSSE
    eyeD3 trace> Rendered 21 bytes
    eyeD3 trace> Rendering frame: TPE1
    Uncaught exception: 'latin-1' codec can't encode character u'\u53cb' in position 0: ordinal not in range(256)
    Traceback (most recent call last):
      File "/usr/bin/eyeD3", line 1265, in <module>
        retval = main();
      File "/usr/bin/eyeD3", line 1242, in main
        retval = app.handleFile(f);
      File "/usr/bin/eyeD3", line 559, in handleFile
        if not self.tag.update():
      File "/usr/lib/python2.7/dist-packages/eyeD3/tag.py", line 526, in update
        self.__saveV2Tag(version);
      File "/usr/lib/python2.7/dist-packages/eyeD3/tag.py", line 1251, in __saveV2Tag
        raw_frame = f.render();
      File "/usr/lib/python2.7/dist-packages/eyeD3/frames.py", line 756, in render
        self.text.encode(id3EncodingToString(self.encoding));
    UnicodeEncodeError: 'latin-1' codec can't encode character u'\u53cb' in position 0: ordinal not in range(256)
    

    Other notes

    This could be an umbrella issue for other open issues about Characters like #195 with accented e's. I believe the offending characters in My particular issue here are the characters 友 and/or 愛.

    opened by reprise5 6
  • build(deps): bump certifi from 2022.9.24 to 2022.12.7

    build(deps): bump certifi from 2022.9.24 to 2022.12.7

    Bumps certifi from 2022.9.24 to 2022.12.7.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Unable to set image via URL when using tag.

    Unable to set image via URL when using tag.

    When editing files with EYED3 tag and attempting to set a image for the MP3 file it doesn't do anything, no errors and no result. audiofile.tag.images.set(type_ = 3, img_data = None, mime_type = None, description = "Album Artwork", img_url = searchResult['art']) (Where audiofile = an eyed3 loaded audio file)

    Here is the line of code I'm using, URL is a valid image.

    Thanks

    opened by sirnoob-1 0
  • build(deps): bump pillow from 9.2.0 to 9.3.0

    build(deps): bump pillow from 9.2.0 to 9.3.0

    Bumps pillow from 9.2.0 to 9.3.0.

    Release notes

    Sourced from pillow's releases.

    9.3.0

    https://pillow.readthedocs.io/en/stable/releasenotes/9.3.0.html

    Changes

    ... (truncated)

    Changelog

    Sourced from pillow's changelog.

    9.3.0 (2022-10-29)

    • Limit SAMPLESPERPIXEL to avoid runtime DOS #6700 [wiredfool]

    • Initialize libtiff buffer when saving #6699 [radarhere]

    • Inline fname2char to fix memory leak #6329 [nulano]

    • Fix memory leaks related to text features #6330 [nulano]

    • Use double quotes for version check on old CPython on Windows #6695 [hugovk]

    • Remove backup implementation of Round for Windows platforms #6693 [cgohlke]

    • Fixed set_variation_by_name offset #6445 [radarhere]

    • Fix malloc in _imagingft.c:font_setvaraxes #6690 [cgohlke]

    • Release Python GIL when converting images using matrix operations #6418 [hmaarrfk]

    • Added ExifTags enums #6630 [radarhere]

    • Do not modify previous frame when calculating delta in PNG #6683 [radarhere]

    • Added support for reading BMP images with RLE4 compression #6674 [npjg, radarhere]

    • Decode JPEG compressed BLP1 data in original mode #6678 [radarhere]

    • Added GPS TIFF tag info #6661 [radarhere]

    • Added conversion between RGB/RGBA/RGBX and LAB #6647 [radarhere]

    • Do not attempt normalization if mode is already normal #6644 [radarhere]

    ... (truncated)

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Documentation not updated since 0.9.4

    Documentation not updated since 0.9.4

    Guessing this is a known thing, but when I look at the docs here:

    https://eyed3.readthedocs.io/en/latest/history.html

    The latest info is posted for version 0.9.4, while the latest info in the HISTORY.rst file is 0.9.7 (which matches with pypi).

    I don't publish to RTD, but does somebody need to just push the latest info, maybe?

    opened by mlissner 0
  • Use poetry-core build backend

    Use poetry-core build backend

    Replace the deprecated poetry.masonry.api build backend with the more modern poetry.core.masonry.api that avoids unnecessarily installing whole poetry when building wheels. The rationale is provided on the project page: https://pypi.org/project/poetry-core/

    opened by mgorny 0
Releases(v0.9.6)
A python program to cut longer MP3 files (i.e. recordings of several songs) into the individual tracks.

I'm writing a python script to cut longer MP3 files (i.e. recordings of several songs) into the individual tracks called ReCut. So far there are two

Dönerspiess 1 Oct 27, 2021
A python script that can play .mp3 URLs upon the ringing or motion detection of a Ring doorbell. The sound plays through Sonos speakers.

Ring x Sonos A python script that plays .mp3 files whenever a doorbell is rung or a doorbell detects motion. Features Music! Authors @braden Running T

braden 0 Nov 12, 2021
Read music meta data and length of MP3, OGG, OPUS, MP4, M4A, FLAC, WMA and Wave files with python 2 or 3

tinytag tinytag is a library for reading music meta data of MP3, OGG, OPUS, MP4, M4A, FLAC, WMA and Wave files with python Install pip install tinytag

Tom Wallroth 577 Dec 26, 2022
Read music meta data and length of MP3, OGG, OPUS, MP4, M4A, FLAC, WMA and Wave files with python 2 or 3

tinytag tinytag is a library for reading music meta data of MP3, OGG, OPUS, MP4, M4A, FLAC, WMA and Wave files with python Install pip install tinytag

Tom Wallroth 435 Feb 17, 2021
python script for getting mp3 files from yaoutube playlist

mp3-from-youtube-playlist python script for getting mp3 files from youtube playlist. Do your non-tech brown relatives ask you for downloading music fr

Shuhan Mirza 7 Oct 19, 2022
Library for working with sound files of the format: .ogg, .mp3, .wav

Library for working with sound files of the format: .ogg, .mp3, .wav. By work is meant - playing sound files in a straight line and in the background, obtaining information about the sound file (author, performer, duration, bitrate, and so on). Playing goes through the pygame, and getting information through the mutagen.

Romanin 2 Dec 15, 2022
An app made in Python using the PyTube and Tkinter libraries to download videos and MP3 audio.

yt-dl (GUI Edition) An app made in Python using the PyTube and Tkinter libraries to download videos and MP3 audio. How do I download this? Windows: Fi

null 1 Oct 23, 2021
Improved Python UI to convert Youtube URL to .mp3 file.

YT-MP3 Improved Python UI to convert Youtube URL to .mp3 file. How to use? Just run python3 main.py Enter the URL of the video Enter the PATH of where

null 8 Jun 19, 2022
Synchronize a local directory of songs' (MP3, MP4) metadata (genre, ratings) and playlists with a Plex server.

PlexMusicSync Synchronize a local directory of songs' (MP3, MP4) metadata (genre, ratings) and playlists (m3u, m3u8) with a Plex server. The song file

Tom Goetz 9 Jul 7, 2022
Extract the songs from your osu! libary into proper mp3 form, complete with metadata and album art!

osu-Extract Extract the songs from your osu! libary into proper mp3 form, complete with metadata and album art! Requirements python3 mutagen pillow Us

William Carter 2 Mar 9, 2022
A GUI-based audio player with support for a large variety of formats

Miza-Player A GUI-based audio player with support for a large variety of formats, able to play from web-hosted media platforms such as YouTube, includ

Thomas Xin 3 Dec 14, 2022
Analysis of voices based on the Mel-frequency band

Speaker_partition_module Analysis of voices based on the Mel-frequency band. Goal: Identification of voices speaking (diarization) and calculation of

null 1 Feb 6, 2022
Real-time audio visualizations (spectrum, spectrogram, etc.)

Friture Friture is an application to visualize and analyze live audio data in real-time. Friture displays audio data in several widgets, such as a sco

Timothée Lecomte 700 Dec 31, 2022
Royal Music You can play music and video at a time in vc

Royals-Music Royal Music You can play music and video at a time in vc Commands SOON String STRING_SESSION Deployment ?? Credits • ??ᴏᴍʏᴀ⃝??ᴇᴇᴛ • ??ғғɪ

null 2 Nov 23, 2021
Minimal command-line music player written in Python

pyms Minimal command-line music player written in Python. Designed with elegance and minimalism. Resizes dynamically with your terminal. Dependencies

null 12 Sep 23, 2022
A python program for visualizing MIDI files, and displaying them in a spiral layout

SpiralMusic_python A python program for visualizing MIDI files, and displaying them in a spiral layout For a hardware version using Teensy & LED displ

Gavin 6 Nov 23, 2022
convert-to-opus-cli is a Python CLI program for converting audio files to opus audio format.

convert-to-opus-cli convert-to-opus-cli is a Python CLI program for converting audio files to opus audio format. Installation Must have installed ffmp

null 4 Dec 21, 2022
voice assistant made with python that search for covid19 data(like total cases, deaths and etc) in a specific country

covid19-voice-assistant voice assistant made with python that search for covid19 data(like total cases, deaths and etc) in a specific country installi

Miguel 2 Dec 5, 2021
This is an AI that runs in the terminal. It is a voice assistant that can do common activities and can also help in your coding doubts like

This is an AI that runs in the terminal. It is a voice assistant that can do common activities and can also help in your coding doubts like

OneBit 1 Nov 5, 2021