无法播放Android上的音频录音使用phonegap 2.4

问题描述:

即时通讯尝试使用媒体对象在phonegap中录制音频文件,然后播放它。我没有记录问题,但是当我尝试播放它时,我的应用程序关闭了,无论是在我的模拟器还是我的设备上。在logcat上说:“org.apache.cordova.readyPlayer(AudioPlayer.java)的空指针异常”。非常感谢任何愿意帮助我的人,我花了一段时间才意识到完全迷失在这里。 这里是我从http://docs.phonegap.com/en/2.4.0/cordova_media_media.md.html#media.stopRecord复制的代码,并且在.stopRecord()之后添加了.play()。如果需要,我可以添加清单和活动,我怀疑问题在那里,但我可能是错的。 的index.html:无法播放Android上的音频录音使用phonegap 2.4

<script type="text/javascript" charset="utf-8" src="cordova-2.4.0.js"></script> 
<script type="text/javascript" charset="utf-8"> 

// Wait for Cordova to load 
// 
document.addEventListener("deviceready", onDeviceReady, false); 

// Record audio 
// 
function recordAudio() { 
    var src = "myrecording.amr"; 
    var mediaRec = new Media(src, onSuccess, onError); 

    // Record audio 
    mediaRec.startRecord(); 

    // Stop recording after 10 sec 
    var recTime = 0; 
    var recInterval = setInterval(function() { 
     recTime = recTime + 1; 
     setAudioPosition(recTime + " sec"); 
     if (recTime >= 10) { 
      clearInterval(recInterval); 
      mediaRec.stopRecord(); 
      document.getElementById('audio_position').innerHTML = "finished"; 
      **mediaRec.play();** 
     } 
    }, 1000); 
} 

// Cordova is ready 
// 
function onDeviceReady() { 
    recordAudio(); 
} 

// onSuccess Callback 
// 
function onSuccess() { 
    console.log("recordAudio():Audio Success"); 
} 

// onError Callback 
// 
function onError(error) { 
    alert('code: ' + error.code + '\n' + 
      'message: ' + error.message + '\n'); 
} 

// Set audio position 
// 
function setAudioPosition(position) { 
    document.getElementById('audio_position').innerHTML = position; 
} 

</script> 

<p id="media">Recording audio...</p> 
<p id="audio_position"></p> 

尤瓦

+1

如果你停止录制后删除mediaRec对象,创建一个新的媒体对象以相同的网址并尝试播放? – Michael 2013-04-04 11:03:16

+0

实际上,五分钟前我想通了,然后我看到了你的ansewr。它是正确的。无论如何,非常感谢你,下次我不会为了这个问题而苦苦挣扎,你可能已经为我节省了很多时间:) – 2013-04-04 14:17:09

+0

@ user2033402我目前正忙于解决这个问题,请问您可以发布您的解决方案。我使用phonegap 3.0,但语法是相同的。为什么我们需要删除mediaRec对象,并创建一个新的对象 – 2013-10-03 15:49:04

我发现了同样的问题与科尔多瓦3.5(有媒体插件0.2.11)和Android 4.4 。解决方案如上所述。基本上这样的应该做的伎俩:

mediaRec.stopRecord(); 
src = mediaRec.src; // if you don't have src defined anymore 
mediaRec.release(); 

mediaPlay = new Media(src, onSuccess, onError); 
mediaPlay.play(); 
+0

嘿,你有什么想法如何做同样的事情,但记录后播放另一个功能的媒体。我尝试将src传递给该函数作为参数,但是即使使用完整的本地路径,录制的音频也不会播放。我也从这个问题的其他答案尝试解决方案,但仍然无法正常工作。 – Ionut 2016-09-13 07:03:07

没有必要创建其他媒体对象来播放先前录制的文件。只要做到以下 - 你必须释放媒体对象记录停止后:

// variable in global scope 
 
var mediaRec = 0; 
 

 
// function to record an audio 
 
function recordAudio() { 
 
    // create media object for your recording 
 
    mediaRec = new Media("phonegap_rec.amr", onMediaRecordSuccess, onMediaRecordError); 
 
    // start recording 
 
    mediaRec.startRecord(); 
 
    // recording for 5 seconds 
 
    var recTime = 0; 
 
    var recInterval = setInterval(function() { 
 
     recTime = recTime + 1; 
 
     if (recTime >= 5) { 
 
      clearInterval(recInterval); 
 
      // stop recording after 5 seconds 
 
      mediaRec.stopRecord(); 
 
      // release the media object (THIS IS THE KEY SOLUTION HERE) 
 
      mediaRec.release(); 
 
     } 
 
    }, 1000); 
 
} 
 

 
// function to playback recorded audio 
 
function playRecord() { 
 
    // check if the object exists 
 
    if (mediaRec) { 
 
    // now you can playback the recording 
 
    mediaRec.play(); 
 
    } 
 
}