我正在尝试制作一个Web编辑器,允许用户轻松调整其音频文件的基本设置。我已经集成了wavesurfer.js插件,因为它具有非常整洁和跨浏览器的波形解决方案。
在编制必须功能列表后,我决定剪切和粘贴对于使此产品工作至关重要,然而,在花费数小时尝试如何在现有库中实现此功能甚至开始从头重建wavesurfer.js功能以理解逻辑后,我仍未成功。
我的问题是,是否有人可以给我一些指针,告诉我如何开始构建剪切和粘贴功能,或者甚至提供一个示例,这将非常感激。
先行致谢!
wavesurfer插件: http://wavesurfer-js.org plucked web编辑器: http://plucked.de 编辑解决方案(instance是wavesurfer对象):
在编制必须功能列表后,我决定剪切和粘贴对于使此产品工作至关重要,然而,在花费数小时尝试如何在现有库中实现此功能甚至开始从头重建wavesurfer.js功能以理解逻辑后,我仍未成功。
我的问题是,是否有人可以给我一些指针,告诉我如何开始构建剪切和粘贴功能,或者甚至提供一个示例,这将非常感激。
先行致谢!
wavesurfer插件: http://wavesurfer-js.org plucked web编辑器: http://plucked.de 编辑解决方案(instance是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')
}
}
wavesurfer.loadDecodedBuffer
的方法,它需要传入一个 AudioBuffer。请参见 https://github.com/katspaugh/wavesurfer.js/blob/a8772b8b5148c58c231d4ad7c1d8b62f37409efb/src/wavesurfer.js#L514。 - katspaugh