Аудиозапись с помощью HTML5 Web Audio Api
Кто-нибудь знает, предоставляет ли API-интерфейс Web Audio возможность сохранять звук, воспроизводимый с использованием WebAudioContext?
5 ответов
Я на самом деле написал небольшую утилиту под названием RecorderJS, которая может помочь.
Самый простой способ - создать поток как
var dest = audioCtx.createMediaStreamDestination();
var options = {
audioBitsPerSecond : 320000,
sampleSize: 16,
channelCount: 2,
mimeType : 'audio/ogg'
}
var mediaRecorder = new MediaRecorder(dest.stream, options);
var chunks = [];
var isrecording = "Not Recording";
function rec(){
mediaRecorder.start();// start record
dataavailable = true;
isrecording = mediaRecorder.state;
}
вы можете посмотреть пример моего приложения soundrec здесь. Хотя это также полноценный многополосный компрессор и 5-полосный параграф. Да, и если вы посмотрите мою ссылку. Самая важная вещь, о которой нужно думать, - это метод ondataavilable. И сохранение в виде капли - это тоже немного впереди. Ps, если кто-то хочет помочь мне заставить это работать на Chrome, отправьте мне электронное письмо. Спасибо. На данный момент он будет работать только в Firefox. Многодиапазонный компрессор
По крайней мере, в Chrome есть функция startRendering (не проверял Safari). Я думаю, что он подвергается некоторой переделке и поэтому не включен в спецификацию, но может быть добавлен на более позднем этапе (или нет). Если вы хотите проверить текущую реализацию, взгляните на ответ на вопрос: есть ли способ использовать API-интерфейс Web Audio для семплирования звука быстрее, чем в режиме реального времени?
Эта библиотека работает нормально, только веб-аудио API (имеется в виду нет, то есть пользователи): https://github.com/higuma/web-audio-recorder-js
Но мы можем честно использовать его сейчас: http://caniuse.com/
В любом случае, как вы и сказали, ваш звук уже находится в аудиоконтексе, поэтому я думаю, что вы ищете, как использовать AudioDestinationNode, последний узел веб-аудио API. Как только вы сможете воспроизводить звук через обычный html-проигрыватель, вы получите функцию записи по щелчку правой кнопкой мыши, как и playDataUri. Вам нужно добавить атрибут "control" в плеер, или вы можете сделать специальную ссылку с атрибутом download. Я сделал небольшое усовершенствование скрипта Mdn для отправки данных игроку, он должен дать вам хорошую идею:
var audioCtx = new AudioContext();
var source = audioCtx.createMediaElementSource(myMediaElement);
myMediaElement = document.createElement("audio");
myMediaElement.setAttribute("autoplay", true);
myMediaElement.setAttribute("src", uri);
myMediaElement.setAttribute("controls", "controls");
document.getElementById('player').appendChild(myMediaElement);
source.connect(audioCtx.destination);
2016-05-25 01:11
Существует спецификация W3C для API записи http://www.w3.org/TR/mediastream-recording/, но на данный момент она реализуется только в Firefox.
На стороне клиента доступен только взлом ScriptProcessorNode (на этом основан Record.js).
В качестве альтернативы, для некоторых случаев использования может иметь смысл потоковую передачу звука на сервер с использованием WebRTC и запись устройства записи на стороне сервера с использованием Libjingle.
Это теперь доступно в последних браузерах, его называют медиа-рекордером, вы можете найти больше информации здесь