1

Я использую angularjs в visual studio.using cordova media plugin startRecord() и stopRecord() работает, но не в состоянии приостановить и возобновить запись. Я не используя плагин захвата медиа, поскольку у меня нет установленного по умолчанию рекордера.как приостановить и возобновить запись голоса в android, используя плагин cordova media плагин

Это мой код:

var audurl = '///storage/emulated/0/New/'; 
audurl += 'Voice_' + '.amr'; 
var mediaRec; 
function recordAudio() { 
    mediaRec = new Media(audurl, onSuccess, onError); 
    mediaRec.startRecord(); 
} 
function pauseAudio() { 
    mediaRec = new Media(audurl, onSuccess, onError); 
    mediaRec.pauseRecord(); 
} 

благодаря ...

+0

[Это] (HTTPS://github.c om/apache/cordova-plugin-media # quick-example-7) пример показывает все, что вы хотите знать. Хотя его паузы и возобновление автоматически (с помощью setTimeout) показано, как возобновить запись. – Blauharley

+0

Могу ли я приостановить и возобновить нажатие кнопки. – abc

+0

Я думаю, что в соответствии с документацией приостановка и возобновление работы только в iOS. – abc

ответ

0

На моем телефоне метод media.resumeRecord не было, хотя в этом soure-code она определена. Тем не менее, вы можете воспользоваться всеми другими методами, как startRecord и stopRecord, чтобы восстановить вид функции resumeRecord, как это делается в обработчике ниже:

var myRecordHandler = function() { 

    // ALL RECORDED FILES ARE SAVED IN THIS ARRAY 
    var recordedAudioFiles = []; 

    // REMEMBER POSITION WHEN PLAYING IS STOPPED 
    var currentPosition = {index:0,shift:0}; 

    // PAUSE-MODE 
    var paused = false; 

    // SET A SPECIFC DIRECTORY WHERE THE FILES ARE STORED INTO 
    // DEFAULT: '' 
    this.setDirectory = function(dir) {this.dir=dir;}; 

    // SET FILENAME 
    // DEFAULT: recoredFilesX 
    this.setFilename = function(filename) {this.filename=filename;}; 

    // SET MIME/Type of THE FILES; 
    // DEFAULT: mp3 
    this.setFileType = function(type) {this.filetype=type;}; 

    // GET ALL RECORED FILES 
    this.getAllFiles = function() {return recordedAudioFiles;}; 

    // STOP/PAUSE RECORDED FILES 
    var handleRecordedFileHold = function() { 
    for (var r = 0; r < recordedAudioFiles.length; r++) { 

     var recordedAudioFile = recordedAudioFiles[r]; 

     if(recordedAudioFile.isBeingRecorded){ 
     if(paused)recordedAudioFile.media.pause(); 
     else recordedAudioFile.media.stop(); 
     continue; 
     } 

     recordedAudioFile.duration = new Date().getTime() - recordedAudioFile.startTime; 
     // call release to free this created file so that it could get deleted for instance 
     recordedAudioFile.media.stopRecord(); 
     recordedAudioFile.media.release(); 
     recordedAudioFile.isBeingRecorded = true; 
    } 
    } 

    // START RECORDING 
    this.startAudioRecording = function() { 

    paused = false; 
    handleRecordedFileHold(); 

    var dir = this.dir ? this.dir : ''; 
    var filename = this.filename ? this.filename : 'recoredFiles'; 
    var type = this.filetype ? this.filetype : 'mp3'; 

    var src = dir + filename + (recordedAudioFiles.length + 1) + '.' + type; 
    var mediaRec = new Media(src, 
     function() { 
     console.log('recordAudio():Audio Success'); 
     }, 
     function (err) { 
     console.log('recordAudio():Audio Error: ' + err.code); 
    }); 
    recordedAudioFiles.push({ 
     media: mediaRec, 
     startTime: new Date().getTime() 
    }); 
    mediaRec.startRecord(); 
    } 

    // PAUSE RECORDING 
    this.pauseRecoredFiles = function() { 
    if(recordedAudioFiles.length){ 
     paused = true; 
     clearTimeout(currentPosition.timeout); 
     handleRecordedFileHold(); 
     var recoredMedia = recordedAudioFiles[currentPosition.index].media; 
     recoredMedia.getCurrentPosition(
      function (position) { 
       currentPosition.shift = position; 
      }, 
      function (e) { 
       console.log("Error getting pos=" + e); 
      } 
     ); 
    } 
    } 

    // PLAY RECORD 
    this.playRecordedFiles = function() { 
    handleRecordedFileHold(); 
    var playNextFile = function() { 
     var recoredMedia = recordedAudioFiles[currentPosition.index]; 
     if (recoredMedia) { 
     if(paused){ 
      recoredMedia.media.seekTo(currentPosition.shift*1000); 
      paused = false; 
     } 
     recoredMedia.media.play(); 
     currentPosition.timeout = setTimeout(function() { 
      currentPosition.index++; 
      recoredMedia.media.stop(); 
      playNextFile(); 
     }, recoredMedia.duration ? recoredMedia.duration : 0); 
     } 
     else{ 
     paused = false; 
     currentPosition.index = currentPosition.shift = 0; 
     } 
    }; 
    playNextFile(); 
    } 

    // RESET PLAY 
    this.stopRecordedFiles = function() { 
    currentPosition.index = currentPosition.shift = 0; 
    clearTimeout(currentPosition.timeout); 
    handleRecordedFileHold(); 
    } 

    // REMOVE ALL RECORDED FILES 
    this.removeRecordedFiles = function() { 
    paused = false; 
    currentPosition.index = currentPosition.shift = 0; 
    clearTimeout(currentPosition.timeout); 
    handleRecordedFileHold(); 
    recordedAudioFiles = []; 
    } 

}; 

var handler = new myRecordHandler(); 

// you can use this handler in your functions like this: 
function recordAudio() { 
    // records one track and stops former track if there is one 
    handler.startAudioRecording(); 
} 

function playAudio() { 
    handler.playRecordedFiles(); 
} 

function pauseAudio() { 
    handler.pauseRecoredFiles(); 
} 

function resumeAudio() { 
    pauseAudio(); 
    recordAudio(); 
} 

function stopAudio() { 
    handler.stopRecordedFiles(); 
} 

Хотя я не мог проверить ваш каталог/имена файлов, потому что у меня нет этого каталога, созданного на моем телефоне, эти методы могут помочь вам сохранить ваши файлы в определенном каталоге, а также с определенными именами файлов:

handler.setDirectory('__YOUR_DIR__'); 

handler.setFilename('__YOUR_FILENAME__'); 

handler.setFileType('__YOUR_FILETYPE__'); 
+0

, также пробовал, как эта, но такая же проблема. Также, если ID генерируется каждый раз, как работает stopRecord(). – abc

+0

Вы уже сыграли записанный аудиофайл снова? Во время записи светится красный светодиод? Эти методы должны работать иначе, вам нужно сообщить самим разработчикам, извините. – Blauharley

+0

да, но нет светодиодного света. Обычно я не использую рекордер по умолчанию, я создал пользовательский интерфейс для этого – abc