Я видел эту страницу resample audio buffer from 44100 to 16000, используя offlineAudioContext для повторной настройки звука из фиксированного буфера. Есть ли способ перепрограммировать звук из потока? То, что я хотел бы сделать, - захватить звук с микрофона, переконвертировать его до низкой скорости передачи и загрузить на наш сервер в режиме реального времени.Повторная запись захваченного аудиопотока с помощью offlineAudioContext
ответ
Что вам нужно сделать, это создать ScriptProcessorNode, а затем выполнить повторный выбор буферов по мере вызова вашего обратного вызова.
var scriptNode = context.createScriptProcessor(4096, 1, 1);
scriptNode.onaudioprocess = function onAudioProcess(e) {
// e.inputBuffer contains what you want
};
Спасибо за ваш ответ. Должен ли я иметь ВСЕ образцы данных, прежде чем я смогу это сделать? Я пытаюсь сделать это в режиме реального времени, а не записывать 30 минут аудио, а затем повторить выбор. Кроме того, спецификация webrtc не указывает, как часто происходит обратный вызов. – user2600798
@ user2600798 Нет, прочитайте документацию, к которой я привязан для ScriptProcessorNode. Первый параметр при его создании указывает размер буфера в образцах. Установив его на 4096, обратный вызов будет запущен каждые 4096 образцов. Я считаю, что 2048 и 4096 являются хорошими компромиссами для латентности и производительности для большинства общих целей. Вы можете опустить его, если вам нужно, или поднять его, если это необходимо. Спецификация WebRTC не имеет ничего общего с этим ... это API веб-аудио. – Brad
Спасибо, что расчистили его. Но это может сделать только один повторный выбор за раз. Информация с конца одного пакета не переносится в следующий пакет, так что в конце звука много ненормально. – user2600798
- 1. Запись аудиопотока из AVPlayer
- 2. Запись интернет-аудиопотока в NodeJS
- 3. FFT с offlineAudioContext
- 4. Запись и воспроизведение аудиопотока с использованием Qt
- 5. Запись и воспроизведение аудиопотока, записанного с микрофона
- 6. Повторная запись запроса
- 7. Повторная запись дважды
- 8. java.util.zip.ZipException: повторная запись:
- 9. Повторная запись функции рекурсивно
- 10. OfflineAudioContext FFT анализ с хромом
- 11. Повторная запись вторичных буферов команд
- 12. URL-адрес Повторная запись с использованием C#
- 13. Не удалось создать 'OfflineAudioContext'?
- 14. Запись аудиопотока в андроид без микрофона
- 15. Повторная запись URL-адресов с переменными (.htaccess)
- 16. Повторная запись в asp.net с обновлением
- 17. Повторная запись динамического URL-адреса с HTACCESS
- 18. Большой запрос, если повторная запись (с плоским)
- 19. Прогрессивная загрузка с помощью аудиопотока Matt Gallagher
- 20. Повторная запись кода для удаления условных операторов
- 21. Стеганография с использованием аудиопотока
- 22. сервер аудиопотока с netty
- 23. Повторная запись URL-адреса ASP.NET; Это возможно?
- 24. BigQuery Повторная запись добавляется за пределами массива
- 25. Повторная запись инструкции AVERAGEIFS в инструкцию STDEV
- 26. Повторная запись цикла for в цикл while
- 27. Повторная запись последнего элемента ListView назад
- 28. Повторная запись динамического URL-адреса в nginx
- 29. Зачем повторяется повторная запись цикла? JavaScript
- 30. java.util.zip.ZipException: повторная запись: com/localtics/android/BuildConfig.class
Есть ли причина, по которой вы хотите использовать такую медленную частоту дискретизации? Если вы просто пытаетесь уменьшить пропускную способность, уменьшение битовой глубины - это гораздо лучшая идея. API веб-аудио использует образцы float32. Вы можете уйти с 8-битными выборками на 44,1 кГц намного лучше, чем вы можете с 16-разрядными образцами на частоте 16 кГц. – Brad
Да. Устройства, разговаривающие с браузером, знают только скорость выборки 8K, закодированную в ADPMC, и это 4 бита на выборку. Кроме того, в среде, в которой мы находимся, есть несколько сотен пользователей, которые загружают аудио в реальном времени (только речи) на облачные серверы одновременно почти 24 часа в сутки. Так что да, низкая пропускная способность - определенно требование. Хорошая идея по 8-битной выборке. Мы можем уменьшить его на стороне сервера в режиме реального времени, и это облегчает работу, так как большая часть моей команды состоит из людей C, C++. – user2600798
Знают ли ваши разработчики о Emscripten? https://kripken.github.io/emscripten-site/ – Brad