javascript – 在网络上录制音频,预设:16000Hz 16bit

前端之家收集整理的这篇文章主要介绍了javascript – 在网络上录制音频,预设:16000Hz 16bit前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
function floatTo16BitPCM(output,offset,input){
  for (var i = 0; i < input.length; i++,offset+=2){
    var s = Math.max(-1,Math.min(1,input[i]));
    output.setInt16(offset,s < 0 ? s * 0x8000 : s * 0x7FFF,true);
  }
}

function writeString(view,string){
  for (var i = 0; i < string.length; i++){
    view.setUint8(offset + i,string.charCodeAt(i));
  }
}

function encodeWAV(samples){
  var buffer = new ArrayBuffer(44 + samples.length * 2);
  var view = new DataView(buffer);

  /* RIFF identifier */
  writeString(view,'RIFF');
  /* RIFF chunk length */
  view.setUint32(4,36 + 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,true);
  /* data chunk identifier */
  writeString(view,36,'data');
  /* data chunk length */
  view.setUint32(40,samples.length * 2,true);

  floatTo16BitPCM(view,44,samples);

  return view;
}

嗨,我正在使用此源代码为我的学校考试录制音频.它以44100Hz和16bit记录音频.我想更改录音设置以录制16000Hz和16bit的音频.
我尝试将函数encodeWAV中的44修改为16,但它不起作用.

function encodeWAV(samples){
  var buffer = new ArrayBuffer(44 + samples.length * 2);
  var view = new DataView(buffer)

我也试图改变floadRToBitPCM.我试图将44改为16但它也没有用.

floatTo16BitPCM(view,samples);

你能帮我解决这个问题吗?我不知道如何修改这个源代码.

解决方法

我不相信你可以使用Web Audio API来控制采样率…它会获取在浏览器之外定义的系统默认采样率…当然,在录制之后,你可以通过编程方式改变音频以重新采样到任何样本大多数音频播放器只能播放标准采样率的媒体…能够呈现16 kHz的关闭采样率可能比从44.1到16 kHz的重采样更具挑战性

猜你在找的JavaScript相关文章