View
 

iPhone: Record and Playback Audio

Page history last edited by Todd Blanchard 6 mos ago

Stateful three button recorder with record and play buttons and a button to indicate that a recording exists and will let you delete it.

 

function record()

    {        

        if($('#record-button').attr('src') == 'stop.png')

        {

            stopRecord();

        }

        else

        {

            startRecord();

        }

    }

    

    function play()

    {

        if($('#play-button').attr('src') == 'play.png')

        {

            playRecord();

        }

        else

        {

            stopPlayback();

        }

    }

    

    function deleteAudio()

    {

        if($('#cd-button').attr('src') == 'help.png')

        {

            alert("Touch the record button to record a voice memo.");

        }

        else

        {

            if(confirm("Really delete audio recording?"))

            {

                deleteRecording();

            }

        }

    }

 

    function deleteRecording()

    {

        if(navigator.audio)

        {

            debug.log("resetting audio");

            debug.log("removing old file at url " + navigator.audio.src);

            var path = navigator.audio.src.substr('documents://'.length);

            debug.log("Deleting audio file at path: " + path + " from url: "+navigator.audio.src);

            navigator.fileMgr.deleteFile(path,file_success,file_failed);

            navigator.audio = null;

            $('#cd-button').attr('src','help.png');

        }

        else

        {

            alert("Touch the record button to record a voice memo.");

        }

    }

 

function startRecord()

{

        debug.log("start record...");

        if(navigator.audio && confirm("Delete existing recording?"))

        {

            deleteRecording();

        }

 

        debug.log("Initializing audio");

        navigator.audio = new Media(null,recording_success,recording_failure);

        $('#cd-button').attr('src','cd.png');

        debug.log("Starting recording...");

        navigator.audio.startAudioRecord();

        navigator.notification.activityStart();

        $('#record-button').attr('src','stop.png');

navigator.audio.startAudioRecord();

}

function stopRecord()

{

        debug.log("Stopping recording...");

        $('#record-button').attr('src','record.png');

        navigator.notification.activityStop();

        $('#cd-button').attr('src','cd_remove.png');

navigator.audio.stopAudioRecord();

}

 

function playRecord()

{

        debug.log("Playing recording...");

        if(navigator.audio)

        {

            $('#play-button').attr('src','stop.png');

            navigator.notification.activityStart();

            navigator.audio.play();

        }

        else

        {

            alert("No audio. Touch the record button to record some.");

        }

}

    

    function stopPlayback()

    {

        debug.log("Stopping playback...");

        $('#play-button').attr('src','play.png');

        navigator.notification.activityStop();

navigator.audio.stop();

    }

 

    function file_success()

    {

        debug.log("file deleted");

        $('#cd-button').attr('src','help.png');

    }

    

    function file_failed()

    {

        debug.log("file not deleted");

    }

    

    function recording_success(url)

    {

        debug.log("Recording success callback");

        navigator.notification.activityStop();  

        $('#record-button').attr('src','record.png');

        $('#play-button').attr('src','play.png');

        $('#cd-button').attr('src','cd_remove.png');

    }

    

    function recording_failure(error)

    {

        navigator.notification.activityStop();  

        alert("Recording failed: " + error);

        debug.log("Recording failed: " + error);

    }

 

 

<table style="width: 100%" class="grid">

   <tr>

     <td><input type="image" id="record-button" src="record.png" onclick="return false;" ontouchstart="record(); return false;" ontouchend="return false;"></td>

     <td><input type="image" id="play-button" src="play.png" onclick="return false;" ontouchstart="play(); return false;" ontouchend="return false;"></td>

     <td><input type="image" id="cd-button" src="help.png" onclick="return false;" ontouchstart="deleteAudio(); return false;" ontouchend="return false;"></td>

  </tr>

</table> 

Comments (2)

profile picture

Simonluca Scillitani said

at 11:09 pm on Jul 10, 2010

Maybe I'm wrong but it seems it doesn't really work because phonegap is unable to find the file inside the path ...

profile picture

Simonluca Scillitani said

at 11:52 pm on Jul 10, 2010

Really doesn't work

2010-07-11 09:51:00.763 MasterTracker[4839:307] [INFO] Initializing audio
2010-07-11 09:51:00.789 MasterTracker[4839:307] Will use resource 'documents://1278834660583' from the documents folder.
2010-07-11 09:51:00.799 MasterTracker[4839:307] Failed to initialize AVAudioPlayer: Error Domain=NSOSStatusErrorDomain Code=-43 "The operation couldn’t be completed. (OSStatus error -43.)"
2010-07-11 09:51:00.822 MasterTracker[4839:307] [INFO] Starting recording...
2010-07-11 09:51:00.850 MasterTracker[4839:307] Will use resource 'documents://1278834660583' from the documents folder.
2010-07-11 09:51:01.157 MasterTracker[4839:307] Started recording audio sample 'documents://1278834660583'
2010-07-11 09:51:01.196 MasterTracker[4839:307] Activity starting
2010-07-11 09:51:01.241 MasterTracker[4839:307] Will use resource 'documents://1278834660583' from the documents folder.
2010-07-11 09:51:01.719 MasterTracker[4839:307] Started recording audio sample 'documents://1278834660583'
2010-07-11 09:51:01.731 MasterTracker[4839:307] Unknown resource '/var/mobile/Applications/8DE3AEB4-AF53-4F85-B26A-344183EF0810/Documents/1278834660583'
2010-07-11 09:51:01.772 MasterTracker[4839:307] Cannot use audio file from resource '/var/mobile/Applications/8DE3AEB4-AF53-4F85-B26A-344183EF0810/Documents/1278834660583'

You don't have permission to comment on this page.