2013-04-04 70 views
0

即時通訊嘗試使用媒體對象在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

我發現了同樣的問題與科爾多瓦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

0

沒有必要創建其他媒體對象來播放先前錄製的文件。只要做到以下 - 你必須釋放媒體對象記錄停止後:

// 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(); 
 
    } 
 
}