This is a Perl/PHP job. But if you want to propose it as Java, please do and help me understand how it will work.
IN A NUTSHELL
An upload form accepts up to 10 MP3 files, with a few additional fields for each file. The files are uploaded to a tmp directory on the server and the user is notified of success/failure. Then, for each uploaded file, the following is performed:
- Extract amplitude (loudness) data and write to a TXT file in the tmp directory.
- Convert the MP3 file to SWF and write the SWF file to the tmp directory.
- If successful, move the TXT and SWF (audio only) files to another directory.
- Update a MySQL table with the file info.
I’d prefer you integrate Uber Uploader to handle the upload to the tmp directory and notification. It has the functionality needed and it is currently running elsewhere on the server. But if you have another WELL DOCUMENTED uploader you’d prefer to use, please propose it.
The upload form will contain the file fields (with browse buttons) and three additional fields (to be determined) associated with each file. It will also contain a couple of global fields (associated with all files).
To extract the amplitude data, it needs to read the MP3 binary data and parse out what’s needed. An example of a commercial application that does this as one of its functions is FlashAmp ([url removed, login to view]). Look at their explanation of the amplitude data and you’ll understand what we need (extraction of amplitude data is just one part of what FlashAmp does; we don’t need the rest). Ultimately, we want a CSV list with one value for each half second in the MP3 file. The TXT file is named using a value from the upload form.
To create the SWF file, please indicate in your bid if you will integrate an existing conversion technology like ffmpeg or develop something from scratch. It needs to be able to set at least the following parameters: fps, bitrate, sampling rate. The SWF file is named using a value from the upload form.
The movement of successful TXT and SWF files to a new directory is a matter of using a hard-coded path plus directory name value obtained from the upload form. The server is Linux.
The MySQL table update is just a matter of checking for the existence of a matching record (using the value of an ID field associated with the upload file on the upload form). If it exists, update a few fields (using values from the upload form). If it does not exist, create a record and set a few fields.
This should be a fast process (except for the upload of files), not requiring real-time (or even close) processing of the audio.
It needs to run on a LAMP server. We can add any Perl modules needed, and probably any other software required. Use of third-party software is fine (even commercial apps as long as license issues are considered and detailed). Any anticipated third-party software should be noted in the bid (except perl mods which are expected).
The final details, like upload form field names and database structure, will be provided at the start of work. The database is already developed and will be provided with structure and sample data (you can revise structure if necessary). The upload form will be designed afterward (making it look nice is not part of this job). Everything needs to be commented very well.