Как использовать ScriptProcessorNode

Я пытаюсь создать обработчик сценариев веб-аудио в Dart. Я заметил этот вопрос, который показывает использование «javascriptnode»: ScriptProcessorNode

Похоже, этого нет в текущей сборке Dart. Есть ли у кого-нибудь пример, как им пользоваться. Я пытаюсь создать процессор BitCrusher.

Кажется, в последней версии API нет метода onAudioProcess, и я предполагаю, что мне следует использовать метод addEventListener, но я не знаю, каким должен быть тип сообщения. Я даже попробовал метод setEventListener, но все равно не получаю событий.

_script = _context.createScriptProcessor(2048, 1, 1);

_script.addEventListener("message", _onProcess);
_script.setEventListener(_onProcess);   //<--- this doesn't work either.

void _onProcess(Event e) {            //<---- This is never called
  // Perform bit crush algorithm
}

person EndlessLife    schedule 21.11.2014    source источник
comment
Вы видели эту недавнюю проблему dartbug.com/21663?   -  person Günter Zöchbauer    schedule 21.11.2014
comment
Ой. Не видел этой проблемы, как сообщалось. Интересно, что об этом сообщили не более 3 дней назад. Странно, как мы столкнулись с той же проблемой в такие короткие сроки. Ткс. Надеюсь, это скоро исправят ...   -  person EndlessLife    schedule 21.11.2014


Ответы (1)


В то же время (т.е. предполагая, что вскоре вы сможете использовать напрямую _script.onAudioProcess), вы можете использовать следующую заглушку

// stub as onAudioProcess has disappeared from sdk 1.7
Stream<AudioProcessingEvent> onAudioProcess(ScriptProcessorNode node) {
  return node.on['audioprocess'];
}

и используйте это так

onAudioProcess(_script).listen((AudioProcessingEvent event) {

  // example to get output data (for playback)
  Float32List data = event.outputBuffer.getChannelData(0);

  // example to get input data (for recording)
  Float32List data = event.inputBuffer.getChannelData(0);

});
person alextk    schedule 23.11.2014
comment
Интересно. Я проверю это. Спасибо за альтернативу. - person EndlessLife; 24.11.2014