使用 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 并拆分立体声信号?