Определите, есть ли пауза в речи, с помощью AudioContext API веб-аудио

Пытаюсь лучше понять Web Audio API. Мы используем его для создания 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


person islalobo    schedule 13.02.2019    source источник
comment
Возможный дубликат запись аудио HTML до тишины?   -  person Patrick    schedule 13.02.2019
comment
Это не дубликат, потому что я пытался реализовать предложенное решение в этом посте, но не добился нужных мне результатов.   -  person islalobo    schedule 13.02.2019
comment
посмотрите на использование клипа, в котором средняя громкость за период в секунду ... webrtc .github.io/samples/src/content/getusermedia/volume   -  person Robert Rowntree    schedule 13.02.2019
comment
Эта демонстрация не работает для меня в Chrome 72.0.3626.96. Глядя на это в Firefox, я получаю немного больше откликов, но я думаю, что хотел бы использовать Instant. Тем не менее, когда я пытался скопировать часть кода из исходного кода демо, я получаю сообщение об ошибке SoundMeter is not defined   -  person islalobo    schedule 13.02.2019
comment
На самом деле не дублирующий вопрос, а этот ответ может вам помочь. Здесь вам не нужен ScriptProcessor, только AudioAnalyser.   -  person Kaiido    schedule 20.03.2019