Ah, I see. First of all cron jobs are tasks that are run periodically. So if you want to start a job on the hour then just start it on the hour
. I'd seldomly restart such a process from the same cron job. Problem is that you want to ensure the previous job has finished and decide what to do if not. Luckily process 'arecord' has its duration listed on the command line: 'arecord -f cd -c 1 -d$DURATION -t raw -v -v' (BTW ditch the "-v -v" for "-q" as it's a cron job and any stdout/stderr will be mailed unless specified otherwise. Same goes for 'lame': use "-S") so, at the top of the script, before running any new processes:
[ while `pgrep -f "arecord -f cd -c 1"` ]; do sleep 2s; done
will wait, sleep 2 seconds, before polling again until 'arecord' is finished. If OTOH you don't want to wait but kill arecord instead you simply could
pkill -15 -f "arecord -f cd -c 1" && sleep 4s; pkill -9 -f "arecord -f cd -c 1"
that is: kill "nicely" allowing it to close the process and clean up its file descriptors, wait 4 seconds then kill it before commencing. Sounds OK to you?