我正试图从浏览器捕获用户的音频输入.我用WAV完成了它,但文件非常大.我的一个朋友告诉我,OGG文件要小得多.有谁知道如何将WAV转换为OGG?我也有原始数据缓冲区,我真的不需要转换.但我只需要OGG编码器.
这是Matt Diamond的RecorderJS的WAV编码器:
function encodeWAV(samples){
var buffer = new ArrayBuffer(44 + samples.length * 2);
var view = new DataView(buffer);
/* RIFF identifier */
writeString(view, 0, 'RIFF');
/* file length */
view.setUint32(4, 32 + samples.length * 2, true);
/* RIFF type */
writeString(view, 8, 'WAVE');
/* format chunk identifier */
writeString(view, 12, 'fmt ');
/* format chunk length */
view.setUint32(16, 16, true);
/* sample format (raw) */
view.setUint16(20, 1, true);
/* channel count */
view.setUint16(22, 2, true);
/* sample rate */
view.setUint32(24, sampleRate, true);
/* byte rate (sample rate * block align) */
view.setUint32(28, sampleRate * 4, true);
/* block align (channel count * bytes per sample) */
view.setUint16(32, 4, true);
/* bits per sample */
view.setUint16(34, 16, true);
/* data chunk identifier */
writeString(view, 36, 'data');
/* data chunk length */
view.setUint32(40, samples.length * 2, true);
floatTo16BitPCM(view, 44, samples);
return view;
}
Run Code Online (Sandbox Code Playgroud)
是否有一个OGG?
jtr*_*ick 18
对于那些对这篇文章投票不好的人:如果没有花时间提供某种洞察为什么问题在某种程度上"糟糕",那么向下投票问题真的没有成效.我认为这个问题很有价值,而海报显然花了一些时间试图自己解决这个问题.该网络音频规范实际上是意在让正是这种功能,但只是不接近实现这一目的尚未:
该规范描述了用于在Web应用程序中处理和合成音频的高级JavaScript API.主要范例是音频路由图,其中许多AudioNode对象连接在一起以定义整体音频呈现.实际处理将主要在底层实现中进行(通常是优化的Assembly/C/C++代码),但也支持直接JavaScript处理和合成.
这是关于当前w3c 音频规范草案的声明,它提出了以下几点:
ECMAScript(js)对于很多事情来说非常快,并且一直在变快,这取决于解释代码的引擎.然而,对于像音频处理这样密集的东西,使用编译的优化资源以优化特定于任务的资源的低级工具会更好.我目前正在服务器端使用ffmpeg来完成类似的事情.
我知道,为了获得更紧凑的.ogg文件,必须通过互联网连接发送一个wav文件是非常低效的,但这是web音频api的当前状态.要进行任何客户端处理,用户必须明确地授予对本地文件系统的访问权限以及进行转换的文件的执行权限.希望有人能尽快解决这个明显的问题.祝好运.
修改:如果您不介意将用户限制为Chrome,也可以使用Google的原生客户端.看起来非常有前途的技术可以加载到沙箱中,并且可以实现几乎与原生代码一样好的速度.我假设在某些时候在其他浏览器中会有类似的实现.
Sam*_*Sam 11
这个问题一直让我抓狂,因为我没有看到有人想出一个非常干净的解决方案,所以我想出了自己的库:
https://github.com/sb2702/audioRecord.js
基本用法
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
});
});
Run Code Online (Sandbox Code Playgroud)
使用连续mp3编码选项,完全在浏览器,跨浏览器中捕获和编码音频输入是完全合理的,无需服务器或本机代码.
演示:http://sb2702.github.io/audioRecord.js/
它的边缘仍然很粗糙,但我会尝试清理/修复它.
新增:Matt Diamond的Recorder.js录制到Ogg-Opus的衍生作品
为了在没有特殊扩展名的浏览器中将文件整体编码为Ogg-Opus,可以使用opus-tools / opusenc (demo)的Emscripten端口。它具有对WAV,AIFF和其他两种格式的解码支持以及内置的重新采样器。
一个OGG-Vorbis格式编码器也可。
由于发问者主要用于音频压缩,因此他们可能也对使用lame的mp3编码感兴趣。
| 归档时间: |
|
| 查看次数: |
9025 次 |
| 最近记录: |