javascript सरस मैं क्रोम में MediaRecorder से ऑडियो रिकॉर्ड करने के लिए पूर्वनिर्धारित लंबाई कैसे जोड़ सकता हूँ?



हाइट बढ़ाने के कैप्सूल (1)

मैं क्रोम में ऑडियो रिकॉर्ड करने के लिए MediaRecorder में निर्मित के साथ RecordRTC को बदलने की प्रक्रिया में हूँ रिकॉर्ड किया गया ऑडियो ऑडियो एपीआई के साथ कार्यक्रम में खेला जाता है। मुझे audio.duration संपत्ति को काम करने में परेशानी हो रही है इसे कहते हैं

अगर वीडियो (ऑडियो) स्ट्रीम होता है और इसमें कोई पूर्वनिर्धारित लंबाई नहीं होती है, तो "इन्फ़" (इन्फिनिटी) वापस आ गया है।

RecordRTC के साथ, मुझे ऑडियो को wav से ogg में कनवर्ट करने के लिए ffmpeg_asm.js का उपयोग करना पड़ा। मेरा अनुमान प्रक्रिया में कहीं है RecordRTC पूर्वनिर्धारित ऑडियो लंबाई निर्धारित करता है क्या MediaRecorder का उपयोग करके पूर्वनिर्धारित लंबाई निर्धारित करने का कोई तरीका है?


यह एक क्रोम बग है

एफएफ रिकॉर्ड किए गए मीडिया की अवधि का पर्दाफाश करता है, और अगर आप दर्ज मीडिया के वर्तमान समय को इसकी वास्तविक duration से अधिक तक सेट करते हैं, तो संपत्ति क्रोम में उपलब्ध है ...

var recorder,
  chunks = [],
  ctx = new AudioContext(),
  aud = document.getElementById('aud');

function exportAudio() {
  var blob = new Blob(chunks, {
    type: 'audio/ogg'
  });
  aud.src = URL.createObjectURL(new Blob(chunks));

  aud.onloadedmetadata = function() {
    // it should already be available here
    log.textContent = ' duration: ' + aud.duration;
    // handle chrome's bug
    if(aud.duration === Infinity){
      // set it to bigger than the actual duration
      aud.currentTime = 1e101;
      aud.ontimeupdate = function(){
      	  this.ontimeupdate = ()=>{return;}
	      log.textContent += ' after workaround: ' + aud.duration;
    	  aud.currentTime = 0;
    	  }
      }
  }
}

function getData() {
  var request = new XMLHttpRequest();
  request.open('GET', 'https://upload.wikimedia.org/wikipedia/commons/4/4b/011229beowulf_grendel.ogg', true);
  request.responseType = 'arraybuffer';
  request.onload = decodeAudio;
  request.send();
}


function decodeAudio(evt) {
  var audioData = this.response;
  ctx.decodeAudioData(audioData, startRecording);
}

function startRecording(buffer) {

  var source = ctx.createBufferSource();
  source.buffer = buffer;
  var dest = ctx.createMediaStreamDestination();
  source.connect(dest);

  recorder = new MediaRecorder(dest.stream);
  recorder.ondataavailable = saveChunks;
  recorder.onstop = exportAudio;
  source.start(0);
  recorder.start();
  log.innerHTML = 'recording...'
  // record only 5 seconds
  setTimeout(function() {
    recorder.stop();
  }, 5000);
}

function saveChunks(evt) {
  if (evt.data.size > 0) {
    chunks.push(evt.data);
  }

}



getData();
<audio id="aud" controls></audio><span id="log"></span>

तो यहां की सलाह बग रिपोर्ट को तारांकित करने के लिए होगी ताकि क्रोमियम की टीम को इसे ठीक करने में कुछ समय लगेगा, भले ही यह कामकाज चाल कर सके ...





recordrtc