Javascript 使用Web Audio API AudioContext确定语音中是否有暂停

Javascript 使用Web Audio API AudioContext确定语音中是否有暂停,javascript,web-audio-api,audiocontext,Javascript,Web Audio Api,Audiocontext,试图更好地理解Web音频API。我们使用它来创建音频上下文,然后发送音频进行转录。我希望能够确定语音中何时出现自然停顿或用户何时停止说话 onaudioprocesscallback中是否有一些数据可以用来确定语音暂停/中断 let context = new AudioContext(); context.onstatechange = () => {}; this.setState({ context: context }); let source = context.create

试图更好地理解Web音频API。我们使用它来创建音频上下文,然后发送音频进行转录。我希望能够确定语音中何时出现自然停顿或用户何时停止说话

onaudioprocess
callback中是否有一些数据可以用来确定语音暂停/中断

let context = new AudioContext();
context.onstatechange = () => {};

this.setState({ context: context });

let source = context.createMediaStreamSource(stream);
let processor = context.createScriptProcessor(4096, 1, 1);
source.connect(processor);
processor.connect(context.destination);
processor.onaudioprocess = (event) => {
   // Do some magic here
}
我尝试了一个在这篇文章中建议的解决方案,但没有达到我需要的结果。职位:

当我按照帖子的建议解析静默时,我得到了相同的结果-要么
0
要么
128

let context = new AudioContext();

let source = context.createMediaStreamSource(stream);
let processor = context.createScriptProcessor(4096, 1, 1);
source.connect(processor);
processor.connect(context.destination);

/***
   * Crete analyser
   *
   **/
let analyser = context.createAnalyser();
analyser.smoothingTimeConstant = 0;
analyser.fftSize = 2048;
let buffLength = analyser.frequencyBinCount;
let arrayFreqDomain = new Uint8Array(buffLength);
let arrayTimeDomain = new Uint8Array(buffLength);
processor.connect(analyser);

processor.onaudioprocess = (event) => {
   /**
   *
   * Parse live real-time buffer looking for silence
   *
   **/
   let f, t;
   analyser.getByteFrequencyData(arrayFreqDomain);
   analyser.getByteTimeDomainData(arrayTimeDomain);
   for (var i = 0; i < buffLength; i++) {
       arrayFreqDomain[i]; <---- gives 0 value always
       arrayTimeDomain[i]; <---- gives 128 value always
   }
}
let context=new AudioContext();
让source=context.createMediaStreamSource(流);
让processor=context.createScriptProcessor(4096,1,1);
source.connect(处理器);
processor.connect(context.destination);
/***
*混凝土分析仪
*
**/
让Analyzer=context.createAnalyzer();
Analyzer.smoothingTimeConstant=0;
Analyzer.fftSize=2048;
设buffLength=分析仪频率BINCOUNT;
让arrayFreqDomain=新的Uint8Array(buffLength);
让arrayTimeDomain=新的Uint8Array(buffLength);
处理器。连接(分析仪);
processor.onaudioprocess=(事件)=>{
/**
*
*解析实时缓冲区寻找静默
*
**/
设f,t;
Analyzer.GetByTefFrequencyData(阵列频域);
Analyzer.getByteTimeDomainData(arrayTimeDomain);
对于(变量i=0;iarrayFreqDomain[i];可能的重复不是重复,因为我尝试在那篇文章中实现建议的解决方案,但没有达到我需要的结果在一秒钟内vol的平均值是多少…这个演示在Chrome 72.0.3626.96中对我不起作用。在Firefox中查看它,我得到了更多的响应,但我想我会使用instant。也就是说,当我试图从演示源代码复制一些代码时,我得到了一个错误
声音计没有定义
不是真正的重复任务你不需要脚本处理器,只需要一个音频分析器。