クライアントの 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 としてサーバーに書き込みます。
ここにコードをコピーしますが、このチュートリアルからほぼそのままコピーしました。
また、ビットレート、サンプルレート、およびシルクコーデックが必要な場合にサンプルレートをダウンサンプリングする方法に関して、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;
ただし、オーディオのピッチはまだ半分です。