0

クライアントの JavaScript でマイク録音を作成し、サーバーに転送してからシルクに変換しようとしています。これらの設定を使用してスピーカーモジュールを使用してサーバーでオーディオを再生しています

var speaker = new Speaker({
  channels: 1,   
  bitDepth: 16,         
  sampleRate: 44000,     
  signed: true
});

しかし、シルクに変換されると、半分の速度に聞こえます。私が書いていないCクラスを使用したシルクへの変換が、pcmファイルとしては問題ないように聞こえるため、速度低下を引き起こしていると思います。Cファイルにはこれらの設定があります

#define FRAME_LENGTH_MS 20
#define SAMPLE_RATE_KHZ 16
#define SILK_BITRATE    14000
#define FRAME_SAMPLES   (FRAME_LENGTH_MS * SAMPLE_RATE_KHZ)

BinaryJS を使用して、コードを Int16array としてサーバーに書き込みます。

ここにコードをコピーしますが、このチュートリアルからほぼそのままコピーしました。

http://blog.groupbuddies.com/posts/39-tutorial-html-audio-capture-streaming-to-node-js-no-browser-extensions

また、ビットレート、サンプルレート、およびシルクコーデックが必要な場合にサンプルレートをダウンサンプリングする方法に関して、audioContext から正確に何を得ているかを知りたいです。

編集:

サンプルの半分を削除して float32 を Int16 に変換する onaudioprocess を変更することで、半分の速度を (ちょっと) 解決しました。

l = buffer.length;
        point = Math.floor(l/2);
        buf = new Int16Array(Math.floor(l/2));
        for (var x = l; x > 0;) {
            var average = (buffer[x] + buffer[x-1]) / 2;
            buf[point] = Math.min(1, average)*0xFFFF;
            point -= 1;
            x -= 2;
        }

        return buf.buffer;

ただし、オーディオのピッチはまだ半分です。

4

1 に答える 1

0

この問題の残りの部分に答えるいくつかの他の質問に答えましたが、AudioContext オブジェクトがダウンサンプリング アルゴリズムで使用して最終的にブラウザのサンプリングに動的に調整することになったサンプリング レートに関する情報を返すことに疑問を持っている人のためにレート。

navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia;

        var session = {
            audio: true
        };

        navigator.getUserMedia(session, function(stream){
            audioContext = window.AudioContext;
            context = new audioContext();
            sampleRate = context.sampleRate;
            // Pass sample rate to downsample function with my arraybuffer
        },function(e){
           // error
        });
于 2015-03-10T18:22:18.117 に答える