Cordova / PhoneGap, запись аудио файла до тишины с помощью аудио входного плагина - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно загрузить в веб-сервис аудиофайл, записанный с помощью cordova-plugin-audioinput.Мне нужно использовать этот плагин, а не основной, потому что audioinput поддерживает аудио формат wav, единственный принятый веб-сервисом.

Действия «остановить запись» и «загрузить» должны запускаться, когда молчаниеобнаружен (это задача, для которой мне нужна помощь).

Я думаю, что мне придется каким-то образом работать с осциллограммой, чтобы обнаружить тишину, поэтому научиться читать аудиоданные в реальном времени во время записи.пытаюсь реализовать следующий пример:

https://developer.mozilla.org/en-US/docs/Web/API/AnalyserNode/fftSize

Вот мой код:

audioinput.start({
    sampleRate: 24000,
    fileUrl: cordova.file.cacheDirectory + 'test.wav',
    streamToWebAudio: true
});

const audioCtx = audioinput.getAudioContext();
const analyser = audioCtx.createAnalyser();
analyser.fftSize = 2048;
var bufferLength = analyser.fftSize;
var dataArray = new Uint8Array(bufferLength);

let dataArray;

function draw () {
    requestAnimationFrame(draw);
    dataArray = new Uint8Array(bufferLength);
    analyser.getByteTimeDomainData(dataArray);
    console.log(dataArray);
    // ... draw the waveform ...
    // ... or detect silence ...
}

draw();

К сожалению, результат заключается в том, что в функции draw ()все элементы audioData имеют значение 128.

Я тестирую на устройстве (OnePlus 6 с Android 9, но это должно работать и на iOS).

Спасибо!

1 Ответ

0 голосов
/ 25 февраля 2019

Вы не показываете его в своем фрагменте, но вы забыли подключить что-то к входу AnalyserNode?Если ничего не подключено, вход к узлу равен нулю, и getByteTimeDomainData вернет 128 для них (как указано https://webaudio.github.io/web-audio-api/#dom-analysernode-getbytetimedomaindata)

...