Safari 中不存在 Analyser.getFloatTimeDomainData()
Posted
技术标签:
【中文标题】Safari 中不存在 Analyser.getFloatTimeDomainData()【英文标题】:Analyser.getFloatTimeDomainData() does not exist in Safari 【发布时间】:2019-01-14 13:17:53 【问题描述】:显然 Safari 的 Analyzer 节点没有 getFloatTimeDomainData 方法Here you can see the error。我正在寻找一个类似的功能,将当前波形或时域数据复制到 Float32Array 中,并将在 safari 的浏览器上运行。
window.AudioContext = window.AudioContext || window.webkitAudioContext;
var buflen = 1024;
var buf = new Float32Array( buflen );
audioContext = new AudioContext();
MAX_SIZE = Math.max(4,Math.floor(audioContext.sampleRate/5000));
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia ||
navigator.msGetUserMedia;
navigator.mediaDevices.getUserMedia(audio: true)
.then(function(stream)
gotStreamPre(stream);
);
function gotStreamPre(stream)
// Create an AudioNode from the stream.
mediaStreamSource = audioContext.createMediaStreamSource(stream);
// Connect it to the destination.
analyser = audioContext.createAnalyser();
analyser.fftSize = 2048;
mediaStreamSource.connect( analyser );
updatePitchPre();
function updatePitchPre( time )
if(analyser!=null)
var cycles = new Array;
analyser.getFloatTimeDomainData( buf );//not working on Safari
var ac = autoCorrelatePre( buf , audioContext.sampleRate );
if (ac > -1)
if (!window.requestAnimationFrame)
window.requestAnimationFrame = window.webkitRequestAnimationFrame;
rafID = window.requestAnimationFrame( updatePitchPre );
【问题讨论】:
developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/… 听起来像是支持 safari,不过(移动设备除外)。您能否添加有关“不工作”的更多信息?到底发生了什么? @briosheje 我在我的问题中添加了 Unhandled Promise Rejection 错误。 尝试用audioContext = new (window.AudioContext || window.webkitAudioContext)();
替换audioContext = new AudioContext();
@briosheje 但我有它...第一行
你编辑了原代码,原来是audioContext = new AudioContext();
,我可以在编辑历史中看到。如果这样不起作用,您能否添加:console.log(analyser)
?
【参考方案1】:
我有同样的问题,你可以添加这个:
if (analyser && !analyser.getFloatTimeDomainData)
var r = new Uint8Array(2048);
analyser.getFloatTimeDomainData = function(e)
analyser.getByteTimeDomainData(r);
for (var t = 0, o = e.length; o > t; t++) e[t] = .0078125 * (r[t] - 128)
【讨论】:
你能解释一下为什么使用这些特定的数字吗?.0078125
和 128
,好吗?以上是关于Safari 中不存在 Analyser.getFloatTimeDomainData()的主要内容,如果未能解决你的问题,请参考以下文章
HTML5 视频加载数据事件在 IOS Safari 中不起作用
CSS 背景位置在 Mobile Safari (iPhone/iPad) 中不起作用
跨域 Ajax 调用在 Safari 4 和 Safari 5 中不起作用