2015-03-02 4 views
2

У меня есть тип blob, созданный webaudio API, но сохраненный файл имеет высокую частоту дискретизации. Как я могу преобразовать его в нижний, может быть, что-то вроде https://developer.mozilla.org/en-US/docs/Web/API/OfflineAudioContext может помочь? Ниже приведен пример кода:Как настроить частоту дискретизации с помощью API веб-аудио?

var xhr = new XMLHttpRequest(); 
    /* HERE IS SOME CONVERTATION TO LOWER RATE */ 

    var fd = new FormData(); 

    fd.append("randomname", bigBlob); 
    xhr.open("POST",url,false); 
    xhr.send(fd); 

    xhr.onload=function(e) { 
     alert(e.target.responseText); 
    }; 
+0

Итак, вы записываете звук с использованием API веб-аудио, и перед отправкой на сервер вы хотите преобразовать его в более низкую частоту дискретизации. Это верно? – aldel

ответ

2
  • Создать OfflineAudioContext со скоростью, которую в конце концов, и количество кадров будет в конце
  • Создание AudioBuffer из необработанных данных буфер
  • Создание AudioBufferSourceNode, установите его атрибут буфера в AudioBuffer вы только что создали, и подключить этот AudioBufferSourceNode к месту назначения в OfflineAudioContext
  • Запустите AudioBufferSourceNode при 0
  • Начало рендеринга
1

Я не мог найти способ контролировать частоту дискретизации, но вот способ повторной выборки (вверх/вниз выборки)

function reSample(audioBuffer, targetSampleRate, onComplete) { 
    var channel = audioBuffer.numberOfChannels; 
    var samples = audioBuffer.length * targetSampleRate/audioBuffer.sampleRate; 

    var offlineContext = new OfflineAudioContext(channel, samples, targetSampleRate); 
    var bufferSource = offlineContext.createBufferSource(); 
    bufferSource.buffer = audioBuffer; 

    bufferSource.connect(offlineContext.destination); 
    bufferSource.start(0); 
    offlineContext.startRendering().then(function(renderedBuffer){ 
     onComplete(renderedBuffer); 
    }) 
} 

Извлеченный здесь: https://github.com/notthetup/resampler

Смежные вопросы