Вырезайте и вставляйте аудио, используя web audio api и wavesurfer.js
В настоящее время я пытаюсь создать веб-редактор, позволяющий пользователям легко настраивать базовые настройки для своих аудиофайлов. В качестве плагина я встроил waveurfer.js, поскольку он имеет очень удобное и кросс-браузерное решение для своей формы волны.
После индексации необходимого списка функций, я решил, что вырезка и вставка необходимы для работы этого продукта, однако, потратив часы на то, чтобы выяснить, как реализовать это в существующей библиотеке, и даже начать перестраивать Функциональные возможности wavesurfer.js с нуля, чтобы понять логику, которой я еще не достиг успеха.
Мой вопрос заключается в том, может ли кто-нибудь дать мне несколько советов о том, как начать создавать функции вырезания и вставки, или, может быть, даже пример, который был бы очень признателен.
Заранее спасибо!
плагин waveurfer:http://wavesurfer-js.org
сорвал веб-редакторhttp://plucked.de
РЕДАКТИРОВАТЬ Решение (экземпляр - это объект waveurfer.):
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')
}
}