Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Safari上调用getUserMedia会导致mac os Safari版本11和12上的麦克风沉默一秒钟_Javascript_Getusermedia_Navigator_Mediadevices - Fatal编程技术网

Javascript 在Safari上调用getUserMedia会导致mac os Safari版本11和12上的麦克风沉默一秒钟

Javascript 在Safari上调用getUserMedia会导致mac os Safari版本11和12上的麦克风沉默一秒钟,javascript,getusermedia,navigator,mediadevices,Javascript,Getusermedia,Navigator,Mediadevices,我正在使用getusermedia录制音频,当我尝试在safari 11和12上录制第一首歌曲时,会出现1-2秒的沉默,然后音频开始录制。O其他浏览器的音频工作完美,没有延迟 我试图提高录音机使用的其他设备的性能,但运气不佳 navigator.mediaDevices.getUserMedia(constraints).then(function(stream) { console.log("getUserMedia() success, stream created, ini

我正在使用getusermedia录制音频,当我尝试在safari 11和12上录制第一首歌曲时,会出现1-2秒的沉默,然后音频开始录制。O其他浏览器的音频工作完美,没有延迟

我试图提高录音机使用的其他设备的性能,但运气不佳

navigator.mediaDevices.getUserMedia(constraints).then(function(stream) {
        console.log("getUserMedia() success, stream created, initializing WebAudioRecorder...");
        audioContext = new AudioContext();
        //assign to gumStream for later use
        gumStream = stream;
        /* use the stream */
        input = audioContext.createMediaStreamSource(stream);
        var analyser = audioContext.createAnalyser();
        input.connect(analyser);
        analyser.fftSize = 2048;
        var bufferLength = analyser.frequencyBinCount;
        var dataArray = new Uint8Array(bufferLength);
        var runProject = $('.project-page').filter(function(e){ 
            return $(this).css('display') === 'block'; 
        });
        var c = runProject.find('.level-bar');
        AudioRecordingMain.playSliderElement.hide();
        AudioRecordingMain.waveform.show();
        function draw1() {
            var canvasCtx1 = c[0].getContext("2d");
            var grid = new Grid(200, 1);
            canvasCtx1.clearRect(0, 0, WIDTH, HEIGHT);    
            analyser.getByteFrequencyData(dataArray);
            canvasCtx1.fillStyle = 'rgba(255, 255, 255, 0)';
            canvasCtx1.fillRect(0, 0, WIDTH, HEIGHT);
            var barWidth = (WIDTH / bufferLength) * 2.5;
            var barHeight;
            var x = 0;
            for (var i = 0; i < grid.length; i++) {
                var s = dataArray[i]/3;
                canvasCtx1.fillStyle = hsl(map(i, 0, grid.length, 0, 360), 80, 50);
                canvasCtx1.fillRect(grid.x[i], HEIGHT - s/2, grid.spacing_x-1, s);
                x += barWidth + 1;
            }
            drawVisual = requestAnimationFrame(draw1);
        }
        draw1();
        if(AudioRecordingMain.recordingPendingInitiation){
            return;
        }
        audioRecorder = new WebAudioRecorder(input, {
            workerDir: "js/", // must end with slash
            encoding: 'mp3',
            numChannels:2, //2 is the default, mp3 encoding supports only 2
            onEncoderLoading: function(recorder, encoding) {
                // show "loading encoder..." display
                console.log("Loading "+encoding+" encoder...");
            },
            onEncoderLoaded: function(recorder, encoding) {
                // hide "loading encoder..." display
                console.log(encoding+" encoder loaded");
            }
        });
        audioRecorder.onComplete = function(recorder, blob) { 
            console.log("Encoding complete");
            AudioRecordingMain.recordingStopped(blob, recorder);
            AudioRecordingMain.uploadData[AudioRecordingMain.setCurrentRecNo -1] = blob; 
        }
        audioRecorder.onTimeout = function (recorder) {
            AudioRecordingMain.stopPlayingOrRecording();
        }
        audioRecorder.setOptions({
            timeLimit:1200,
            encodeAfterRecord:encodeAfterRecord,
            bufferSize: 4096,
            mp3: {bitRate: 160}
        });  
        console.log("Recording started");
        AudioRecordingMain.countdownFinished();
        AudioRecordingMain.recordingBtn.hide();
        AudioRecordingMain.recordingStopBtn.show();
    }).catch(function(err) {
        console.log(err);
    });
navigator.mediaDevices.getUserMedia(约束)。然后(函数(流){
log(“getUserMedia()成功,创建流,初始化WebAudioRecorder…”);
audioContext=新的audioContext();
//分配给gumStream供以后使用
gumStream=溪流;
/*使用流*/
输入=audioContext.createMediaStreamSource(流);
var analyzer=audioContext.createanalyzer();
输入。连接(分析仪);
Analyzer.fftSize=2048;
var bufferLength=分析仪频率BINCOUNT;
var DATARRAY=新的Uint8Array(缓冲区长度);
var runProject=$('.project页').filter(函数(e){
返回$(this.css('display')='block';
});
var c=runProject.find('.levelbar');
AudioRecordingMain.playSliderElement.hide();
AudioRecordingMain.waveform.show();
函数draw1(){
var canvasCtx1=c[0].getContext(“2d”);
var电网=新电网(200,1);
canvasCtx1.clearRect(0,0,宽度,高度);
分析仪。GetByTefFrequencyData(数据阵列);
canvasCtx1.fillStyle='rgba(255,255,255,0)';
画布x1.fillRect(0,0,宽度,高度);
变量barWidth=(宽度/缓冲长度)*2.5;
高度;
var x=0;
对于(变量i=0;i

麦克风需要立即连接,在safari 11和12上录制时应该不会延迟,与其他浏览器类似。

我的团队今天也遇到了同样的问题,尚未找到任何解决方案。