- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
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, offset, 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, 0, '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, 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;
}
您好,我正在使用此源代码为我的学校考试录制音频。它以 44100Hz 和 16 位录制音频。我想更改录制设置以录制 16000Hz 和 16 位的音频。我尝试将函数 encodeWAV 中的 44 修改为 16,但没有成功。
function encodeWAV(samples){
var buffer = new ArrayBuffer(44 + samples.length * 2);
var view = new DataView(buffer)
我还尝试更改 floadRToBitPCM。我试图将 44 更改为 16,但它也没有用。
floatTo16BitPCM(view, 44, samples);
你能帮我解决这个问题吗??我不知道如何修改这个源代码。
最佳答案
编辑:
另一种选择(IMO 更好)是使用 HTML 的 MediaRecorder 并以 .ogg
格式记录,demo , 它是 git repo
我假设您使用的是 this作为消息来源,正如 jaket 所说,行 floatTo16BitPCM(view, 44, samples);
与采样率无关...
如果你想对数据重新取样,你必须修改这个:
function exportWAV(type){
var buffers = [];
for (var channel = 0; channel < numChannels; channel++){
buffers.push(mergeBuffers(recBuffers[channel], recLength));
}
if (numChannels === 2){
var interleaved = interleave(buffers[0], buffers[1]);
} else {
var interleaved = buffers[0];
}
var dataview = encodeWAV(interleaved);
var audioBlob = new Blob([dataview], { type: type });
this.postMessage(audioBlob);
}
进入这个:
function exportWAV(type, desiredSamplingRate){
var buffers = [];
for (var channel = 0; channel < numChannels; channel++){
var buffer = mergeBuffers(recBuffers[channel], recLength);
buffer = interpolateArray(buffer, desiredSamplingRate, sampleRate);
buffers.push(buffer);
}
sampleRate = desiredSamplingRate;
if (numChannels === 2){
var interleaved = interleave(buffers[0], buffers[1]);
} else {
var interleaved = buffers[0];
}
var dataview = encodeWAV(interleaved);
var audioBlob = new Blob([dataview], { type: type });
this.postMessage(audioBlob);
}
数据重采样代码,
// for changing the sampling rate, data,
function interpolateArray(data, newSampleRate, oldSampleRate) {
var fitCount = Math.round(data.length*(newSampleRate/oldSampleRate));
var newData = new Array();
var springFactor = new Number((data.length - 1) / (fitCount - 1));
newData[0] = data[0]; // for new allocation
for ( var i = 1; i < fitCount - 1; i++) {
var tmp = i * springFactor;
var before = new Number(Math.floor(tmp)).toFixed();
var after = new Number(Math.ceil(tmp)).toFixed();
var atPoint = tmp - before;
newData[i] = this.linearInterpolate(data[before], data[after], atPoint);
}
newData[fitCount - 1] = data[data.length - 1]; // for new allocation
return newData;
};
function linearInterpolate(before, after, atPoint) {
return before + (after - before) * atPoint;
};
编辑:如果您不打算对其进行太多更改,则可以将其硬编码为
function exportWAV(type){
var buffers = [], desiredSamplingRate = 16000;
关于javascript - 网络录音,预设: 16000Hz 16bit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28969304/
到目前为止,在我使用 MediaCodec 连接视频的过程中,我终于设法将 48k Hz 音频重新采样为 44.1k Hz。 我一直在测试将视频与两个视频连接在一起,第一个具有 22050 Hz 2
我现在正在尝试编译某人的代码,这个人正在使用变量 HZ(我认为它代表 Hertz,代表 CPU 的赫兹),但编译器提示变量未定义。我猜这个人没有包含正确的头文件。 那么有谁知道HZ是在哪个头文件中定义
在 sched_fair.c 中有: unsigned int sysctl_sched_latency = 5000000ULL //5m unsigned int sysctl_sched_min
我看过这个http://kaasxxx.wordpress.com/2008/01/22/linux-hz-checker/但是脚本似乎不起作用。无论如何知道在 Linux 的终端中检查“HZ”的简单
我正在从Google的文本到语音服务获取16位PCM数据(24000 Hz),然后将其存储在u8数组中。有没有一种简单的方法可以将其重采样到48000 Hz,而输出是u8阵列?我不了解FFmpeg上的
我正在尝试制作一个简单的振荡器程序,我可以在其中更改 Octave 类型,就像 Massive VST 用正数和负数显示它的方式一样: (来源:massivesynth.com) 现在,我知道一个 O
我收到一条消息,该消息从在 ARM 平台上运行的 Linux 应用程序 (Qt C++) 打印出来: Unknown HZ value! (108) Assume 100. 此输出会定期出现在不同
我正在 python 上的 pandas 中开发一个项目。我收到这样的 .csv 文件作为输入: Name Timestamp Data A1 259
我正在使用 Estimote SDK (3.6.0) 与我的信标进行通信。现在我在某处读到,可以获取 5 Hz 信标的广告包。这仅适用于 Estimote 信标还是也适用于其他供应商的信标?在源代码中
音频数据如何下采样到 5512 Hz PCM?我读过一些文章,涉及的步骤是将音频解码为 PCM,将其转换为单声道,然后对其进行下采样。 为了转换为单声道,是否对每帧的 channel 进行平均以获得单
我以大约 50 Hz 的频率(每 0.02 秒一次,正如 Android 所允许的那样...)收集加速度计数据 这是 10 秒数据窗口的幅度图,我想在其上估计功率谱密度: 像这样应用 scipy.si
我有一个传感器,它使用 RS422 通过串口发送消息。 (我认为这是正确的术语。)无论如何,我制作了线束,并将其连接到我的 rs422 到 usb 转换器和 tada,我在 super 终端中获得了数
我一直在使用the Android NDK Camera sample有了它,人们就可以使用 the yuvreader_ inside DrawFrame 读取格式为 AIMAGE_FORMAT_Y
有没有可以读取的全局变量?从 2.6 内核开始,它是可配置的,所以我不能确定是否确实使用了默认值。我正在使用“崩溃”来调试内核核心转储。 最佳答案 它是在编译期间在内核的 .config 中配置的。检
我有 形式的原始音频数据 vector m_shorts; 音频数据为 22050 kHz 单声道。 有人知道我如何(没有任何第三方库)快速将短 vector 转换为 48000 Hz 单声道吗? 我
如何通过ADB shell知道Android内核的HZ值? (没有任何编码) 我检查了How to check HZ in the terminal? ,但这不适用于 Android ADB shel
从 iOS 上的音频流(音乐)获取 Hz 频率值的最佳方法是什么? Apple 提供的最好和最简单的框架是什么?提前致谢。 最佳答案 这是我使用 Accelerate Framework 在 iOS
这就是我所拥有的。它生成 5 秒 Au file具有 440 Hz 正弦波,灵感来自 this question . -- file: tone.hs import qualified Data.By
我目前正在研究 WiFI 的内核源代码(net/mac80211) (三星Galaxy S3---GT-I9300---内核) 我已经看到了如下代码: /* * Scanning implement
我正在使用 ublox NEO-M8N-0-01全局导航卫星系统模块。该模块最高支持 5Hz GPS+GLONASS 和 10Hz GPS。 但是,当我尝试更改采样率(通过消息 View 中的 UBX
我是一名优秀的程序员,十分优秀!