共计 872 个字符,预计需要花费 3 分钟才能阅读完成。
前言
本文接上文,是音视频处理专题文章,上节说了视频上传截取封面。本文介绍音频上传。(最近发现张鑫旭大神也更新了类似文章,本文借鉴其文章,作为音频上传专题文章)
原理
其实音频截取原理也是 ArrayBuffer 转 AudioBuffer 然后创建一个空的 AudioBuffer,复制现有的通道数据前 3 秒的数据,然后复制的内容写入到这个空的 AudioBuffer,于是我们就得到了一个剪裁后的音频 Buffer 数据了。
案例
HTML 代码:
js 代码:
file.onchange = function (event) {
var target = event.target;
var file = target.files[0];
var type = file.type;
// 开始识别
var reader = new FileReader();
reader.onload = function (event) {
var arrBuffer = event.target.result;
var audioCtx = new AudioContext();
audioCtx.decodeAudioData(arrBuffer, function(audioBuffer) {
var duration = audioBuffer.duration;
var channels = audioBuffer.numberOfChannels;
var rate = audioBuffer.sampleRate;
// 3 秒
var startOffset = 0;
var endOffset = rate * 3;
var frameCount = endOffset - startOffset;
var newAudioBuffer;
newAudioBuffer = new AudioContext().createBuffer(channels, endOffset - startOffset, rate);
var anotherArray = new Float32Array(frameCount);
var offset = 0;
for (var channel = 0; channel
小结
上面就是音频文件截取的案例。
正文完