javascript getusermedia sample-rate audiocontext

javascript - Cambiar la frecuencia de muestreo de AudioContext(getUserMedia)



sample-rate (5)

Estoy tratando de grabar una grabación de 48000Hz a través de getUserMedia. Pero sin suerte. El audio devuelto MediaStream devuelve 44100Hz. ¿Cómo puedo configurar esto a 48000Hz?

Aquí hay fragmentos de mi código:

var startUsermedia = this.startUsermedia; navigator.getUserMedia({ audio: true, //sampleRate: 48000 }, startUsermedia, function (e) { console.log(''No live audio input: '' + e); });

La función startUsermedia:

startUsermedia: function (stream) { var input = audio_context.createMediaStreamSource(stream); console.log(''Media stream created.''); // Uncomment if you want the audio to feedback directly //input.connect(audio_context.destination); //__log(''Input connected to audio context destination.''); recorder = new Recorder(input); console.log(''Recorder initialised.''); },

Intenté cambiar la propiedad sampleRate del AudioContext, pero no tuve suerte.

¿Cómo puedo cambiar el sampleRate a 48000Hz?

EDITAR : Ahora también estamos de acuerdo con una solución flash que puede grabar y exportar archivos wav a 48000Hz


Ahora está en la especificación pero aún no está implementado en Chromium. También en bugs.chromium.org, "Estado: disponible" no significa que esté implementado. Simplemente significa que nadie está trabajando en ello y que está disponible para cualquier persona que quiera trabajar en él. Así que "Disponible" significa "No asignado".



Puede usar un OfflineAudioContext para representar esencialmente su búfer de audio a una frecuencia de muestreo diferente (pero esto es una operación por lotes).

Así que grabaría su grabación utilizando el contexto de audio normal y luego usaría un OfflineAudioContext con una frecuencia de muestreo diferente para representar su búfer. Hay un ejemplo en la página de Mozilla.


Que yo sepa, no hay manera de cambiar la frecuencia de muestreo dentro de un contexto de audio. La frecuencia de muestreo generalmente será la frecuencia de muestreo de su dispositivo de grabación y se mantendrá de esa manera. Entonces no podrás escribir algo como esto:

var input = audio_context.createMediaStreamSource(stream); var resampler = new Resampler(44100, 48000); input.connect(resampler); resampler.connect(audio_context.destination);

Sin embargo, si desea tomar su flujo de audio, volver a muestrearlo y luego enviarlo al backend (o hacer algo con él fuera de la API de Web Audio), puede usar un convertidor de frecuencia de muestreo externo (por ejemplo, https://github.com/taisel/XAudioJS/blob/master/resampler.js ).

var resampler = new Resampler(44100, 48000, 1, 2229); function startUsermedia(stream) { var input = audio_context.createMediaStreamSource(stream); console.log(''Media stream created.''); recorder = audio_context.createScriptProcessor(2048); recorder.onaudioprocess = recorderProcess; recorder.connect(audio_context.destination); } function recorderProcess(e) { var buffer = e.inputBuffer.getChannelData(0); var resampled = resampler.resampler(buffer); //--> do sth with the resampled data for instance send to server }


Usted no puede La frecuencia de muestreo del AudioContext está establecida por el navegador / dispositivo y no hay nada que puedas hacer para cambiarlo. De hecho, encontrará que 44.1kHz en su máquina podría ser 48kHz en la mía. Varía a lo que elija el sistema operativo por defecto.

También recuerde que no todo el hardware es capaz de todas las frecuencias de muestreo.