写入服务器时,麦克风的半速音频上下文
Half speed AudioContext from microphone when written to server
我正在尝试在客户端javascript上编写麦克风录音,将其传输到服务器,然后将其转换为丝绸。我使用这些设置使用扬声器模块在服务器上播放音频
var speaker = new Speaker({
channels: 1,
bitDepth: 16,
sampleRate: 44000,
signed: true
});
但是当它被转换为丝绸时,它听起来会半速。我相信是使用我没有编写的 C 类转换为 silk 会导致速度变慢,因为它作为 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
也很想知道 im 在比特率、采样率方面到底从 audioContext 中得到了什么,以及如果我必须为 silk 编解码器,如何对采样率进行下采样。
编辑:
我确实(有点)通过修改onaudioprocess解决了半速问题,其中我通过删除一半的样本将float32转换为Int16。
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;
但是,音频音高仍然是一半。
我还有其他一些问题可以回答这个问题的其余部分,但对于任何想知道 AudioContext 对象确实返回有关采样率的信息,我最终使用缩减采样算法动态调整到任何浏览器的采样率。
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || 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
});
- 如何播放部分音频文件
- 将函数的上下文应用于javascript变量
- 音频控件在mouseover上显示,在mouseout上淡出
- HTML5音频加载和播放获胜'我不能在iPad上工作
- Twitter Bootstrap typeahead:使用“this”获取上下文/调用元素
- 使用JQuery的动态上下文菜单
- 是否可以在浏览器中使用纯JavaScript保存音频流
- 如何访问UIWebView'的子窗口上下文
- angular不会更改json的音频源
- 音频上下文的顶点置换(THRE.JS R76)
- 音频上下文在安卓上无法正常工作
- 将过滤器应用于音频上下文
- 写入服务器时,麦克风的半速音频上下文
- 如何从音频上下文元素收集时间值
- 在 Web 音频 API 中使用多个音频上下文是否存在相关问题
- 具有 10 多个音频上下文的崩溃网络浏览器
- 如何使用从音频上下文创建的分析器来检测播放的声音是否可听
- 音频与音频上下文
- Web音频离线上下文和分析器节点
- 音频上下文振荡器不会播放多次