我目前正在嘗試製作網絡編輯器,允許用戶輕鬆地調整其音頻文件的基本設置,因爲我已經整合了waveurfer.js的插件,因爲它具有非常整潔和跨瀏覽器的解決方案,它的波形。使用網絡音頻api和wavesururfer.js剪切和粘貼音頻
在爲功能編制了一個必須列表之後,我決定剪切和粘貼對於本產品的工作是必不可少的,但是花費數小時試圖弄清楚如何在現有庫中實現這一功能後,甚至開始從頭開始重建waveurfer.js功能,以瞭解我尚未成功的邏輯。
我的問題是,如果任何人都可以給我一些關於如何開始構建剪切和粘貼功能的指針,或者甚至是一個非常感謝的例子。
在此先感謝!
WaveSurfer示波器插件: http://wavesurfer-js.org
彈撥網頁編輯器 http://plucked.de
編輯解決方案(例如是WaveSurfer示波器的對象。):
function cut(instance){
var selection = instance.getSelection();
if(selection){
var original_buffer = instance.backend.buffer;
var new_buffer = instance.backend.ac.createBuffer(original_buffer.numberOfChannels, original_buffer.length, original_buffer.sampleRate);
var first_list_index = (selection.startPosition * original_buffer.sampleRate);
var second_list_index = (selection.endPosition * original_buffer.sampleRate);
var second_list_mem_alloc = (original_buffer.length - (selection.endPosition * original_buffer.sampleRate));
var new_list = new Float32Array(parseInt(first_list_index));
var second_list = new Float32Array(parseInt(second_list_mem_alloc));
var combined = new Float32Array(original_buffer.length);
original_buffer.copyFromChannel(new_list, 0);
original_buffer.copyFromChannel(second_list, 0, second_list_index)
combined.set(new_list)
combined.set(second_list, first_list_index)
new_buffer.copyToChannel(combined, 0);
instance.loadDecodedBuffer(new_buffer);
}else{
console.log('did not find selection')
}
}
非常感謝katspaugh!這很棒!當我將新段粘貼到原始緩衝區時,是否還有一種重新繪製波形的方法。 – dennis
@dennis,是的,有'wavesurur.loadDecodedBuffer'方法,它需要一個AudioBuffer。見https://github.com/katspaugh/wavesurfer.js/blob/a8772b8b5148c58c231d4ad7c1d8b62f37409efb/src/wavesurfer.js#L514 – katspaugh