microfono example createobjecturl activar input audio-streaming webrtc microphone

input - example - video src window url createobjecturl stream



WebRTC Reproducir entrada de audio como micrófono (1)

Quiero reproducir mi archivo de audio como entrada de micrófono (sin enviar mi voz en vivo, pero mi archivo de audio) al usuario conectado de WebRTC. ¿Alguien puede decirme cómo se puede hacer?

He hecho algunos intentos siguientes en el código JS, como:

1. audio base64

<script> var base64string = "T2dnUwACAAAAAAA.."; var snd = new Audio("data:audio/wav;base64," + base64string); snd.play(); var Sound = (function () { var df = document.createDocumentFragment(); return function Sound(src) { var snd = new Audio(src); df.appendChild(snd); snd.addEventListener(''ended'', function () {df.removeChild(snd);}); snd.play(); return snd; } }()); var snd = Sound("data:audio/wav;base64," + base64string); </script>

2. AudioBuffer

window.AudioContext = window.AudioContext || window.webkitAudioContext; var audioContext = new AudioContext(); var isPlaying = false; var sourceNode = null; var theBuffer = null; window.onload = function() { var request = new XMLHttpRequest(); request.open("GET", "sounds/DEMO_positive_resp.wav", true); request.responseType = "arraybuffer"; request.onload = function() { audioContext.decodeAudioData( request.response, function(buffer) { theBuffer = buffer; } ); } request.send(); } function togglePlayback() { var now = audioContext.currentTime; if (isPlaying) { //stop playing and return sourceNode.stop( now ); sourceNode = null; analyser = null; isPlaying = false; if (!window.cancelAnimationFrame) window.cancelAnimationFrame = window.webkitCancelAnimationFrame; //window.cancelAnimationFrame( rafID ); return "start"; } sourceNode = audioContext.createBufferSource(); sourceNode.buffer = theBuffer; sourceNode.loop = true; analyser = audioContext.createAnalyser(); analyser.fftSize = 2048; sourceNode.connect( analyser ); analyser.connect( audioContext.destination ); sourceNode.start( now ); isPlaying = true; isLiveInput = true; return "stop"; }

Por favor, ayúdame en este caso. Sería altamente apreciable.


Aquí hay una demostración que puede ayudarlo a transmitir mp3 o wav usando chrome:

Aquí está, cómo está escrito:

Y el código fuente de la demostración:

Uso en aplicaciones WebRTC de terceros

window.AudioContext = window.AudioContext || window.webkitAudioContext; var context = new AudioContext(); var gainNode = context.createGain(); gainNode.connect(context.destination); // don''t play for self gainNode.gain.value = 0; document.querySelector(''input[type=file]'').onchange = function() { this.disabled = true; var reader = new FileReader(); reader.onload = (function(e) { // Import callback function that provides PCM audio data decoded as an audio buffer context.decodeAudioData(e.target.result, function(buffer) { // Create the sound source var soundSource = context.createBufferSource(); soundSource.buffer = buffer; soundSource.start(0, 0 / 1000); soundSource.connect(gainNode); var destination = context.createMediaStreamDestination(); soundSource.connect(destination); createPeerConnection(destination.stream); }); }); reader.readAsArrayBuffer(this.files[0]); }; function createPeerConnection(mp3Stream) { // you need to place 3rd party WebRTC code here }

Actualizado a las: 5:55 p.m. - jueves, 28 de agosto de 2014

Aquí es cómo obtener mp3 del servidor:

function HTTP_GET(url, callback) { var xhr = new XMLHttpRequest(); xhr.open(''GET'', url, true); xhr.responseType = ''arraybuffer''; xhr.send(); xhr.onload = function(e) { if (xhr.status != 200) { alert("Unexpected status code " + xhr.status + " for " + url); return false; } callback(xhr.response); // return array-buffer }; } // invoke above "HTTP_GET" method // to load mp3 as array-buffer HTTP_GET(''http://domain.com/file.mp3'', function(array_buffer) { // Import callback function that provides PCM audio data decoded as an audio buffer context.decodeAudioData(array_buffer, function(buffer) { // Create the sound source var soundSource = context.createBufferSource(); soundSource.buffer = buffer; soundSource.start(0, 0 / 1000); soundSource.connect(gainNode); var destination = context.createMediaStreamDestination(); soundSource.connect(destination); createPeerConnection(destination.stream); }); });