Robbie starts the development of a PHP tool to read all MIDI files from a folder and play them.
Topics Covered:
sudo usermod -a -G pulse-access www-data
<?php
///////////////////////////////////////////////////////////////////////////
// This script was written live on Category5 Technology TV episode 326. //
// Check out the episode at http://www.category5.tv/episodes/326.php //
// Note: While live on the air, we couldn't get it to play--turns out //
// it was a pulseaudio issue, fixed with the following command... //
// Assuming your apache (like ours) is running as www-data user, //
// and that your system is using PulseAudio, make it go with: //
// sudo usermod -a -G pulse-access www-data //
// MAY BE A GOOD IDEA TO REBOOT at that point, just to be sure... //
///////////////////////////////////////////////////////////////////////////
$folder = './mid';
if ($handle = opendir($folder)) {
while (false !== ($entry = readdir($handle))) {
if (stristr($entry, '.mid')) {
$songs[] = $entry;
}
}
}
if (is_array($songs)) {
foreach ($songs as $id => $song) {
if ($_POST['song'] == $id) {
exec('killall -9 aplaymidi');
exec('aplaymidi -p 128 "' . $folder . '/' . $song . '" > /dev/null 2>/dev/null &');
}
}
echo '<form method="post">';
echo '<select name="song">';
foreach ($songs as $id => $song) {
echo '<option value="' . $id . '"> ' . $song . ' </option>' . PHP_EOL;
}
echo '</select>';
echo '<input type="submit" value="Play" />';
echo '</form>';
}
?><?php
///////////////////////////////////////////////////////////////////////////
// This script is a cronjob alternative as described on Category5 //
// Technology TV episode 326 and based on the script created then. //
// Check out the episode at http://www.category5.tv/episodes/326.php //
// Note: this is built to be run alongside a cronjob as follows: //
// */1 * * * * /tmp/midi.sh //
// midi.sh won't exist until you press play (it's automatically created) //
// Due to the nature of cron, the song will start playing as late as //
// one minute after clicking "play". //
///////////////////////////////////////////////////////////////////////////
$folder = '/var/www/mid';
if ($handle = opendir($folder)) {
while (false !== ($entry = readdir($handle))) {
if (stristr($entry, '.mid')) {
$songs[] = $entry;
}
}
}
$command = '#!/bin/bash' . PHP_EOL;
if (is_array($songs)) {
foreach ($songs as $id => $song) {
if ($_POST['song'] == $id) {
$command .= '/usr/bin/killall -9 aplaymidi' . PHP_EOL;
$command .= '/usr/bin/aplaymidi -p 128:0 "' . $folder . '/' . $song . '" > /dev/null 2>/dev/null &' . PHP_EOL;
}
}
$filename = '/tmp/midi.sh';
$command .= 'rm -f ' . $filename;
file_put_contents($filename, $command);
exec('chmod +x ' . $filename);
echo '<form method="post">';
echo '<select name="song">';
foreach ($songs as $id => $song) {
echo '<option value="' . $id . '"> ' . $song . ' </option>' . PHP_EOL;
}
echo '</select>';
echo '<input type="submit" value="Play" />';
echo '</form>';
}
?>Lost your password? Please enter your email address. You will receive a link to create a new password.