<?php
 // Record yourself via ffmpeg and MAMP on local system
 // RJM Programming
 // December, 2025
 // Use ffmpeg avfoundation
 // Thanks to https://www.google.com/search?q=macos+audio+recording+via+command+line&rlz=1C5OZZY_en&oq=macos+audio+recording+via+command+line&gs_lcrp=EgZjaHJvbWUyBggAEEUYOTIHCAEQIRigATIHCAIQIRigAdIBCTE0ODk2ajBqN6gCALACAA&sourceid=chrome&ie=UTF-8
 
 $fpath="";
 $period="10";
 if (isset($_GET['period'])) {
   $period=str_replace('+',' ',urldecode($_GET['period']));
 } else if (isset($_POST['period'])) {
   $period=str_replace('+',' ',urldecode($_POST['period']));
 }
 if (trim($period) == '') { $period="10"; }
 file_put_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "mic_recording.y", "y");
 $verb="ffmpeg -f avfoundation -i :0 -t " . $period . " -c:a aac " . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "mic_recording.m4a < " . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "mic_recording.y ; open http://localhost:8888/mic_recording.m4a";
 if (isset($_GET['verb'])) {
   $verb=str_replace('+',' ',urldecode($_GET['verb']));
 } else if (isset($_POST['verb'])) {
   $verb=str_replace('+',' ',urldecode($_POST['verb']));
 }
 if (trim($verb) == '') { $verb="ffmpeg -f avfoundation -i :0 -t " . $period . " -c:a aac " . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "mic_recording.m4a < " . $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "mic_recording.y ; open http://localhost:8888/mic_recording.m4a"; }
 if (PHP_OS == 'Darwin') {
  if (file_exists(DIRECTORY_SEPARATOR . 'usr' . DIRECTORY_SEPARATOR . 'local' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'ffmpeg')) {
   if (strpos((' ' . $verb  . ' '), ' ffmpeg ') !== false) {
    $verb=str_replace('ffmpeg', DIRECTORY_SEPARATOR . 'usr' . DIRECTORY_SEPARATOR . 'local' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'ffmpeg', $verb);
   }
  } else if (file_exists(DIRECTORY_SEPARATOR . 'usr' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'ffmpeg')) {
   if (strpos((' ' . $verb  . ' '), ' ffmpeg ') !== false) {
    $verb=str_replace('ffmpeg', DIRECTORY_SEPARATOR . 'usr' . DIRECTORY_SEPARATOR . 'bin' . DIRECTORY_SEPARATOR . 'ffmpeg', $verb);
   }
  }
  if (strpos($verb, ' -') === false) {
    if (isset($_GET['passthru']) || isset($_POST['passthru'])) {
    if (strpos(('~' . $verb . ' '), '~say ') !== false) {
    exec(str_replace('saJUNKy ','say -i --progress ',$verb));
    exit;
    } else {
    passthru("osascript -e 'tell application \"Terminal\" to do script \"" . $verb . "\"'");
    }
    } else {
    $res=passthru("osascript -e 'tell application \"Terminal\" to do script \"" . $verb . "\"'");
    echo "<html><head><meta charset='UTF-8'/></head><body><p title='This is in your clipboard now.' style='font-family:courier new;'>" . str_replace(" ", "&nbsp;", str_replace("\t", "&#9;", str_replace("\n","<br>",$res))) . "</p></body></html>";
    }
  } else if (isset($_GET['passthru']) || isset($_POST['passthru'])) {
    if (strpos(('~' . $verb . ' '), '~say ') !== false) {
    passthru("osascript -e 'tell application \"Terminal\" to do script \"" . $verb . "\"'");
    exit;
    } else {
    passthru("osascript -e 'tell application \"Terminal\" to do script \"" . $verb . "\"'");
    }
  } else {
    $res=shell_exec("osascript -e 'tell application \"Terminal\" to do script \"" . $verb . "\"'");
    sleep(5);
    sleep($period);
    $spare='data:audio/mp4;base64,' . base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "mic_recording.m4a"));
    echo "<p title='This is your audio recording.' style='font-family:courier new;'>" . str_replace(" ", "&nbsp;", str_replace("\t", "&#9;", str_replace("\n","<br>",$verb . "\n" . $res))) . "</p><br><a target=_top href='mailto:?subject=My%20audio%20recording&body=" . urlencode('https://www.rjmprogramming.com.au/recording_ideas.php#data') . base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "mic_recording.m4a")) . "'>Email audio recording to someone</a><br><audio controls><source type=audio/mp4 src='data:audio/mp4;base64," . base64_encode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . "mic_recording.m4a")) . "'></source></audio>";
  }
 } else if (PHP_OS =='WINNT' || PHP_OS =='WIN32' || PHP_OS =='Windows') {
  if (strpos($verb, ' /') === false) {
    if (isset($_GET['passthru']) || isset($_POST['passthru'])) {
    if (strpos(('~' . $verb . ' '), '~say ') !== false) {
    exec(str_replace('saJUNKy ','say -i --progress ',$verb));
    exit;
    } else {
    passthru($verb);
    }
    } else {
    $res=shell_exec("" . $verb);
    echo "<html><head><meta charset='UTF-8'/></head><body><p title='This is in your clipboard now.' style='font-family:courier new;'>" . str_replace(" ", "&nbsp;", str_replace("\t", "&#9;", str_replace("\n","<br>",$res))) . "</p></body></html>";
    }
  } else if (isset($_GET['passthru']) || isset($_POST['passthru'])) {
    if (strpos(('~' . $verb . ' '), '~say ') !== false) {
    exec($verb);
    exit;
    } else {
    passthru($verb);
    }
  } else {
    $res=shell_exec($verb);
    echo "<p title='This is in your clipboard now.' style='font-family:courier new;'>" . str_replace(" ", "&nbsp;", str_replace("\t", "&#9;", str_replace("\n","<br>",$res))) . "</p>";
  }
 } else {
  //echo shell_exec($verb . " | pbcopy; pbpaste");
  echo "<html>
<head>
<meta charset='UTF-8'/>
<title>Record yourself via ffmpeg and MAMP on local system - RJM Programming - December, 2025</title>
<scri" . "pt type=text/javascript>
  var wothree='top=50,left=50,height=600,width=600';
  var rectthree=null, wotest=null;
  var isSafari = /Safari/.test(navigator.userAgent) && /Apple Computer/.test(navigator.vendor);
  isSafari=true;
  var wolab=(isSafari ? '_blank' : 'blankif');
 
  function onl() {
    if (('' + navigator.platform).toLowerCase().indexOf('win') == 0) {
      document.getElementById('myform').action=document.getElementById('myform').action.replace(':8888','');
    }
    if (('' + location.hash).replace(/^\#/g,'').indexOf('data') == 0) {
      document.getElementById('myaudio').style.display='block';
      //var ds=prompt(decodeURIComponent(('' + location.hash).replace(/^\#/g,'')).replace(/\ /g,'+'),decodeURIComponent(('' + location.hash).replace(/^\#/g,'')).replace(/\ /g,'+'));
      if (decodeURIComponent(('' + location.hash).replace(/^\#/g,'')).replace(/\ /g,'+').indexOf('data:') == 0) {
      if (document.getElementById('mydiv').innerHTML.indexOf(' src=\"\"') != -1) {
      document.getElementById('mydiv').innerHTML=document.getElementById('mydiv').innerHTML.replace(' src=\"\"', ' src=\"' + decodeURIComponent(('' + location.hash).replace(/^\#/g,'')).replace(/\ /g,'+') + '\"');
      } else {
      document.getElementById('mysource').src=decodeURIComponent(('' + location.hash).replace(/^\#/g,'')).replace(/\ /g,'+');
      }
      } else {
      if (document.getElementById('mydiv').innerHTML.indexOf(' src=\"\"') != -1) {
      document.getElementById('mydiv').innerHTML=document.getElementById('mydiv').innerHTML.replace(' src=\"\"', ' src=\"' + 'data:audio/mp4;base64,' + (('' + location.hash).replace(/^\#/g,'')).substring(4).replace(/\ /g,'+') + '\"');
      } else {
      document.getElementById('mysource').src='data:audio/mp4;base64,' + (('' + location.hash).replace(/^\#/g,'')).substring(4).replace(/\ /g,'+');
      }
      }
    }
  }
</scri" . "pt>
</head>
<body onload=\" onl(); rectthree=document.getElementById('blankif').getBoundingClientRect();  wothree='top=340,left=' + rectthree.left + ',height=' + eval(-160 + eval('' + screen.height) - eval('' + rectthree.top)) + ',width=' + rectthree.width; if (('' + navigator.platform).toLowerCase().indexOf('mac') != 0 && ('' + navigator.platform).toLowerCase().indexOf('win') != 0) { document.getElementById('blankif').style.visibility='visible'; document.getElementById('blankif').srcdoc='<p>Sorry, no macOS nor Windows system detected.</p>';  }\">
<h1>Record yourself for ...</h1>
<h3>RJM Programming - December, 2025</h3>
<h4></h4>
<div id=mydiv><audio id=myaudio style=display:none; controls><source id=mysource src=\"\" type='audio/mp4'></source></audio></mydiv><br>
<form target=blankif onsubmit=\"document.getElementById('blankif').srcdoc='<p>Speak soon for up to ' + document.getElementById('period').value + ' seconds ...</p>'; document.getElementById('blankif').style.visibility='visible'; document.getElementById('blankif').style.backgroundColor='#f0f0f0'; document.getElementById('blankif').frameborder='1';  wotest=window.open(this.action + '?verb=' + encodeURIComponent(document.getElementById('verb').value) + '&passXthru=y', wolab, wothree); if (!wotest && isSafari) { this.target='_blank'; return true; } else {  return false; }\" method=GET id=myform action='HTTP://localhost:8888/recording_ideas.php'>
<span id=myspan>Seconds to record </span><input title='Seconds to record' style=display:inline-block;width:40%; step=1 min=0 max=200 type=number name=period id=period value='10'></input><br><br>
<input type=hidden name=verb value=''></input>
<input type=submit value=Record style=background-color:orange; onmouseover=\"document.getElementById('blankif').srcdoc='<p>Speak soon for up to ' + document.getElementById('period').value + ' seconds ...</p>';\"></input>
</form>  
<iframe srcdoc=\"<p>Speak now ...</p>\" data-src='/About_Us.html' id=blankif name=blankif style='font-family:courier new;visibility:hidden;width:100%;height:900px;' frameborder=0></iframe>
</body>
</html>";
 }
?>
