Каким образом можно склеить два wav файла в один с помощью javascript (не один за другим, а путем наложения)? Необходимо мерджить несколько звуковых дорожек в одну на выходе получая один файл. Возможно ли это сделать средствами Web Audio API? Буду благодарен, если подкините ссылок, что читать, куда смотреть.
Для склеивания и наложения двух или более звуковых файлов в один через Web Audio API вам нужно будет использовать AudioContext, AudioBuffer и другие методы и объекты API.
Вот примерный алгоритм, как это можно сделать:
Создайте AudioContext:var audioContext = new AudioContext();Загрузите ваши звуковые файлы и декодируйте их:function loadSound(url) { return fetch(url) .then(response => response.arrayBuffer()) .then(buffer => audioContext.decodeAudioData(buffer)); } Promise.all([loadSound('file1.wav'), loadSound('file2.wav')]) .then(function(decodedBuffers) { // Далее работайте с полученными AudioBuffer'ами });Создайте новый AudioBuffer и объедините данные из двух и более AudioBuffer'ов:var mergedBuffer = audioContext.createBuffer(channels, length, sampleRate); // Заполните данные нового буфера данными из других буферов var data1 = buffer1.getChannelData(0); var data2 = buffer2.getChannelData(0); var mergedData = new Float32Array(Math.max(data1.length, data2.length)); for (var i = 0; i < mergedData.length; i++) { mergedData[i] = (data1[i] || 0) + (data2[i] || 0); } mergedBuffer.getChannelData(0).set(mergedData);Воспроизведите полученный результат или сохраните его, используя Web Audio API.
Для более подробной информации и примеров вы можете обратиться к следующим ресурсам:
Для склеивания и наложения двух или более звуковых файлов в один через Web Audio API вам нужно будет использовать AudioContext, AudioBuffer и другие методы и объекты API.
Вот примерный алгоритм, как это можно сделать:
Создайте AudioContext:var audioContext = new AudioContext();Загрузите ваши звуковые файлы и декодируйте их:function loadSound(url) {return fetch(url)
.then(response => response.arrayBuffer())
.then(buffer => audioContext.decodeAudioData(buffer));
}
Promise.all([loadSound('file1.wav'), loadSound('file2.wav')])
.then(function(decodedBuffers) {
// Далее работайте с полученными AudioBuffer'ами
});Создайте новый AudioBuffer и объедините данные из двух и более AudioBuffer'ов:var mergedBuffer = audioContext.createBuffer(channels, length, sampleRate);
// Заполните данные нового буфера данными из других буферов
var data1 = buffer1.getChannelData(0);
var data2 = buffer2.getChannelData(0);
var mergedData = new Float32Array(Math.max(data1.length, data2.length));
for (var i = 0; i < mergedData.length; i++) {
mergedData[i] = (data1[i] || 0) + (data2[i] || 0);
}
mergedBuffer.getChannelData(0).set(mergedData);Воспроизведите полученный результат или сохраните его, используя Web Audio API.
Для более подробной информации и примеров вы можете обратиться к следующим ресурсам:
Официальная документация по Web Audio API: https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_APIПримеры использования Web Audio API для манипуляции звуком: https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API/Using_Web_Audio_APIСтатья о создании собственного аудиоредактора с использованием Web Audio API: https://www.html5rocks.com/en/tutorials/webaudio/intro/Надеюсь, это поможет вам реализовать желаемую функциональность с помощью JavaScript и Web Audio API.