Выберите веб-API для записи звука

Задача — реализовать диктофон на основе стандартного web audio api. Внимательно изучив оба способа ScriptProcessorNode.onaudioprocess и AudioWorkletProcessor.process не принял окончательного решения. Официально сказано, что onaudioprocess устарел с 2014 года и его полноценная замена — это audioworkers. Я новичок в javascript и возможно вопрос звучит глупо, но почему onaudioprocess активно используется по сей день?

Давайте углубимся в детали. AudioWorkletProcessor API доступен для 73% пользователей, а onaudioprocess API на 93%. В ближайшие 2 года можно надеяться на 10-процентный рост. (пользователи сафари). Есть много проектов, статей, решений с использованием onaudioprocess. Даже конкретные задачи можно решить просто с помощью onaudioprocess. Такие решения невозможны для AudioWorklet. Документация AudioWorklet скудна и мало упоминается в Интернете. Например, я до сих пор не понимаю, почему WebWorker знает, что такое blob, а AudioWorklet — нет (исключение devTools: Uncaught ReferenceError: Blob не определен). В машинописи есть давно открытые кейсы для типов объявления базовой функциональности. Все это создает впечатление, что onaudioprocess более живой, чем AudioWorklet. Возможно, AudioWorklet более продуктивен, но сложен в реализации, или API веб-аудио не нужен сообществу javascript? Объясните, почему я должен выбрать AudioWorklet по официальной рекомендации?


person popelenkow    schedule 18.02.2021    source источник


Ответы (1)


Вы задаете здесь много вопросов. Во-первых, вам будет приятно узнать, что в Safari реализованы AudioWorklets. См. https://wpt.fyi/webaudio.

Вторые WebWorkers и Worklets — это разные вещи с разными возможностями. AudioWorklets — это Worklets, поэтому AudioWorklets получают только вещи Worklet, а не вещи WebWorker.

В-третьих, да, ScriptProcessorNode устарел, но все еще широко используется. Вы можете увидеть это на странице https://www.chromestatus.com/metrics/feature/timeline/popularity/646. Сравните это с https://www.chromestatus.com/metrics/feature/timeline/popularity/2263 для AudioWorkletNode.

Конечно, AudioWorklets — это то, что нужно, но когда мне нужно что-то быстрое и грязное, и я не возражаю против обработки в основном потоке, я использую ScriptProcessorNode. Но если я делаю что-то качественное, я бы попробовал вместо этого использовать AudioWorkletNode.

person Raymond Toy    schedule 18.02.2021