ブラウザからユーザーの音声入力をキャプチャしようとしています。私はWAVでそれを行いましたが、ファイルは本当に大きいです。私の友人は、OGGファイルははるかに小さいと私に言いました。 WAVをOGGに変換する方法を知っている人はいますか?生データバッファもあります。実際に変換する必要はありません。しかし、私はOGGエンコーダーが必要です。
これが Matt Diamond's 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;
}
oGG用のものはありますか?
この投稿に反対票を投じた人へ:質問がなぜ「悪い」のかについて何らかの洞察を提供する時間をとらずに質問に反対票を投じることは、実際には生産的ではありません。この質問にはメリットがあると思います。ポスターは明らかに、自分たちで問題を解決しようと時間を費やしてきました。 Webオーディオ仕様 は、実際にはまさにこの種の機能を許可することを目的としていますが、まだその目的を達成するのに近づいていません。
この仕様では、Webアプリケーションでオーディオを処理および合成するための高レベルのJavaScriptAPIについて説明します。主要なパラダイムはオーディオルーティンググラフであり、多数のAudioNodeオブジェクトが相互に接続されて全体的なオーディオレンダリングを定義します。実際の処理は主に基盤となる実装(通常は最適化されたアセンブリ/ C/C++コード)で行われますが、直接JavaScriptの処理と合成もサポートされています。
これが現在のw3c オーディオスペックドラフト に関するステートメントです。これは次の点を示しています。
ECMAScript(js)は多くの点で非常に高速であり、コードを解釈しているエンジンに応じて常に高速になっています。ただし、オーディオ処理と同じくらい集中的なものについては、タスクに固有のリソースを最適化するためにコンパイルされた低レベルのツールを使用する方がはるかに良いでしょう。私は現在 サーバー上のffmpeg 側を使用して同様のことを達成しています。
よりコンパクトな.oggファイルを取得するためだけにインターネット接続を介してwavファイルを送信するのは本当に非効率的であることを私は知っていますが、それはWebオーディオAPIの現状です。クライアント側の処理を行うには、ユーザーはローカルファイルシステムへのアクセス権とファイルの実行権限を明示的に付与して変換を行う必要があります。うまくいけば、誰かがこの明白な問題にすぐに対処するでしょう。幸運を。
編集:ユーザーをChromeに制限してもかまわない場合は、Googleの native-client を使用することもできます。サンドボックスにロードされ、ネイティブで実行されるコードとほぼ同じ速度を実現する、非常に有望なテクノロジーのようです。ある時点で、他のブラウザにも同様の実装があると思います。
この質問は私を夢中にさせました。なぜなら、誰も本当にクリーンな解決策を思い付くのを見たことがないので、私は自分のライブラリを思いついたのです。
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
});
});
継続的なmp3エンコーディングオプションを使用すると、サーバーやネイティブコードを使用せずに、ブラウザ、クロスブラウザでオーディオ入力を完全にキャプチャしてエンコードすることが完全に合理的です。
[〜#〜]デモ[〜#〜]: http://sb2702.github.io/audioRecord.js/ ==
まだ端が荒いですが、掃除/直してみます。
[〜#〜] new [〜#〜]: Matt Diamondのrecorderjsレコーディングの派生物Ogg-Opus
特別な拡張子のないブラウザでファイル全体をOgg-Opusにエンコードするには、 opus-tools /)のEmscriptenポートを使用できます。 opusenc(デモ) 。 WAV、AIFF、その他のいくつかの形式のデコードサポートと、リサンプラーが組み込まれています。
Ogg-Vorbisエンコーダー 利用可能 。
質問者は主に音声圧縮を目的としているため、 mp3lameを使用したエンコーディング にも関心がある可能性があります。
.wav
を.ogg
に変換する方法が記載されていないため、これは直接的な答えではない可能性があります。繰り返しになりますが、.ogg
ファイルを直接実行できるのに、なぜ変換に煩わされるのでしょうか。これは MediaRecorder API に依存しますが、WebAudioをサポートするブラウザには通常これもあります(Firefox25 +およびChrome 47+)