Вырезайте и вставляйте аудио, используя 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')
  }
}

Ответы на вопрос(2)

Ваш ответ на вопрос