使用 Web Audio API 或其他任何东西在前端修剪静音

Posted

技术标签:

【中文标题】使用 Web Audio API 或其他任何东西在前端修剪静音【英文标题】:Trim Silence in Front End with Web Audio API or anything else 【发布时间】:2020-09-22 15:48:53 【问题描述】:

我正在尝试在将浏览器中记录的音频文件发送到服务器存储之前,修剪前导和尾随的静音。

我一直在寻找示例以更好地理解 WebAudioApi,但示例分散并涵盖了诸如“ScriptProcessorNode”之类的贬义方法,当我找到这个示例时我认为我已经接近了

html Audio recording until silence?

我渴望看到至少静音被处理,我想我可以用它来随后修剪。但是,在沙箱中加载示例后,它似乎并没有以我可以理解的方式检测到静默。

如果有人有任何帮助或建议,将不胜感激!

【问题讨论】:

【参考方案1】:

虽然ScriptProcessorNode 已被弃用,但它不会很快消失。如果可以,您应该使用AudioWorkletNode(但并非所有浏览器都支持)。

但由于您将录制的音频保存在文件中,我将使用decodeAudioData 对其进行解码以获得AudioBuffer。然后使用getChannelData(n)n'th 频道获取Float32Array。分析这个数组,但是您想确定开头的静音在哪里结束,结尾的静音从哪里开始。对每个n 执行此操作。

现在您知道非静音部分在哪里了。 WebAudio 无法对此音频进行编码,因此您必须自己进行编码,或者让MediaRecorder 对其进行编码,以便将其发送到您的服务器。

【讨论】:

非常感谢您的帮助 Raymond,我已经非常接近完成的解决方案,我将在此处添加它,以便遇到此问题的任何人都可以轻松解决。我会将您的答案标记为正确,但我计划发布带有代码细节的答案。 那太棒了。如果您遇到问题,请跟进,如果可以,我会提供帮助。祝你好运! 嗨 Raymond,我很想将编辑后的数据转换(编码)回可用的音频。关于获取我们在 getChannelAudio 上看到的数据所做的工作,您是否有任何参考资料。或者如何使用 MediaRecorder 来做到这一点? @WorkingOnBeingBetter 您为此找到了完整的解决方案吗? 抱歉耽搁了;我错过了评论。我不使用 MediaRecorder,但也许这个例子会有所帮助:developers.google.com/web/updates/2016/01/mediarecorder

以上是关于使用 Web Audio API 或其他任何东西在前端修剪静音的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Web Audio API 中更改音频缓冲源的时间?

OsX 中 USB HID API 的回调永远不会被游戏手柄或其他任何东西调用

如何使用 Web Audio API 移动/调制音频缓冲频率

如何将一个或两个乐器连接到 Web Audio API 并拆分立体声信号?

如何下载我刚刚使用 Web Audio API 创建的声音?

Web Audio API - 录制到 MP3?