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的對象


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM