zoukankan      html  css  js  c++  java
  • JavaScript 实现音频剪切

    前端实现音频剪切,实际上是把需要的部分复制出来。

    剪切audiobuffer

    引用:JS纯前端实现audio音频剪裁剪切复制播放与上传
    实现的原理很简单,创建一个空的AudioBuffer,复制现有的通道数据前3秒的数据,然后复制的内容写入到这个空的AudioBuffer,于是我们就得到了一个剪裁后的音频Buffer数据了。

    // 声道数量和采样率
    var channels = audioBuffer.numberOfChannels;
    var rate = audioBuffer.sampleRate;
    
    // 截取前3秒
    var startOffset = 0;
    var endOffset = rate * 3;
    // 3秒对应的帧数
    var frameCount = endOffset - startOffset;
    
    // 创建同样采用率、同样声道数量,长度是前3秒的空的AudioBuffer
    var newAudioBuffer = new AudioContext().createBuffer(channels, endOffset - startOffset, rate);
    // 创建临时的Array存放复制的buffer数据
    var anotherArray = new Float32Array(frameCount);
    // 声道的数据的复制和写入
    var offset = 0;
    for (var channel = 0; channel < channels; channel++) {
        audioBuffer.copyFromChannel(anotherArray, channel, startOffset);
        newAudioBuffer.copyToChannel(anotherArray, channel, offset);
    }
    
    // newAudioBuffer就是全新的复制的3秒长度的AudioBuffer对象
    

    剪切arraybuffer

    实现原理同上,此处的arraybuffer应当是没有header的。在计算音频长度时,

    duration = arraybuffer.bytelength / samplerate / 2

    之所以除以2是因为duration是16bit的pcm格式长度,而arraybuffer的bytelength是8bit的。

    const startOffset = 0;
    const clipDuration = 3;//截取前3秒
    const clipBuffer = audioBuffer.slice(startOffset , clipDuration * 2 * sampleRate);
    // clipBuffer 就是全新的复制的3秒长度的Arraybuffer的对象
    
  • 相关阅读:
    剑指offer 二叉树中和为某一个值的路径
    剑指offer 二叉搜索树的后序遍历序列
    二叉树
    剑指offer 二叉树的层序遍历
    剑指offer 二叉树的镜像
    二叉树的子结构
    牛客网 斐波那契数列
    NMT 机器翻译
    剑指offer 从尾到头打印链表
    剑指offer 链表中倒数第k个节点
  • 原文地址:https://www.cnblogs.com/xym4869/p/13847425.html
Copyright © 2011-2022 走看看