Audio 在javascript中将.wav文件转换为.ogg

Audio 在javascript中将.wav文件转换为.ogg,audio,web,ogg,Audio,Web,Ogg,我正在尝试从浏览器捕获用户的音频输入。我用WAV做了,但是文件太大了。我的一个朋友告诉我OGG文件要小得多。 有人知道如何将WAV转换为OGG吗? 我也有原始数据缓冲区,我真的不需要转换。但我只需要OGG编码器 以下是WAV编码器,来自: 对那些否决了这篇文章的人来说,OGG有什么建议吗?如果不花时间深入了解为什么这个问题是“坏”的,那么否决投票的问题真的是没有效果的。我认为这个问题是有价值的,海报显然花了一些时间试图自己解决这个问题。实际上,的目的正是为了实现这类功能,但目前还没有达到这一目的

我正在尝试从浏览器捕获用户的音频输入。我用WAV做了,但是文件太大了。我的一个朋友告诉我OGG文件要小得多。 有人知道如何将WAV转换为OGG吗? 我也有原始数据缓冲区,我真的不需要转换。但我只需要OGG编码器

以下是WAV编码器,来自:


对那些否决了这篇文章的人来说,OGG有什么建议吗?

如果不花时间深入了解为什么这个问题是“坏”的,那么否决投票的问题真的是没有效果的。我认为这个问题是有价值的,海报显然花了一些时间试图自己解决这个问题。实际上,的目的正是为了实现这类功能,但目前还没有达到这一目的:

本规范描述了用于在web应用程序中处理和合成音频的高级JavaScript API。主要范例是音频路由图,其中许多AudioNode对象连接在一起以定义整体音频渲染。实际的处理将主要发生在底层实现(通常是优化的汇编/C/C++代码),但是直接<强> JavaScript处理和合成也支持>/P> 下面是一个关于当前w3c的声明,它提出了以下几点:

  • 在JavaScript中处理音频时,要获得可靠、无故障的音频,同时实现合理的低延迟,尤其是在处理器负载较重的情况下,这是一项极具挑战性的任务
  • JavaScript比重优化C++代码慢得多,不能利用SSE优化和多线程,这对当今处理器的良好性能至关重要。与JavaScript相比,优化的本机代码处理FFT的速度可以快20倍。对于大量音频源的卷积和3D空间化等繁重的音频处理,它的效率不够
  • setInterval()和XHR处理将占用音频处理的时间。在相当复杂的游戏中,游戏物理和图形需要一些JavaScript资源。这带来了挑战,因为音频渲染是期限驱动的(以避免出现故障并获得足够低的延迟)。 JavaScript不在实时处理线程中运行,因此可以被系统上运行的许多其他线程抢占
  • 垃圾收集(以及Mac OS X上的自动释放池)可能会在JavaScript线程上造成不可预知的延迟
  • 可以在主线程上运行多个JavaScript上下文,从而从执行处理的上下文中节省时间
  • 其他代码(JavaScript除外)如页面呈现在主线程上运行
  • 可以在JavaScript线程上获取锁并分配内存。这可能会导致额外的线程抢占
  • 如今的移动设备处理器性能相对较差,并且存在功耗/电池寿命问题,因此这些问题更加困难
ECMAScript(js)在很多方面都非常快,而且一直在变快,这取决于解释代码的引擎。然而,对于像音频处理这样密集的东西,您最好使用低级别的工具,该工具经过编译以优化特定于任务的资源。我目前正在使用side来完成类似的事情

我知道,仅仅为了获得更紧凑的.ogg文件而必须通过internet连接发送wav文件是非常低效的,但这就是web audio api的现状。要进行任何客户端处理,用户必须显式地授予对本地文件系统的访问权限和文件的执行权限,以便进行转换。希望有人能尽快解决这个突出的问题。祝你好运

编辑:如果你不介意限制你的用户使用Chrome,你也可以使用谷歌的。它似乎是一种非常有前途的技术,可以在沙箱中加载,并获得与本机执行的代码几乎相同的速度。我假设在其他浏览器中也会有类似的实现。

NEW

要在浏览器中对整个文件进行编码,而不使用特殊扩展名,可以使用的Emscripten端口。它附带了对WAV、AIFF和其他几种格式的解码支持,以及内置的重新采样器

一个Ogg-Vorbis编码器


由于提问者主要是为了音频压缩,他们可能也对音频压缩感兴趣。

这个问题让我抓狂,因为我还没有看到任何人提出一个真正干净的解决方案,所以我提出了自己的库:

基本用法

audioRecord.requestDevice(function(recorder){
  // Request user permission for microphone access

      recorder.record(); // Start recording

      recorder.stop();  /Stop recording

      recorder.exportOGG(function(oggBlob){
        //Here's your OGG file
      });

      recorder.exportMP3(function(mp3Blob){
               //Here's your mp3 file
      });

      recorder.exportWAV(function(wavBlob){
            //Here's your WAV file
      });

});
使用连续mp3编码选项,完全在浏览器中捕获和编码音频输入是完全合理的,跨浏览器,无需服务器或本机代码

演示


边缘仍然粗糙,但我会尝试清理/修复它。

好的,这可能不是一个直接的答案,因为它没有说明如何将
.wav
转换为
.ogg
。再说一次,当您可以直接打开
.ogg
文件时,为什么还要麻烦转换呢。这取决于具体情况,但支持WebAudio的浏览器通常也有此功能(Firefox 25+和Chrome 47+)


我从vorbis找到了.ogg编码器源代码。但是JS中没有任何东西,我不能在JS+1中使用相同的算法,因为没有必要对此进行否决。+1同意。这对谁有帮助?谢谢你们。恢复对stackoverflow.com的信任
我下了网
非常感谢@jtrick。Chrome原生客户端似乎是我的解决方案。转换为ogg的整个想法不是发送巨大的wav文件(我想这会在服务器上整理ffmpeg)
audioRecord.requestDevice(function(recorder){
  // Request user permission for microphone access

      recorder.record(); // Start recording

      recorder.stop();  /Stop recording

      recorder.exportOGG(function(oggBlob){
        //Here's your OGG file
      });

      recorder.exportMP3(function(mp3Blob){
               //Here's your mp3 file
      });

      recorder.exportWAV(function(wavBlob){
            //Here's your WAV file
      });

});