是否可以在不使用第三方软件和网站的情况下以及在js中更改记录的波形文件的采样率?如果recorder.js将频率设置为44100
worker.postMessage ({
command: 'init',
config: {
sampleRate: 44100
}
} ) ;
如果将文件的长度减少到22050,那么文件的长度将增加2倍,而且复制速度会慢,同时提高播放速度,录音会听起来像fine.Actually --是否可以改变已经包含文件的采样率的问题,以及如何做?
发布于 2013-12-20 17:45:51
到目前为止,我发现的唯一方法是一个小型重采样库xaudio.js,它是speex.js库的一部分。效果很好。我使用它将音频从本机格式转换为8 8Khz。
发布于 2017-07-30 06:25:34
对任何感兴趣的人..。由于类型化数组是可传输的,所以可以将它们发送到web工作者,然后向下发送示例,然后将其发回或发送到服务器或其他地方。
//get audio from user and send it to a web worker
function recordUser(argument) {
//
var audioCtx = new AudioContext();
var worker = new Worker('downsampler.js');
// Create a ScriptProcessorNode with a bufferSize of 512 and a single input and no output channel
var scriptNode = audioCtx.createScriptProcessor(512, 1, 0);
console.log(scriptNode.bufferSize);
// Give the node a function to process audio events
scriptNode.onaudioprocess = function(audioProcessingEvent) {
var inputBuffer = audioProcessingEvent.inputBuffer;
console.log(inputBuffer.getChannelData(0));
worker.postMessage(inputBuffer.getChannelData(0));
}
navigator.mediaDevices.getUserMedia({ audio: true })
.then(function(mediaStream) {
var mediaStreamSource = audioCtx.createMediaStreamSource(mediaStream);
mediaStreamSource.connect(scriptNode);
})
.catch(function(err) { console.log(err.name + ": " + err.message); });
}
网络工作者就是这样。如果要将其发送到服务器,请使用websocket。否则,使用post消息将数据传输回客户端。您还需要添加一个事件侦听器客户端,所以搜索"mdn WebWorker“就可以了。
//example worker that sends the data to both a web socket and back to the user
var ws = new WebSocket('ws://localhost:4321');
ws.binaryType = 'arraybuffer';
self.addEventListener('message', function(e) {
var data = e.data;
var sendMe = new Float32Array(data.length/16);
for(var i = 0; i * 16 < data.length; i++) {
sendMe[i] = data[i*16];
}
//send to server
ws.send(sendMe);
//or send back to user
self.postMessage(sendMe)
}, false);
https://stackoverflow.com/questions/19411160
复制相似问题