December 26 Update – Trying to make a Windows Executable for Convergence Jukebox

I’m going to switch gears away from trying to create a windows executable for Convergence Jukebox for a while. I’ve worked extensively on trying to create windows executables for the two main programs that make up convergence jukebox… Painful. I consulted the official Python Distribution Utilities page looking for answers but didn’t find anything that looked like it would work without spending a lot of time.

py2exe

I’ve tried py2exe and I can’t find a way to trace the problem with the GUI program. Even worse after ensuring I had the most up to date python versions and installing them onto my development machines, py2exe won’t pip install into my 2.7 version of Python. It keeps wanting to install the python 3 version?!?

pyinstaller

I’ve tried pyinstaller but it won’t include Tkinter in the executable because of some undocumented problem between PIL and FixTK?!?

cxfreeze

This afternoon I tried cx_freeze and finally got the GUI  going for the first time but then ran into problems getting the Convergence Jukebox player engine going. Creating Windows executables with the tools available can be a real challenge in a complex program.

There are suggestions on the net to try Inno Setup or something else called bbfreeze but this looks to me like this can get really complex and could easily take a week to sort out. So I’m going to steer the ship towards posting working python code only. Windows users will have to install Python 2.7 code on their computers if they want to use it. Perhaps I can get back to it another day or someone in the community picks it up as a project in the future.

Still working on posting this code….. I haven’t gone away…

….brad….

Advertisement

Delays With Convergence Jukebox

I’ve made some progress in my efforts to release the Convergence Jukebox code over the past few days. Given that it’s Christmas time there are a lot of family events but plenty of open spots where I can work on the codes release.

Over the past day or so I’ve managed to figure out GIT and GitHub enough so I can post the code. I’ve also modified the code by adding the licence information, creating a break in the program so users can add MP3’s to the appropriate music directory so it will work on its second boot and I’m in the process of building some exe’s to make its installation on windows as simple as possible.

crash

In running both pyinstaller and py2exe to create those exe’s I’ve run into a snag (shown above). My latest thinking at the time of this post is that it’s being caused because the windows executable is looking for the graphic that’s not being added to the compile. As a result the exe crashes at the point it looks for the graphic. I’ve found what I believe are the appropriate references for pyinstaller but it’s going to take me some time to figure it out…. So all I can say is I’m working on it as best I can…

Stay tuned…..

Convergence Jukebox Now Ported To Raspberry Pi

Originally Posted at ….brads blog…. on by Brad Fortner | Edit

It’s Done….

It took me almost a year to complete my current project. Some months ago I started a project to create a Jukebox for myself capable of playing my mp3’s. Today mp3 jukeboxes are a dime a dozen but I wanted one that would mimic a 1950’s jukebox employing a mechanical controls (of a type) and be coin operable. Initially I tried using two readily available programs DWJukkebox and Arcade Jukebox 8 (AJ8). I ultimately tried Arcade Jukebox 8 –I could not get DW Jukebox working with a coin machine– but with the development of AJ8 closed some years ago and no documentation I was limited to customizing it with external programs like AutoHotKey in the Windows OS environment.

Last summer I decided to write my own Jukebox –with the features I wanted– from scratch using Python. I chose Python because I was told it was easy to learn and it’s cross platform. I did the initial development on Windows and placed a fully functioning Windows OS Convergence Jukebox beta version in the field within the last two weeks. Convergence Jukebox 1.0 contains the following features.

  1. No limit to the number of MP3’s in its library.
  2. Display of 16 songs on each Jukebox screen featuring both title and artist. The GUI was created using TK.
  3. Clear indication of current song title/artist at the top of the Jukebox Display
  4. Ability to search song selection by Artist or Title.
  5. Ability to jump between letters of the alphabet during song search
  6. A side status screen that displays sort mode, information on song playing (title, artist, year released, song length and album/release information), up to 18 upcoming song selections, credits, cost barker line and number of songs available on the jukebox.
  7. Integration with a  Weavefuture Coin Acceptor AK5 System via a Weavefuture USB  Jukebox Interface Board
  8. An X-keys® XK-24 Programmable Keypad to operate the Jukebox
  9. A log that monitors and records when the Jukebox is turned on, the playing random, skipped and user selected songs.
  10. Remote maintenance access employing LogMeIn.

