Javascript 在Safari上调用getUserMedia会导致mac os Safari版本11和12上的麦克风沉默一秒钟
我正在使用getusermedia录制音频,当我尝试在safari 11和12上录制第一首歌曲时,会出现1-2秒的沉默,然后音频开始录制。O其他浏览器的音频工作完美,没有延迟 我试图提高录音机使用的其他设备的性能,但运气不佳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
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上录制时应该不会延迟,与其他浏览器类似。我的团队今天也遇到了同样的问题,尚未找到任何解决方案。