{ "info": { "author": "strangedev", "author_email": "strangedev@posteo.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: MacOS", "Operating System :: POSIX", "Operating System :: Unix", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3 :: Only", "Topic :: Multimedia :: Sound/Audio", "Topic :: Multimedia :: Sound/Audio :: Players", "Topic :: Software Development :: Libraries" ], "description": "========\ntinnitus\n========\n:Info: See .\n:Author: Noah Hummel \n:Date: $Date: 2017-02-21 01:10:53 +0000 (Tue, 21 Feb 2017) $\n:Revision: $Revision: 3 $\n\n.. image:: https://badge.fury.io/py/tinnitus.svg\n :target: https://badge.fury.io/py/tinnitus\n\nTinnitus is a media player and playback queue.\n\nIt comes in two parts, service and remote. Once the *tinnitusd* service is running, the Python remote can be used to\nmanipulate the queue and control playback. *tinnitusd* uses pluggable backends, which makes it easy to extend.\nTinnitus is *thread-safe*, meaning it can be accessed by any number of remotes at once.\n\n.. NOTE::\n\n Please report any bugs over at \n\nRunning the service\n^^^^^^^^^^^^^^^^^^^\nAfter installing tinnitus, you can start the service with::\n\n tinnitusd [port]\n\n``port`` is an optional parameter, by default, tinnitus runs on port 18861.\n\nIf you've installed tinnitus to a *virtualenv*, make sure to activate it first.\n\nRemote\n^^^^^^\nTo use the remote in your own project, install tinnitus to the same environment you're developing your project in.\n\nYou can then use the remote with the contextmanager protocol:\n\n.. code:: python\n\n from tinnitus import remote\n\n with remote() as r:\n print(r.status())\n\nYou can also configure the remote to use a different network configuration:\n\n.. code:: python\n\n import tinnitus\n\n tinnitus.configure(host=\"localhost\", port=1337)\n\nSupported actions are:\n\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Adds an audio resource to the queue. |\n| | |\n| | ``resource_id`` is an int identifying each resource unqiuely. |\n| | |\n| r.add(resource_id, mrl, backend) | ``mrl`` is a str containing the resource's location (and protocol) |\n| | |\n| | ``backend`` is the name of the backend which should handle the resource |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Removes an audio resource from the queue. |\n| | |\n| | ``resource_id`` is an int identifying each resource unqiuely. |\n| | |\n| r.remove(resource_id) | |\n| | |\n| | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Removes all resources from the queue. |\n| | |\n| r.clear() | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Returns the ``resource_id`` of the currently playing resource. |\n| | |\n| r.current() | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Returns the ``resource_id`` s of all queued resources as a list. |\n| | |\n| r.queue() | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Starts playback, if the backend is paused or stopped. |\n| | |\n| r.play() | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Pauses playback, if the backend is playing. |\n| | |\n| r.pause() | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Stops playback, if the backend is playing or stopped. |\n| | |\n| r.stop() | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Skips forward to the next queued resource and starts playing. |\n| | |\n| r.play_next() | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Returns the backend's status as either PLAYING, PAUSED or STOPPED. |\n| | |\n| r.status() | The Status enum is defined in ``tinnitus.Status`` |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Returns a boolean indicating whether the resource specified by ``mrl`` |\n| | is available for playback with the specified backend. |\n| | |\n| | Note: This method does not indicate whether the backend is appropriate |\n| r.available(mrl, backend) | for the resource. |\n| | |\n| | Note: This feature is optional, the remote may return NotImplemented if |\n| | it is not supported by the backend. |\n+------------------------------------------+---------------------------------------------------------------------------+\n\nPluggable backends\n^^^^^^^^^^^^^^^^^^\n\nPlayback is handled by pluggable backends. Plugins are Python scripts and can be located anywhere.\n\nTinnitus by default comes with a simple backend using libvlc. It is both versatile and serves as an example\nfor the plugin structure.\n\nIn order to create a plugin called ``my_backend``, follow these steps:\n\nIf you haven't set up a plugin directory before or want to create a separate one:\n\n#. Create a plugin directory anywhere on your system, for example ``~/tinnitus_plugins/`` .\n#. Use the included ``tinnitus-include`` command to point tinnitusd to your directory:\n\n.. code:: bash\n\n tinnitus-include add ~/tinnitus_plugins\n\nYou can use any number of plugin directories. To list all used plugin directories, use:\n\n.. code:: bash\n\n tinnitus-include list\n\nTo remove a plugin directory, for example ``~/tinnitus_plugins/``, from tinnitusd, use:\n\n.. code:: bash\n\n tinnitus-include rem ~/tinnitus_plugins\n\nIf you've created a plugin directory as described above, you can then create a file named ``my_backend.py``\ninside your plugin directory.\n\nYour plugin should expose the following methods, for it to be recognized by the service:\n\n\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Called before the plugin is used for the first time. |\n| | |\n| | Use this method to perform any initialisation, if needed. |\n| | |\n| init(callback) | ``callback`` is a method which your plugin should call once a resource |\n| | has reached it's end, save it somewhere. |\n| | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Called when a resource is loaded for playback. It passes the resources |\n| | to your plugin so that your plugin can perform any setup needed to play |\n| | the resource with the given mrl. |\n| | |\n| | |\n| set_mrl(mrl) | ``mrl`` is the resources location (and protocol) |\n| | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Called when your plugin should start playing the resource given by |\n| | ``set_mrl``. |\n| | |\n| | Note: The method should be non-blocking. |\n| | |\n| play() | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Called when your plugin should pause playback of the resource. |\n| | |\n| | |\n| | Note: The method should be non-blocking. |\n| | |\n| pause() | |\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Called when your plugin should stop playback of the resource. |\n| | |\n| | |\n| | Note: The method should be non-blocking. |\n| | |\n| stop() | |\n+------------------------------------------+---------------------------------------------------------------------------+\n\nYour plugin may also optionally expose any of these methods, to support more remote features:\n\n+------------------------------------------+---------------------------------------------------------------------------+\n| .. code:: python | Returns a boolean indicating whether the resource specified by ``mrl`` |\n| | is available for playback. For example, if ``mrl`` points to a local |\n| | file, your plugin should check if the local file exits. |\n| | |\n| | This feature is exposed as remote.available(). If your plugin doesn't |\n| available(mrl, backend) | implement this method, the return value will default to NotImplemented. |\n+------------------------------------------+---------------------------------------------------------------------------+", "description_content_type": null, "docs_url": null, "download_url": "https://github.com/strangedev/tinnitus/tarball/0.1.5", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/strangedev/tinnitus", "keywords": "tinnitus audio playback background service", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "tinnitus", "package_url": "https://pypi.org/project/tinnitus/", "platform": "", "project_url": "https://pypi.org/project/tinnitus/", "project_urls": { "Download": "https://github.com/strangedev/tinnitus/tarball/0.1.5", "Homepage": "https://github.com/strangedev/tinnitus" }, "release_url": "https://pypi.org/project/tinnitus/0.1.5/", "requires_dist": null, "requires_python": "", "summary": "A pluggable playback queue service", "version": "0.1.5" }, "last_serial": 2664915, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "b7e01e67e3ca80219e62046ff7d9a799", "sha256": "9941ba9dbc3fefb6da9b59f58f60e8009c90eefe285a6afa4b9c6ebde10000a9" }, "downloads": -1, "filename": "tinnitus-0.1.tar.gz", "has_sig": false, "md5_digest": "b7e01e67e3ca80219e62046ff7d9a799", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6585, "upload_time": "2017-02-21T17:35:08", "url": "https://files.pythonhosted.org/packages/2b/38/9f0d2cce3b9e9dc0acfeb3ae2e09c1fa91e4a0fe26c144dfb62c015c39f4/tinnitus-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "970cf16f766fc7937e4744ee67db6d0d", "sha256": "1f3f822d36aa9270d539eed86b91ed31f2b018da95f8289344b1aeb40cbf21bb" }, "downloads": -1, "filename": "tinnitus-0.1.1.tar.gz", "has_sig": false, "md5_digest": "970cf16f766fc7937e4744ee67db6d0d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6539, "upload_time": "2017-02-21T18:23:29", "url": "https://files.pythonhosted.org/packages/d9/5f/4ec82098feae3fbb975877f94d9b156dff0f8085f97b2a440b10d776a911/tinnitus-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "98e14b2b14edadcf9b6f9b23cd1046f4", "sha256": "2d3a0a32f4016f3225d25b1e9ba52a4d423e77d2682e90a76c28b48d23dbc2f6" }, "downloads": -1, "filename": "tinnitus-0.1.2.tar.gz", "has_sig": false, "md5_digest": "98e14b2b14edadcf9b6f9b23cd1046f4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7446, "upload_time": "2017-02-22T09:37:28", "url": "https://files.pythonhosted.org/packages/35/21/6a16a5ba97acc4268b81ce47299b4c91f72c0e3ad7adb638a56909aa2169/tinnitus-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "62f6ce4ce177688e6d9e8326d6b716e6", "sha256": "e2a55a9fc0fcf57563e82545fb62c719320d6aa0b556559d3517815db3835d56" }, "downloads": -1, "filename": "tinnitus-0.1.3.tar.gz", "has_sig": false, "md5_digest": "62f6ce4ce177688e6d9e8326d6b716e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8013, "upload_time": "2017-02-22T19:55:00", "url": "https://files.pythonhosted.org/packages/75/70/b6a20c39f6e93a1f4f5f0d8f2b84761fe46492d3440dc8d6b303d797cb8f/tinnitus-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "f72be90e5f61ca0ce9c4ff300378a577", "sha256": "67075a61d6eb3e4ad2c0d0cf98bda08e5bffacce25fd0e1d7034ac69317e43c8" }, "downloads": -1, "filename": "tinnitus-0.1.4.tar.gz", "has_sig": false, "md5_digest": "f72be90e5f61ca0ce9c4ff300378a577", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8059, "upload_time": "2017-02-23T17:51:59", "url": "https://files.pythonhosted.org/packages/c4/8c/8f89cbd92a8673404d78bbd766c4eb3a7dc0768d59fc239c5c2670dbc927/tinnitus-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "de0f35923671e8e766284775bcbd1e65", "sha256": "98d474c6f621dc8b4d7823eedb73756439ea6f4a1e47245bef44a74c3eaf093f" }, "downloads": -1, "filename": "tinnitus-0.1.5.tar.gz", "has_sig": false, "md5_digest": "de0f35923671e8e766284775bcbd1e65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8092, "upload_time": "2017-02-24T05:13:37", "url": "https://files.pythonhosted.org/packages/11/b4/de57b82b0d07124aaf907d48314185a5fef69cd01a01b6c345032ccd4b73/tinnitus-0.1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "de0f35923671e8e766284775bcbd1e65", "sha256": "98d474c6f621dc8b4d7823eedb73756439ea6f4a1e47245bef44a74c3eaf093f" }, "downloads": -1, "filename": "tinnitus-0.1.5.tar.gz", "has_sig": false, "md5_digest": "de0f35923671e8e766284775bcbd1e65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8092, "upload_time": "2017-02-24T05:13:37", "url": "https://files.pythonhosted.org/packages/11/b4/de57b82b0d07124aaf907d48314185a5fef69cd01a01b6c345032ccd4b73/tinnitus-0.1.5.tar.gz" } ] }