Попытка лучше понять 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