Невозможно отключить один канал в wavesurfer.js - PullRequest
0 голосов
/ 25 октября 2018

Я потратил несколько часов, пытаясь выбрать один канал из стереофонического mp3-файла, загруженного с wavesurfer.js

1 Ответ

0 голосов
/ 25 октября 2018

Я наконец-то нашел решение, которое, вероятно, не самое лучшее, но оно работает без проблем.

Идея состоит в том, чтобы просто заменить буфер из канала, который я хочу отключить, нулями.Для этого я сначала сохраняю исходные данные с wavesurfer.backend.buffer.getChannelData(0) и создаю массив нулей такой же длины.Затем я заменяю содержимое канала с помощью wavesurfer.backend.buffer.copyToChannel(left_zeros, 0).

Работает как шарм!

    var wavesurfer = WaveSurfer.create({
        container: '#waveform',
        waveColor: 'darkorange',
        progressColor: 'purple',
        splitChannels: true,
        height: 150,
    });

    left_data = null;
    left_zeros = null;
    right_data = null;
    right_zeros = null;

    wavesurfer.load('./stereo-file.mp3');

    wavesurfer.on('ready', function () {



        left_data = wavesurfer.backend.buffer.getChannelData(0).map(d => {
            return d;
        });
        left_zeros = left_data.map(d => {
            return 0.;
        });

        right_data = wavesurfer.backend.buffer.getChannelData(1).map(d => {
            return d;
        });
        right_zeros = right_data.map(d => {
            return 0.;
        });

    });

    function playLeft() {
        wavesurfer.backend.buffer.copyToChannel(left_zeros, 0);
        wavesurfer.backend.buffer.copyToChannel(right_data, 1);
    }

    function playRight() {
        wavesurfer.backend.buffer.copyToChannel(left_data, 0);
        wavesurfer.backend.buffer.copyToChannel(right_zeros, 1);
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/wavesurfer.js/1.2.3/wavesurfer.min.js"></script>

<div id="waveform"></div>

<p align="center">
    <button class="btn btn-primary" onclick="playLeft()">
        <i class="glyphicon glyphicon-play"></i>
        Left
    </button>
    <button class="btn btn-primary" onclick="playRight()">
        <i class="glyphicon glyphicon-play"></i>
        Right
    </button>
    <button class="btn btn-primary" onclick="wavesurfer.playPause()">
        <i class="glyphicon glyphicon-play"></i>
        Play
    </button>
</p>
...