Today I managed to complete the initial port of the python software to my Raspberry Pi. It only took me about four hours total to configure the code for the Pi version. Primarily it involved changing the code slightly to accommodate the mpg321 mp3 player and changing the filepaths between the Windows OS and Raspian Wheezy OS.

Here is how the initial port looks on the Raspberry Pi;

RaspberryPiTestFull

The Raspberry Pi Tkinter GUI (shown above) had no problem duplicating the look and feel of the Python code developed on a Windows 7 PC.

Here is how the Programmable Keypad Interface Design for the X-keys® XK-24 Programmable Keypad; to the Windows OS Jukebox looks;

keypad

Some Notes…

OK. Here is my recipe for working with Python on my Raspberry Pi and ensuring proper set-up with a USB soundcard.

1.  First follow my previous blog post Back In The Raspberry Pi Business Today. Starting To Port My Python Based Jukebox To Wheezy to set up a remote desktop.

2. Install WinSCP on windows machine for file transfers and Putty to the Pi. http://winscp.net/

3. Using WinSCP create a python folder in the /home/pi directory. This is where python projects go.

4. Using WinSCP create a folder (my current project) in the /home/pi/python directory. This will be the folder for my current project.

5. Install pip. https://pypi.python.org/pypi/pip

6. Install idlex. sudo pip install idlex http://sourceforge.net/projects/idlex/

7. Install mpg321. sudo apt-get install mpg321 http://mpg321.sourceforge.net/

8. Install hsaudiotag sudo pip install hsaudiotag. https://pypi.python.org/pypi/hsaudiotag

9. Install Python Imaging Library. sudo apt-get install python-imaging http://www.pythonware.com/products/pil/

10. sudo apt-get install python-imaging-tk.  sudo apt-get install python-imaging-tk http://www.raspberrypi.org/phpBB3/viewtopic.php?t=7758&p=94280

11. Setup the USB soundcard by following instructions at http://learn.adafruit.com/usb-audio-cards-with-a-raspberry-pi/instructions Start at Updating alsa options on that page.

….brad….

Convergence Jukebox Current Release Features

Convergence Jukebox 2, along with its Python Code, has been released at its Github site. Here is what it does.

Convergence Jukebox Skin Customization

Convergence Jukebox Early Beta Version Showing Customized Jukebox Skin

To accommodate its “retro” look and feel, Convergence Jukebox is not a touchscreen solution. It doesn’t use a full or popup keyboard and it doesn’t act like modern touchscreen jukeboxes where album covers, advertising and barker screens are baked into its design. That said, all of those features could easily be added to Convergence Jukebox’s code base by those with a desire and knowledge of Python coding techniques.

