Changer le taux d'échantillonnage de L'Audiocontexte (getUserMedia)

J'essaie d'enregistrer un enregistrement de 48000Hz via getUserMedia. Mais sans chance. Le retour audio MediaStream renvoie 44100Hz. Comment régler ça à 48000Hz?

<!-Voici quelques extraits de mon code:

var startUsermedia = this.startUsermedia;

            navigator.getUserMedia({ 
                audio: true, 
                //sampleRate: 48000 
            }, startUsermedia, function (e) {
                console.log('No live audio input: ' + e);
            });
<!-La fonction 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.');
        },

j'ai essayé de changer la propriété sampleRate de L'Audiocontexte, mais pas de chance.

Comment puis-je changer le taux d'échantillonnage à 48000Hz?

EDIT : Nous sommes maintenant d'accord avec une solution flash qui peut enregistrer et exporter des fichiers wav à 48000Hz

17
demandé sur f.lorenzo 2015-05-04 16:35:53

5 réponses

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

Toutefois, si vous voulez prendre votre flux audio, rééchantillonner, puis l'envoyer en arrière-plan (ou de faire qqch. sinon, en dehors de L'API Audio Web), vous pouvez utiliser un convertisseur de fréquence d'échantillonnage externe (par ex. 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
    }
13
répondu basilikum 2015-05-04 14:01:17