TypeScript запись и воспроизведение необработанного звука PCM - PullRequest
0 голосов
/ 05 июня 2019

Я новичок в TypeScript и во всей среде JavaScript в целом.У меня небольшой проект, который требует создания приложения браузера с TypeScript ( У меня еще нет кода ).

Мне нужно записать необработанный звук PCM с микрофона браузера, зарегистрируйте его и воспроизведите тот же звук PCM через динамики браузера.

Я рассмотрел использование MediaRecorder для записи и использование простого HTMLAudioElement для воспроизведения, но я не уверен, поддерживают ли они RAW аудио.Я также написал несколько постов, в которых упоминается использование AudioContext ScriptProcessorNode для получения необработанного звука, но я не знаю, как их воспроизвести.

Мне не нужны законченные решения, но я был бы признателен за любые указатели или учебные пособия, которые помогут мне получитьэто сделано.

1 Ответ

1 голос
/ 05 июня 2019

Я работаю над небольшой библиотекой под названием extendedable-media-Recorder , которая позволяет расширить собственный MediaRecorder с помощью пользовательских кодировщиков. Кодер для проверки концепции, который я создаю, является WAV-кодером. Надеюсь, что это работает и для вас.

Я еще не документировал библиотеку, поэтому я рад принять ваш вопрос как возможность собрать полный пример использования.

import { MediaRecorder, register } from 'extendable-media-recorder';
import { connect } from 'extendable-media-recorder-wav-encoder';

(async () => {
    // Get the port a worker which can encode WAV files.
    const port = await connect();
    // Register this port with the MediaRecorder.
    await register(port);
    // Request a MediaStream with an audio track.
    const mediaStream = await navigator.mediaDevices
        .getUserMedia({ audio: true });
    // Create a MediaRecorder instance with the newly obtained MediaStream.
    const mediaRecorder = new MediaRecorder(mediaStream, {
        mimeType: 'audio/wav'
    });

    // Kick off the recording.
    mediaRecorder.start();

    mediaRecorder.addEventListener('dataavailable', ({ data }) => {
        // The data variable now holds a refrence to a Blob with the WAV file.
    });

    // Stop the recording after a second.
    setTimeout(() => mediaRecorder.stop(), 1000);
})();

Я надеюсь, что комментарии объясняют, что делает код. Пожалуйста, дайте мне знать, если это не так.

...