Аудиозапись с помощью 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);

Существует спецификация W3C для API записи http://www.w3.org/TR/mediastream-recording/, но на данный момент она реализуется только в Firefox.

На стороне клиента доступен только взлом ScriptProcessorNode (на этом основан Record.js).

В качестве альтернативы, для некоторых случаев использования может иметь смысл потоковую передачу звука на сервер с использованием WebRTC и запись устройства записи на стороне сервера с использованием Libjingle.

Это теперь доступно в последних браузерах, его называют медиа-рекордером, вы можете найти больше информации здесь

Другие вопросы по тегам