【问题标题】:Cordova/PhoneGap, recording audio file until silence using audioinput pluginCordova/PhoneGap,使用音频输入插件录制音频文件直到静音
【发布时间】:2019-02-26 17:48:40
【问题描述】:

我需要将使用 cordova-plugin-audioinput 录制的音频文件上传到 Web 服务。我需要使用这个插件而不是核心插件,因为 audioinput 支持 wav 音频格式,这是 Web 服务接受的唯一一种。

当检测到静音时,必须触发“停止录制”和“上传”操作(这是我需要帮助的任务)。

我认为我必须以某种方式使用波形来检测静音,因此为了学习如何在录制时实时读取音频数据,我正在尝试实现以下示例:

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)。

谢谢!

【问题讨论】:

    标签: cordova phonegap web-audio-api


    【解决方案1】:

    您没有在您的 sn-p 中显示它,但是您是否忘记将某些东西连接到 AnalyserNode 的输入?如果没有任何连接,则节点的输入为零,getByteTimeDomainData 将为这些返回 128(由https://webaudio.github.io/web-audio-api/#dom-analysernode-getbytetimedomaindata 给出)

    【讨论】:

    • 我更新了代码,希望现在更清楚了。谢谢。
    • 是的,现在更清楚了。但是您仍然有同样的问题:没有任何东西连接到您的分析器节点。你需要连接一些东西(node.connect(analyser),对于一些合适的节点)你期望非零输出。
    • 我不知道如何连接插件,你能帮帮我吗?
    • 抱歉,我对 Cordova/PhoneGap 一无所知,所以无法提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多