Features included in the initial release of Convergence Jukebox are quite extensive and are as follows;

  • Unlimited mp3 library size: Currently operating in our development centre is a version containing 15,000 mp3 files. This implementation runs on minimum hardware. In this case it’s an HP MINI 210 PC that contains an Atom N450 processor, 1024 MB of memory and a ‎160.0 GB hard drive. For Raspberry Pi we’re operating the original Convergence Jukebox containing 9400 mp3 files on Raspberry Pi 1 model B revision 2 with 512 MB ram, a Raspberry Pi 2 and a Raspberry Pi Zero employing a ‎64.0 GB SD card.
  • Automatic Song Detection: MP3 library database is built automatically when additional properly formed ID3 tagged files are added to the media folder and the program is restarted.
  • Multiple Display Resolutions: Developers can change display resolution, skins and customize all items on the screen (such as song name positions) using Pythons Tkinter code.
  • Customizable To Your Location: The Jukebox name or service at top of arch can be customized in the Python Tkinter code.
  • Background Music System: Convergence Jukebox plays library loaded in Jukebox in a continuous manner randomly. Makes an excellent background music system.
    • Different Styles Of Music: mp3’s can be tagged with genres in comment area of ID3 tag. Random play can be set to play specific genres by altering a simple text file.
    • Songs Can Be Skipped: mp3’s can be tagged “norandom” meaning they will never play randomly. This means mp3’s with potentially unsuitable content can only be played if selected.
    • Avoids Repeating The Same Songs Continuously: mp3’s on the random list are only played once during a random play cycle.
    • Automatic Resetting Of Random List: Convergence Jukebox resets the random list when the software is rebooted or all selections in the jukebox have been played once randomly.
  • Clearly Identified Songs: While song is playing, song title and artist are displayed prominently under the Jukebox arch on the display.
    • More detailed song information is displayed in the green display (top left) that includes year released, song length and album name pulled from the mp3 id3 tags.
  • Convergence Jukebox plays user selected songs (paid) as a priority: When selected songs are listed in order of selection under the Upcoming Selections heading in the status area.
    • Users cannot select the same song if it’s on the Upcoming Selections list. This eliminates the same song from being played repeatedly.
    • Songs played via selection are removed from the random playlist. This eliminates the same song from being played repeatedly.
    • Random play resumes once user selected songs have completed playing.
  • Number of Credits, cost per credit and the number of songs available in the library are clearly displayed (and editable in the Python code) at the bottom left of the green screen .
  • Users can navigate through available music using up/down/left/right navigation keys.
  • Users can navigate through music selecting songs by either Title or Artist.
  • Users can navigate to the alphabetical start of either Artist or Title using specific letter keys that employ multiple keypresses.
  • A log is kept of each song played randomly, each song paid to play, when the Jukebox is rebooted, when songs are added and when a new random list is generated.
  • Python code has been written for is included in Convergence Jukebox that’s not been documented in the released version that talks to the Dropbox folder to providing RSS feeds for digital signage systems. as well as It is possible to include code to create tweets to Twitter accounts making the jukebox useful as a global barker system.
ConvergenceJukeboxOn Windows10Laptop

Software Operating On A Windows Based Laptop (with Python installed) Summer 2015

KivyGUI

Convergence Jukebox 2’s Kivy Based Gui Released May 2017

Convergence Jukebox Python Code Soon To Be Released Under A GNU V3 General Public License

Convergence Jukebox is open source Python based software that has been written to emulate a “retro” style jukebox. The type of jukebox that was popular in bars, restaurants and recreation areas during the 1950’s and 60’s. The initial release version of Convergence Jukebox runs on a Windows based computer with Python 2.7 installed. The Convergence Jukebox source code will be distributed from its GitHub page to encourage others to further modify the software, adapt it to other platforms and to add features.

JukeboxInterfaceAtTime Of Release

Convergence Jukebox Release Skin 2016. Includes Separate Song Search and Status Screens.

Convergence Jukebox In Beta

Convergence Jukebox In Beta On Python Enabled Windows 7 Computer In 2014

Written from scratch over the past three years by Brad Fortner of Convergence Communications, Convergence Jukebox plays properly formed ID3 tagged mp3 media. The Jukebox can be controlled for “personal” use by your computer keyboard but is better operated with a USB keypad such as a Pi Engineering USB keypad. Its output resolution is modifiable allowing it to connect to inexpensive computer, laptop or TV displays with its “retro look and feel”. It can even be connected to bill, coin or card acceptors such as a WeaveFuture Coin Acceptor via USB for “pay to play” situations.

Convergence Jukebox is written in Python allowing it to be cross platform. It is licensed with a GNU V3 General Public License that guarantees end users (individuals, organizations, companies) the freedoms to run, study, share (copy), and modify the software. It’s perfectly suited as a Jukebox software base for the Maker community as it can be easily modified and adapted.

RaspberryPiTest

Convergence Jukebox GUI Screen During Beta Test On Raspberry Pi Hardware Fall 2013

To test its potential for interoperability, in 2014 the software was operated successfully on a Raspberry Pi 1. Only slight software modifications were required to make it operate in the Raspberry Pi and that was code adaptations to adapt the code to from a Windows based to a linux based mp3 player. During its development, which is now approximately three years, Convergence Jukebox has been running 24 hours a day, 7 days a week in a Toronto based service organization. It’s been pretty well road tested.

Currently Brad Fortner is in the process of finalizing the software to be published, setting up the GitHub site for distribution and finalizing the licensing details. Expect to see the GitHub site lit up shortly.