2014-01-04 1 views
3

Моя задача - добавить некоторый эффект к записанному файлу.Добавление эффектов к уже записанному звуку с помощью API веб-аудио

Вот скрипт в действии Я использую Recorder.JS

и вот код https://github.com/cwilso/AudioRecorder/blob/master/js/recorderjs/recorder.js

Я хочу, чтобы добавить поле.

Я пробовал искать в других кодах, которые добавляют некоторые эффекты к аудио. Но, похоже, recorder.js обрабатывает буферы по-разному.


редактировать

function playbackRecorderAudio() { 
    audioRecorder.getBuffer(function(buffers) { 
     var source = audioContext.createBufferSource(); 
     source.buffer = audioContext.createBuffer(1, buffers[0].length, 44100); 
     source.buffer.getChannelData(0).set(buffers[0]); 
     source.buffer.getChannelData(0).set(buffers[1]); 
     source.connect(audioContext.destination); 
     source.noteOn(0); 
    }); 
} 

вот как мой код выглядит теперь, с помощью этой функции, я запрос уже записанный звук и воспроизводить его.

Могу ли я имитировать некоторый эффект, чтобы приблизиться к этому: http://www.youtube.com/watch?v=Lr80slqJ3zo Это на грузинском языке, но я надеюсь, что вы получите эту идею. Его больше похоже на гелиевый торт. (заметьте, я не хочу менять скорость звука).

Когда я попытался исследовать эффект гелия, я обнаружил следующее: http://chemistry.about.com/b/2013/08/26/helium-voice-is-not-higher-in-pitch.htm это означает, что звук должен быть 2,5 быстрее, чем воздух.

Могу ли я получить что-то близкое к этому?


редактировать

от того, что @cwilso предложил, http://chromium.googlecode.com/svn/trunk/samples/audio/granular.html ближайший я видел до сих пор. Но мне не удалось изменить его, чтобы работать с моим playbackRecorderAudio(). Вот почему я начинаю щедрот все, что я есть


редактировать

вот jsFiddle моего кода: http://jsfiddle.net/Lsvnp/1/

Прежде всего позвольте мне описать то, что я пытаюсь достичь : Я хочу записать звук с микрофона пользователей, добавить к нему этот эффект. Когда пользователь нажимает кнопку «Остановить запись» (stopRecording), она добавит HTML-аудио, что позволит пользователю слушать записанные записи. Если ему это понравится, он затем загрузит его на мой сервер (uploadAudio function)

КОГДА загружена страница, запись не инициализирована. для инициализации записи пользователю необходимо нажать некоторую кнопку, которая вызовет функцию recordAudio.

Теперь проблема в том, что я не знаю, где подключить функцию playbackRecorderAudio. использовать его как скрытое от буфера.

ответ

1

Код гранулярного эффекта, который вы хотите, можно использовать. Единственное, что вам нужно сделать, это подключить вывод исходного узла к первому узлу кода страницы с гранулярными эффектами. Тем не менее этот код немного грязный, но я постараюсь объяснить его как можно лучше ниже.

После некоторого поиска в коде, это выглядит как аудио структура выглядит следующим образом:

source -┬-> grainWindowNode -┬-> panner -┬-> dryGain -> compressor -┬-> destination 
     └-> bypass   -┘   └-> wetGain -> convolver -┘ 

Я сделал код, чтобы он работает для вас, смотрите этот jsfiddle

Это немного трудно чтобы сделать так, как вам нужно, чтобы все значения сами соответствовали тому, что вы хотите.

Весь код находится в jsfiddle, и есть две вещи, которые вы должны сделать, чтобы сделать его работу:

  1. прочитал комментарий на вершине (скачать файл и положить его на том же сервере, где вы размещаете его, иначе CORS гарантирует, что вы не сможете получить ресурс. (или вы должны указать заголовок на сервере)
  2. Поместите этот код где-нибудь в свой код, чтобы функция playbackRecorderAudio() сделала что-то полезное. помогите вам, если вы предоставите мне весь свой код, чтобы убедиться, что он работает.

Если вы хотите какой-либо explainment о коде, не стесняйтесь спросить (я не знаю, текущее знание о звуковом API, и все объяснить?)

+0

Привет, MarijnS95, извините за поздний ответ. Я прочитал ваш jsFiddle как 100-й раз, и в эти дни я пытался читать какая-то документация, но это очень сложно). Я обновил свой вопрос, не могли бы вы мне немного помочь? Постскриптум ilustation помогает много, я получил, как это будет работать, я просто не знаю, где подключиться – CBeTJlu4ok

+0

Да, код делает много. Я не знаю, как точно генерируются эффекты, но я знаю, где находятся входные и выходные точки. Код находится на [обновлениях jsfiddle] (http://jsfiddle.net/MarijnS95/WK4vt/5/). Наверху есть комментарий, который объясняет, где подключиться (я просто добавил входной и выходной узлы для легкого подключения. – MarijnS95

+0

Скрипка где-то потерялась, поэтому [здесь новая] (http://jsfiddle.net/MarijnS95/WK4vt/6/). Входом этого является effectInput и выходные эффектыOutput. – MarijnS95

1

Возможно, вам стоит использовать автономный автономный интерфейс, а не рекордер. JS - OAC может работать быстрее, чем в реальном времени.

Это говорит о том, что «гелиевый шаг» выглядит довольно трудно, поскольку он изменяет гармоники вашего голоса.Это звучит скорее как вокодинг, а голос - модулятор и носитель, но смещение гармонических полос (или что-то в этом роде). Видео на YouTube, которое вы указали на , прозвучало, как будто это было фактически сдвинутое по высоте, но с коррекцией скорости - подобно гранулированному синтезу. Посмотрите пример Криса Роджерса http://chromium.googlecode.com/svn/trunk/samples/audio/granular.html - установите скорость 1.0, а шаг - на что-то большее нуля (несколько сотен центов, по крайней мере). Это тот эффект, который вы ищете? Если вы, вы можете прикопаться к примеру Криса, чтобы посмотреть, как это сделать, или использовать версию live-effect, такую ​​как «удвоитель тона» в моих входных эффектах (http://webaudiodemos.appspot.com/input/) (который может быть настроен как быстрее или медленнее, и контролируется как нечто иное, чем октавы).

+0

Здравствуйте, @cwilso, рад, что вы ответили. Я видел ваш пример, но ему никогда не удавалось вникать в него. в моем chrome у меня есть ошибка (возможно, из-за удачи WebGL с моими Linux-драйверами) MAX_VERTEX_TEXTURE_IMAGE_UNITS. Я попытался отключить визуализацию, но больше я копаю, тем больше ошибок у нее было. и мой firefox (который может отображать webGL, он просто перезапускает весь браузер (авария). Мне понравилось зернистое, и он будет копаться в нем, но это не идеально, но достаточно близко, я думаю. О OfflineAudoContext - я не об этом разбираюсь Я хочу получить широкую поддержку, как я могу получить. Recorder.js должен быть в порядке со звуком менее 5 минут. – CBeTJlu4ok

1

высоты тона достигается с помощью (быстрое преобразование Фурье) FFT, который реализован в API веб-аудио. У O'Reilly есть книга «API веб-аудио», которая прекрасно охватывает API. Вы можете увидеть главу о Pitch и частотной области here.