Есть ли способ загрузить аудиофайл всех аудиопотоков, воспроизводимых на определенной странице? - PullRequest
0 голосов
/ 18 апреля 2020

Я создаю приложение, используя Pizzicato JS + Howler JS. Эти библиотеки, по сути, позволяют воспроизводить несколько аудиофайлов одновременно. Представьте себе 4 звуковых дорожки, каждая из которых содержит такой инструмент, как гитара, бас, ударные, вокал и т. Д. c ..

Все отлично работает при использовании групповой функциональности Pizzicato JS или использовании forEach l oop на всех моих звуках Вой и стрельбы .play(). Тем не менее, я хотел бы загрузить окончательный звук, который я слышу из своих динамиков. Любая идея о том, как подойти к этому?

Я посмотрел в OfflineAudioContext, но я не уверен, как использовать его для создания аудиофайла. Похоже, что он нуждается в источнике аудио, как тег <audio>. Возможно ли то, что я пытаюсь сделать? Любая помощь приветствуется.

1 Ответ

0 голосов
/ 19 апреля 2020

Я думаю, что OfflineAudioContext может помочь в вашем случае использования.

Допустим, вы хотите создать файл длиной 10 секунд. Он должен содержать один звук, воспроизводимый с начала до секунды 8. И есть еще один звук, который должен начинаться с секунды 5 и должен длиться до конца. Оба звука уже являются аудиобуферами (названными soundBuffer и anotherSoundBuffer).

Вы можете расположить и объединить звуки следующим образом.

const sampleRate = 44100;
const offlineAudioContext = new OfflineAudioContext({
    length: sampleRate * 10,
    sampleRate
});

const soundSourceNode = new AudioBufferSourceNode({
    buffer: soundBuffer
});

soundSourceNode.start(0);
soundSourceNode.stop(8);
soundSourceNode.connect(offlineAudioContext.destination);

const anotherSoundSourceNode = new AudioBufferSourceNode({
    buffer: anotherSoundBuffer
});

anotherSoundSourceNode.start(5);
anotherSoundSourceNode.stop(10);
anotherSoundSourceNode.connect(offlineAudioContext.destination);

offlineAudioContext
    .startRendering()
    .then((audioBuffer) => {
        // save the resulting buffer as a file
    });

Теперь вы можете использовать библиотеку для поворота результирующий AudioBuffer в закодированный аудиофайл. Одна библиотека, которая делает это, например, audiobuffer-to-wav .

...