Определите, есть ли пауза в речи, используя Audio Audio API WebCon API - PullRequest
0 голосов
/ 13 февраля 2019

Попытка лучше понять API Web Audio.Мы используем его для создания AudioContext, а затем отправляем аудио для расшифровки.Я хочу иметь возможность определить, когда происходит естественная пауза в речи или когда пользователь прекратил говорить.

Есть ли в обратном вызове onaudioprocess некоторые данные, к которым можно получить доступ для определения пауз / разрывов в речи?

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
}

Я попробовал решение, которое предлагается в этом посте, но не достигло нужных мне результатов.Сообщение: HTML Аудио запись до тишины?

Когда я анализирую тишину, как предлагает пост, я получаю тот же результат - либо 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
   }
}

Глядя на документацию по методу getByteFrequencyData, я вижу, как он должен давать другое значение (в примере с документацией он даст другой barHeight), но он не работает для меня.https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/getByteFrequencyData#Example

...