Python Forum
Sound-player standalone
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Sound-player standalone
#1
Gone look at making at making simple standalone Sound-player that can play most format eg .mp3.
Gone make it for Windows and Linux.
The goal is one standalone file(Windows:play.exe and Linux:play) this file can be moved to any OS and just work.

Install
Tool for this pipenv, pyinstaller, pyglet and Click.
Start with pipenv which is great for keeping track of dependencies,it's a marriage Heart of pip and virtualenv.
# Install pipenv pip install -U pipenv # Now pipenv in a folder eg (mkdir)sound_env pipenv install pyinstaller, pyglet, click # Activate sound_env folder pipenv shell
Take a look at dependencies in Windows and Linux.
pipenv graph
See all dependencies is installed also newer pypiwin32 and not older win32api,
which could be used i doing this without using virtual environment.

Code
import pyglet import click from msvcrt import getch pyglet.lib.load_library('avbin.dll') pyglet.have_avbin=True @click.command() @click.argument('file', type=click.Path(exists=True), metavar='<file>') def play(file): ''' Play sound file from command line Supported format: AU,MP2,MP3,OGG/Vorbis,WAV,WMA \b Example: play song.mp3 # File with space use quote. play "Clean Bandit.mp3" <Space> quit the song ''' music = pyglet.media.load(file) music.play() while True: key = ord(getch()) # 32 use space to quit if key == 32: break pyglet.app.run() if __name__ == '__main__': play()
Test code:
E:\sound_env λ which python /c/Users/Tom/.virtualenvs/sound_env-zFUYyERb/Scripts/python E:\sound_env λ python play.py "Clean Bandit.mp3" E:\sound_env λ
Linux:
Pyglet for playing which is using AVbin avbin.dll(windows) and libavbin.so.10(Linux),
even if i try to make clear so do not Pyinstaller find these files,so add it manually.

Click is great command line tool,type=click.Path(exists=True) will do error checking so we don't.
metavar='<file>' will use docstring of function when do play --help

Build
Build with Pyinstaller:
Command for Windows:
pyinstaller --onefile --console --icon=sound.ico --add-data avbin.dll;. play.py

Command for Linux:
pyinstaller --onefile --console --icon=sound.ico --add-data libavbin.so.10:. play.py
There is a little difference ;. Win and Linux :..
. - Destination path of dll in .exe or play file(Linux).
Every time Pyinstaller run a .spec file is generated,in this case play.spec
This file can be edit to add more stuff,then run like this.
pyinstaller --clean play.spec

Usage
It's a very simple player,eg place play.exe it environment variable Path(Windows),
and it work from anywhere in cmd.
Example:
# Excutebale mint@mint ~/sound_env/dist $ chmod +x play # Use mint@mint ~/sound_env/dist $ ./play --help Usage: play [OPTIONS] <file> Play sound file from command line Supported format: AU,MP2,MP3,OGG/Vorbis,WAV,WMA Example: play song.mp3 # File with space use quote. play "Clean Bandit.mp3" <Ctrl+c> quit the song # Play Song Linux mint@mint ~/sound_env/dist $ ./play faded.mp3 # Play Song windows C:\1>play "Clean Bandit.mp3"
Look with icon Windows:
[Image: SWhvZx.jpg]

Take away
A look a pipenv a cool that keep track of dependencies and make pip and virtual environment work with one command.
Pyinstaller a good tool for bundle all dependencies is single single package.
Click for creating beautiful command line interfaces,in my option the best of the bunch.
Reply
#2
Over has made a standalone Sound-player where Python is not required.
Now gone take a look making the same Sound player for Python with wheel.
Wheel can also be distribute bye PyPi(soon Warehouse),example could have been pip install play if i had uploaded my wheel.

For making wheel will be using setup.py.
So bye doing pip install wheel,should all be included for 3-party user.
data_files: this add dll and so file to OS.
install_requires: This will install packages.
entry_points: This is cool function that will actually make .exe for Windows as executable for Linux.
# setup.py from setuptools import setup __author__ = 'snippsat' setup( name="play", version='0.1', py_modules=['play'], description="Play sound files", url='https://python-forum.io', author_email='[email protected]', python_requires='>=3.4', # Add required files to Windows and Linux data_files=[ ('Scripts', ['avbin.dll']), ('usr/lib', ['libavbin.so.10']) ], classifiers=[ 'Programming Language :: Python :: 3.4', 'Programming Language :: Python :: 3.5', 'Programming Language :: Python :: 3.6', ], # These will be installed when "pip install wheel" run install_requires=[ 'pyglet', 'click', ], # Make executable eg for Windows will make .exe in Scripts folder entry_points='''\ [console_scripts] play=play:play''', )
Now i activate folder again pipenv shell.
Build the wheel:
E:\sound_env λ python setup.py bdist_wheel
Now navigate to dist folder and install wheel.
E:\sound_env λ cd dist E:\sound_env\dist λ ls play-0.1-py3-none-any.whl E:\sound_env\dist λ pip install play-0.1-py3-none-any.whl
So now in Python Script folder in virtual environment i have.
play.exe avbin.dll
Then this should work from anywhere in cmd,as long as Scripts folder is in environment variable Path for Windows.
Reply


User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020
This forum uses Lukasz Tkacz MyBB addons.
Forum use Krzysztof "Supryk" Supryczynski addons.