getusermedia を使用してオーディオを録音しています。サファリ 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);
});
マイクはすぐに接続する必要があり、他のブラウザーと同様に、Safari 11 および 12 での録音に遅延はありません。